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 9857C46B19 for ; Fri, 4 Aug 2023 03:07:39 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 88F9F68C618; Fri, 4 Aug 2023 06:07:36 +0300 (EEST) Received: from mgamail.intel.com (mgamail.intel.com [192.55.52.43]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B32CF68C402 for ; Fri, 4 Aug 2023 06:07:28 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1691118454; x=1722654454; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=YnI/S34OprmvkhaGqAm75ZhPa7UoaJFR0M4bFtwEBF8=; b=oDNfzPwELHoWfLa1eicaPXOmOYrleV2QK71H0CqzVCWpfB1gcPEQPNnB zgotj1Ru2WYzEyrPmgLeDJ5TmX+LuUqsh/FJ2MumK8ni/7oPZUsZ4g4FI Gb/Cukyjv7RQsbVTNSrHxV5jBH1MAewcCNPxnPueWtpQPpUJqQ6Dxa5No GqDhSEmFwUPpRR1dHGRxMpF7if10UGkhBHxAhBSP4krERYtoEpIf8MaV1 RLIpnReExo3t825DbaC8cbgx27sB1yUrrOH51Jqz+o8ZBQ3nYo5V8AciL X9dEx1LyEeMITslgtiiCeY0KtQmDBxueM3gaD5KSweEMHfrd/YnlMhLc8 Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10791"; a="456425348" X-IronPort-AV: E=Sophos;i="6.01,253,1684825200"; d="scan'208";a="456425348" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Aug 2023 20:07:26 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10791"; a="795219539" X-IronPort-AV: E=Sophos;i="6.01,253,1684825200"; d="scan'208";a="795219539" Received: from fmsmsx602.amr.corp.intel.com ([10.18.126.82]) by fmsmga008.fm.intel.com with ESMTP; 03 Aug 2023 20:07:26 -0700 Received: from fmsmsx611.amr.corp.intel.com (10.18.126.91) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Thu, 3 Aug 2023 20:07:25 -0700 Received: from fmsmsx610.amr.corp.intel.com (10.18.126.90) by fmsmsx611.amr.corp.intel.com (10.18.126.91) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Thu, 3 Aug 2023 20:07:25 -0700 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx610.amr.corp.intel.com (10.18.126.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27 via Frontend Transport; Thu, 3 Aug 2023 20:07:25 -0700 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (104.47.59.173) by edgegateway.intel.com (192.55.55.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.27; Thu, 3 Aug 2023 20:07:16 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hP+1l4fi6qHmYOT7idughhpHFE3HvUQTvWMbuocf6EmiyP2dRpz6Hos6ZXrEdBCqt1jgwTcNWeVySrLJ/Eoj5EFGdSVx56whmJTICB0XP9hWWq3UfhPA9JIhcr/KpR+w3A74OF9N/5gOWMkc4qAlAmC2z1gjcytj9CD0lpF6PNbn4Wmvzi5c13vwrKJVbTWYBwoIVZCF8UJJ+aDx5MVWkEb3UDlBjFOlau5ycXNcWOepY+1kg188+h4kUJLFa1AcDz9EMvZ7O0zMakPN202OnXq0/U7XsxdZ6HSNsrHPxrTfXGDELJ/wzSTBo9U1dSkBZMKASo4VQz/L2YXEbaFofw== 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=YnI/S34OprmvkhaGqAm75ZhPa7UoaJFR0M4bFtwEBF8=; b=Mh2tJy5GUvZlqbJtnEe0/eV5SH198HJago1yMXwBnwobiS5mOGXFx6rYuHjqW7fZSnO8lN8yglGuaUkbzMjk8QKfqYwvHLawknrFN/Kgl/cOxlVz1WO+zQwRJSd9HVXKoe1TVtEm1Df4CQ+PwAEwShP8NpIeQRXIFq3o5ZLXtAN3/YfLRFbOCqYyn3Zcg8ZTr1ItJPQeJYtvuuru5+pPBj8gyIzZkxJW6KqFc7ZXk2vMhD41/oU6rO1CbiziauRIxLqfmGs9OpUE0Nj0NPNkZaTWWcENZr9ZPBEp47gF7VEICMj9k+nMDcL6Hjrqnat0WtUJKWgxFpjY3wdQxuHpFA== 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 BN9PR11MB5515.namprd11.prod.outlook.com (2603:10b6:408:104::8) by SA2PR11MB4828.namprd11.prod.outlook.com (2603:10b6:806:110::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6631.47; Fri, 4 Aug 2023 03:07:13 +0000 Received: from BN9PR11MB5515.namprd11.prod.outlook.com ([fe80::7502:5d29:13b8:cdb3]) by BN9PR11MB5515.namprd11.prod.outlook.com ([fe80::7502:5d29:13b8:cdb3%4]) with mapi id 15.20.6652.020; Fri, 4 Aug 2023 03:07:13 +0000 From: "Xiang, Haihao" To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [FFmpeg-devel] [PATCH v4 1/9] libavutil: add hwcontext_d3d12va and AV_PIX_FMT_D3D12 Thread-Index: AQHZuijODfajpKUCJE2pa8NTPG6/V6/ZjTUA Date: Fri, 4 Aug 2023 03:07:13 +0000 Message-ID: <8f0dcfd54b9e64489f96790e98e25fdb29d2dbba.camel@intel.com> References: <20230719100202.1584-1-tong1.wu@intel.com> In-Reply-To: <20230719100202.1584-1-tong1.wu@intel.com> Accept-Language: en-AS, zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.44.4-0ubuntu1 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: BN9PR11MB5515:EE_|SA2PR11MB4828:EE_ x-ms-office365-filtering-correlation-id: f33929da-7173-43ce-c74d-08db9497e6b3 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: QfX9HZisfj4HJBtvojYPDQbJS2bfRYGi7VCaD4mKBss8JXHhgxFD+iwbkD1c6WttSgENENxdBoUcGhqPM7NiIB5TJAurBNT/NfiVeRp29BM6GbQFOkaNVFBUL+Ds61NboHO/wVumA22sLJoZ0E3nMzuxSDEwVK0TTLGLQBKAjxz++FI2hzcjFPJ8Qr+9XjzoZqZekoLkLKOnnHTau1f6W+eoTDPPYcGFSl/JJ5fAVaGFF5+qSBXJeLvFHrbeMKluItdzA9iS2fKGrHMLS/m14tr2yQ9GvrtBJqNaRpB2zCOi8ie020o+tpX4hS9/l4xwi19rTvJUOqyXX2sv2LH/pv2fzxuDePakltv/Mn581jT6Sd81mdyW0APWEsRcudgQ5553XUU8GZC2iyZ/83klr02IzewBbodAJ2QAlqhbq1SOyrDiMNhwZeECnFLhUbgDSI6gbdT4ZJzyK+WJkQex5QBNU9eNtWe6wLo/ROVIJ4mw16171dXzDyWHI3mGotT898XL0Rvee5ZrWkOw6pz0ZpcBrrXHgiN8FHw2WB012/Z/uIhVo6HOszBsZ3MvWiaunupbhukjyUQmBw6hry+bXexNIbAIFzlhbREr2I9TtW4pxeHQxQIt7RTVpzGYlUN2d2VyC86UDiOANabJrE/H8A== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BN9PR11MB5515.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230028)(376002)(39860400002)(346002)(366004)(136003)(396003)(451199021)(1800799003)(186006)(966005)(6486002)(19627235002)(478600001)(45080400002)(83380400001)(6506007)(2616005)(107886003)(36756003)(26005)(82960400001)(38100700002)(86362001)(122000001)(6512007)(71200400001)(38070700005)(76116006)(91956017)(6916009)(4326008)(64756008)(66556008)(66476007)(66446008)(8936002)(66946007)(5660300002)(8676002)(316002)(41300700001)(66899021)(30864003)(2906002)(54906003)(2004002)(579004)(559001)(309714004); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?Y1lzWW1jdFZmQ3BzK0Q4MzFlTDJhNDJ1YThpWjBsTTlrUUZpLzVORVdwaVp4?= =?utf-8?B?SHVnSHJZMTlVak9JT2Y2c3kzWjFJazZtV2ZiRFJNZFloUGJOL3RHanlKaG1G?= =?utf-8?B?TDhhYUV6YzhjU1VlRFlSYktOU3dIbDVxK0tJS09pQW50Z2hQN3JPYTlCQVpT?= =?utf-8?B?YTkxSUNzS0VHcTJMOHp5WnMrd1ZYUFlDRUVLcWNjWFFzWUFWMEdIamlQenJV?= =?utf-8?B?Vll6YWJTMW9DZGlpUFFaWWVzdU1ZQ2VFQkNLMjBVZXN0UlM0dUdTM2hkMnZr?= =?utf-8?B?ME9aVk5Bd2tWQ1ptcW11aEViYi84aFVvWXF2Z281Yk1tMnc5aEpKT2VQTTZu?= =?utf-8?B?R3dmanZMbmJZVUljV3dGUGNBQjlXcFRkd1dyNXl4dGQraHhBa291d2N2K3FS?= =?utf-8?B?Kyt5NXhWOWhVbWkwYkw0R2FqZGRoTXhyL0ptMk1pdE9qckt0Sk1LNE1zeVV5?= =?utf-8?B?NlVhTm9BYk1PKzV6Q1lkRjhBaWZUWjM4c1VCeFhwbGtzdEJjVnZWK21Bc3BJ?= =?utf-8?B?c05lTlJYOG1Sc2ZyOXhiSUI5VDVGZmJzTjNxWlIrNGp5WGJHUlFjcWlOanI5?= =?utf-8?B?RGluL2NjRWE2ellRZytaY1VQSnl0OERVK04xUmJrUEJtR3duS3dxL2puZEYy?= =?utf-8?B?Rlc3UXRoNFJRYkpZZU5YM2hJN2JybnlLbHEvLzdXcHZ5bXlSRStEV1hVK0Fn?= =?utf-8?B?UXpaZUJqREFkSnNuRzVwaTA4aXVsTWM3WDZST1J4WFhlRURGbjhvRjBsVGdC?= =?utf-8?B?L1p2TWtCaFhIRjRncU5MNCtpZ0IvMVRLekVWS1pacTk5M3hTYWlndThZcE85?= =?utf-8?B?Nm1XSUEzNk15Ym4wVmxtYkplVkk1L3ZmZGVkNjhNbTVrdEdhUnpYU3AxTzBF?= =?utf-8?B?WVpqRmh0eWROd0JTM09NdTh5MEZ2aGhReCtHalJ2QU9ER2ZtaStFOFQ5Yndk?= =?utf-8?B?V282V2tselRWSUFRaUgrMkJOZXJmM0owempjSjM0eUpOWnBJTEg4aFB4WFVG?= =?utf-8?B?S0RtSVpOdkN4WXcwQmsyOWhialJkd3BTZjRXZVYzVkQySVBZRjliclV0Y0Zt?= =?utf-8?B?RGdMek1zeisvQ1QxWGJaWWNjaVdzdFhuSjhpNkxYRVBmRmJMbGVjOFJmZGMz?= =?utf-8?B?S2Z0U2Voc3ZhenNRcXNLUVBQaVVscmRDS014M3ZSRkdYb2JubG92WHd3a3d0?= =?utf-8?B?S3hSaWdZcGpESkZ1djQ0ZzkyNTFoZmRMaURDS3dXcFh1NmRsU0dsRmFMeUFY?= =?utf-8?B?T1JWcklFdUtscGNZY0VxZU10TjB2dWFEUEtMaGQySkNWbDN4K1p6QWtGMDRv?= =?utf-8?B?UlZiWWZaQ0lKKzJyWkM2NFcvNlVXNE9YLzBYK3hpa2xmbWpYZXhlbmdHSzc0?= =?utf-8?B?VHlITTM4Y2d4bFdZZ0tqbnFncWN2S29hWll0d1V3TkZGMm1hTWwzUXg5MDZi?= =?utf-8?B?NExTdjhzOVhOdlBZbEVmREUyaTRQNkdibVlNcnRRWGN4QkJhTHBMc2Y2Zit4?= =?utf-8?B?dmt5UXAvLzYxRFJSNmMxSkxpTEhrZi9rb1lmZEhXNjM0enpjb3hsWDlSc244?= =?utf-8?B?dHAwNU9SVEJIREhUWVRqSWFWNVIzUXdybTZQNTArMEhJakVUa211NDZ6cGdG?= =?utf-8?B?YXBYMWwxUjlpSHRXVW54TWlmUjFiMkxwcWdoazYyYnlDU1RBeExaSElrek9B?= =?utf-8?B?UWY0R21NbmFUK3I5QkM1VU1HTmRjS01yV21RejBCanFyT3F1MEU1emRCZmFx?= =?utf-8?B?dUNUZnBxUGxESVg3RHp0MnBCaWh5dVUrYk9vL2NaR2Z4clV2TjltSEZzdnVZ?= =?utf-8?B?WVdhcXBFOFVwLyswdFNzSFJjdzd6SWIvVjIrd2JXcFNrZVVzQWQ3eUQyeCs2?= =?utf-8?B?TGJSbXMxc1p0U3lWN1BaU053OEt5STZKbEFOSDBxY09YbXdRSEFkdVprdkpt?= =?utf-8?B?V25VWWRwK3NKeGczSkYxbEw0M1ltOE9FUzNNbDRnRFdCQWE5NSszNkhBQ2pU?= =?utf-8?B?bVVwOXFJN3hIQS9hS2ZoSmlzTFhMcUVRUjB4MS90cjYvNjNXWGdOZnY3Tk1M?= =?utf-8?B?RnVmMXFHRzN4TnV5SHRJT3ZyVEcvODVGWEJYR2M4bHdTRnFzY2RrUU91ZnBv?= =?utf-8?B?ZE1vWi93Q0h0ZVhxdEZBMnluZUpwN1V5TWoxSzhHNjN6allBNVA1Ykd0aS9h?= =?utf-8?B?Smc9PQ==?= Content-ID: <2141FD6C44905A44A6822F0B228464DA@namprd11.prod.outlook.com> MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BN9PR11MB5515.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f33929da-7173-43ce-c74d-08db9497e6b3 X-MS-Exchange-CrossTenant-originalarrivaltime: 04 Aug 2023 03:07:13.3958 (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: FmlQtqEAEQmYeLYYpVkJkoadk8dSKCKOBeYcHAZm2AybDBfLyOKiO5m+ZJRdp1vwwmbqvg+0HzPAUxMeGYquAA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR11MB4828 X-OriginatorOrg: intel.com Subject: Re: [FFmpeg-devel] [PATCH v4 1/9] libavutil: add hwcontext_d3d12va and AV_PIX_FMT_D3D12 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: "Wu, Tong1" , "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: T24gV28sIDIwMjMtMDctMTkgYXQgMTg6MDEgKzA4MDAsIFRvbmcgV3Ugd3JvdGU6Cj4gRnJvbTog V3UgSmlhbmh1YSA8dG9xc3h3QG91dGxvb2suY29tPgo+IAo+IFNpZ25lZC1vZmYtYnk6IFd1IEpp YW5odWEgPHRvcXN4d0BvdXRsb29rLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBUb25nIFd1IDx0b25n MS53dUBpbnRlbC5jb20+Cj4gLS0tCj4gwqBjb25maWd1cmXCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDUgKwo+IMKgZG9jL0FQ SWNoYW5nZXPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg fMKgwqAgNyArCj4gwqBsaWJhdnV0aWwvTWFrZWZpbGXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHzCoMKgIDMgKwo+IMKgbGliYXZ1dGlsL2h3Y29udGV4dC5jwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCA0ICsKPiDCoGxpYmF2dXRpbC9od2Nv bnRleHQuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMSArCj4gwqBs aWJhdnV0aWwvaHdjb250ZXh0X2QzZDEydmEuY8KgwqDCoMKgwqDCoMKgwqDCoCB8IDcwMiArKysr KysrKysrKysrKysrKysrKysrKysrCj4gwqBsaWJhdnV0aWwvaHdjb250ZXh0X2QzZDEydmEuaMKg wqDCoMKgwqDCoMKgwqDCoCB8IDE2NyArKysrKysKPiDCoGxpYmF2dXRpbC9od2NvbnRleHRfZDNk MTJ2YV9pbnRlcm5hbC5oIHzCoCA1NCArKwo+IMKgbGliYXZ1dGlsL2h3Y29udGV4dF9pbnRlcm5h bC5owqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAxICsKPiDCoGxpYmF2dXRpbC9waXhkZXNjLmPCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCA0ICsKPiDCoGxpYmF2dXRp bC9waXhmbXQuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAg OSArCj4gwqBsaWJhdnV0aWwvdGVzdHMvaHdkZXZpY2UuY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB8wqDCoCAyICsKPiDCoDEyIGZpbGVzIGNoYW5nZWQsIDk1OSBpbnNlcnRpb25zKCspCj4gwqBj cmVhdGUgbW9kZSAxMDA2NDQgbGliYXZ1dGlsL2h3Y29udGV4dF9kM2QxMnZhLmMKPiDCoGNyZWF0 ZSBtb2RlIDEwMDY0NCBsaWJhdnV0aWwvaHdjb250ZXh0X2QzZDEydmEuaAo+IMKgY3JlYXRlIG1v ZGUgMTAwNjQ0IGxpYmF2dXRpbC9od2NvbnRleHRfZDNkMTJ2YV9pbnRlcm5hbC5oCj4gCj4gZGlm ZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQo+IGluZGV4IGIwMThhYmYxMzkuLjVjYmRh ODNkNGQgMTAwNzU1Cj4gLS0tIGEvY29uZmlndXJlCj4gKysrIGIvY29uZmlndXJlCj4gQEAgLTMz OCw2ICszMzgsNyBAQCBFeHRlcm5hbCBsaWJyYXJ5IHN1cHBvcnQ6Cj4gwqDCoCAtLWRpc2FibGUt Y3VkYS1sbHZtwqDCoMKgwqDCoCBkaXNhYmxlIENVREEgY29tcGlsYXRpb24gdXNpbmcgY2xhbmcg W2F1dG9kZXRlY3RdCj4gwqDCoCAtLWRpc2FibGUtY3V2aWTCoMKgwqDCoMKgwqDCoMKgwqAgZGlz YWJsZSBOdmlkaWEgQ1VWSUQgc3VwcG9ydCBbYXV0b2RldGVjdF0KPiDCoMKgIC0tZGlzYWJsZS1k M2QxMXZhwqDCoMKgwqDCoMKgwqAgZGlzYWJsZSBNaWNyb3NvZnQgRGlyZWN0M0QgMTEgdmlkZW8g YWNjZWxlcmF0aW9uCj4gY29kZSBbYXV0b2RldGVjdF0KPiArwqAgLS1kaXNhYmxlLWQzZDEydmHC oMKgwqDCoMKgwqDCoCBkaXNhYmxlIE1pY3Jvc29mdCBEaXJlY3QzRCAxMiB2aWRlbyBhY2NlbGVy YXRpb24KPiBjb2RlIFthdXRvZGV0ZWN0XQo+IMKgwqAgLS1kaXNhYmxlLWR4dmEywqDCoMKgwqDC oMKgwqDCoMKgIGRpc2FibGUgTWljcm9zb2Z0IERpcmVjdFggOSB2aWRlbyBhY2NlbGVyYXRpb24K PiBjb2RlIFthdXRvZGV0ZWN0XQo+IMKgwqAgLS1kaXNhYmxlLWZmbnZjb2RlY8KgwqDCoMKgwqAg ZGlzYWJsZSBkeW5hbWljYWxseSBsaW5rZWQgTnZpZGlhIGNvZGUKPiBbYXV0b2RldGVjdF0KPiDC oMKgIC0tZW5hYmxlLWxpYmRybcKgwqDCoMKgwqDCoMKgwqDCoCBlbmFibGUgRFJNIGNvZGUgKExp bnV4KSBbbm9dCj4gQEAgLTE5MjYsNiArMTkyNyw3IEBAIEhXQUNDRUxfQVVUT0RFVEVDVF9MSUJS QVJZX0xJU1Q9Igo+IMKgwqDCoMKgIGN1ZGFfbGx2bQo+IMKgwqDCoMKgIGN1dmlkCj4gwqDCoMKg wqAgZDNkMTF2YQo+ICvCoMKgwqAgZDNkMTJ2YQo+IMKgwqDCoMKgIGR4dmEyCj4gwqDCoMKgwqAg ZmZudmNvZGVjCj4gwqDCoMKgwqAgbnZkZWMKPiBAQCAtMzA1NCw2ICszMDU2LDcgQEAgY3J5c3Rh bGhkX2RlcHM9ImxpYmNyeXN0YWxoZF9saWJjcnlzdGFsaGRfaWZfaCIKPiDCoGN1ZGFfZGVwcz0i ZmZudmNvZGVjIgo+IMKgY3V2aWRfZGVwcz0iZmZudmNvZGVjIgo+IMKgZDNkMTF2YV9kZXBzPSJk eHZhX2ggSUQzRDExVmlkZW9EZWNvZGVyIElEM0QxMVZpZGVvQ29udGV4dCIKPiArZDNkMTJ2YV9k ZXBzPSJkeHZhX2ggSUQzRDEyRGV2aWNlIElEM0QxMlZpZGVvRGVjb2RlciIKPiDCoGR4dmEyX2Rl cHM9ImR4dmEyYXBpX2ggRFhWQTJfQ29uZmlnUGljdHVyZURlY29kZSBvbGUzMiB1c2VyMzIiCj4g wqBmZm52Y29kZWNfZGVwc19hbnk9ImxpYmRsIExvYWRMaWJyYXJ5Igo+IMKgbWVkaWFjb2RlY19k ZXBzPSJhbmRyb2lkIgo+IEBAIC02NTQxLDYgKzY1NDQsOCBAQCBjaGVja190eXBlICJ3aW5kb3dz LmggZHhnaTFfMi5oIiAiSURYR0lPdXRwdXQxIgo+IMKgY2hlY2tfdHlwZSAid2luZG93cy5oIGR4 Z2kxXzUuaCIgIklEWEdJT3V0cHV0NSIKPiDCoGNoZWNrX3R5cGUgIndpbmRvd3MuaCBkM2QxMS5o IiAiSUQzRDExVmlkZW9EZWNvZGVyIgo+IMKgY2hlY2tfdHlwZSAid2luZG93cy5oIGQzZDExLmgi ICJJRDNEMTFWaWRlb0NvbnRleHQiCj4gK2NoZWNrX3R5cGUgIndpbmRvd3MuaCBkM2QxMi5oIiAi SUQzRDEyRGV2aWNlIgo+ICtjaGVja190eXBlICJ3aW5kb3dzLmggZDNkMTJ2aWRlby5oIiAiSUQz RDEyVmlkZW9EZWNvZGVyIgo+IMKgY2hlY2tfdHlwZSAid2luZG93cy5oIiAiRFBJX0FXQVJFTkVT U19DT05URVhUIiAtRF9XSU4zMl9XSU5OVD0weDBBMDAKPiDCoGNoZWNrX3R5cGUgImQzZDkuaCBk eHZhMmFwaS5oIiBEWFZBMl9Db25maWdQaWN0dXJlRGVjb2RlIC0KPiBEX1dJTjMyX1dJTk5UPTB4 MDYwMgo+IMKgY2hlY2tfZnVuY19oZWFkZXJzIG1mYXBpLmggTUZDcmVhdGVBbGlnbmVkTWVtb3J5 QnVmZmVyIC1sbWZwbGF0Cj4gZGlmZiAtLWdpdCBhL2RvYy9BUEljaGFuZ2VzIGIvZG9jL0FQSWNo YW5nZXMKPiBpbmRleCA1YWZlOGJjYjc1Li5jMTRhYjBiMzk0IDEwMDY0NAo+IC0tLSBhL2RvYy9B UEljaGFuZ2VzCj4gKysrIGIvZG9jL0FQSWNoYW5nZXMKPiBAQCAtMiw2ICsyLDEzIEBAIFRoZSBs YXN0IHZlcnNpb24gaW5jcmVhc2VzIG9mIGFsbCBsaWJyYXJpZXMgd2VyZSBvbiAyMDIzLTAyLQo+ IDA5Cj4gwqAKPiDCoEFQSSBjaGFuZ2VzLCBtb3N0IHJlY2VudCBmaXJzdDoKPiDCoAo+ICsyMDIz LTA3LXh4IC0geHh4eHh4eHh4eCAtIGxhdnUgNTguMTUuMTAwIC0gcGl4Zm10LmggaHdjb250ZXh0 LmgKPiBod2NvbnRleHRfZDNkMTJ2YS5oCgpTZWVtcyB5b3UgZm9yZ290IHRvIGJ1bXAgYSBuZXcg dmVyc2lvbiBpbiBsaWJhdnV0aWwvdmVyc2lvbi5oCgpUaGFua3MKSGFpaGFvCgo+ICvCoCBBZGQg QVZfSFdERVZJQ0VfVFlQRV9EM0QxMlZBIGFuZCBBVl9QSVhfRk1UX0QzRDEyLgo+ICvCoCBBZGQg QVZEM0QxMlZBRGV2aWNlQ29udGV4dCwgQVZEM0QxMlZBU3luY0NvbnRleHQsIEFWRDNEMTJGcmFt ZURlc2NyaXB0b3IsCj4gK8KgIGFuZCBBVkQzRDEyVkFGcmFtZXNDb250ZXh0Lgo+ICvCoCBBZGQg YXZfZDNkMTJ2YV9tYXBfc3dfdG9faHdfZm9ybWF0LCBhdl9kM2QxMnZhX2NyZWF0ZV9zeW5jX2Nv bnRleHQsCj4gK8KgIGF2X2QzZDEydmFfcmVsZWFzZV9zeW5jX2NvbnRleHQsIGF2X2QzZDEydmFf d2FpdF9pZGxlLCBhbmQKPiBhdl9kM2QxMnZhX3dhaXRfcXVldWVfaWRsZS4KPiArCj4gwqAyMDIz LTA3LXh4IC0geHh4eHh4eHh4eCAtIGxhdmMgNjAgLSBhdmNvZGVjLmgKPiDCoMKgIERlcHJlY2F0 ZSBBVl9DT0RFQ19GTEFHX0RST1BDSEFOR0VEIHdpdGhvdXQgcmVwbGFjZW1lbnQuCj4gwqAKPiBk aWZmIC0tZ2l0IGEvbGliYXZ1dGlsL01ha2VmaWxlIGIvbGliYXZ1dGlsL01ha2VmaWxlCj4gaW5k ZXggYmQ5YzZmOWUzMi4uNDBkNDlkNzZkZCAxMDA2NDQKPiAtLS0gYS9saWJhdnV0aWwvTWFrZWZp bGUKPiArKysgYi9saWJhdnV0aWwvTWFrZWZpbGUKPiBAQCAtNDEsNiArNDEsNyBAQCBIRUFERVJT ID0KPiBhZGxlcjMyLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBcCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAgaHdjb250ZXh0LmjCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoCBod2Nv bnRleHRfY3VkYS5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFwKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoCBod2NvbnRleHRfZDNkMTF2YS5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIFwKPiArwqDCoMKgwqDCoMKgwqDCoMKgIGh3Y29udGV4dF9kM2QxMnZhLmjCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgXAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgIGh3Y29udGV4dF9kcm0u aMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFwKPiDCoMKgwqDCoMKgwqDCoMKg wqDCoCBod2NvbnRleHRfZHh2YTIuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgIGh3Y29udGV4dF9xc3YuaMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIFwKPiBAQCAtMTg2LDYgKzE4Nyw3IEBAIE9CSlMgPQo+IGFkbGVyMzIu b8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFwK PiDCoAo+IMKgT0JKUy0kKENPTkZJR19DVURBKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgKz0gaHdjb250ZXh0X2N1ZGEubwo+IMKgT0JKUy0kKENPTkZJR19EM0QxMVZB KcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKz0gaHdjb250ZXh0X2QzZDExdmEu bwo+ICtPQkpTLSQoQ09ORklHX0QzRDEyVkEpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCArPSBod2NvbnRleHRfZDNkMTJ2YS5vCj4gwqBPQkpTLSQoQ09ORklHX0RYVkEyKcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICs9IGh3Y29udGV4dF9keHZhMi5vCj4g wqBPQkpTLSQoQ09ORklHX0xJQkRSTSnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgKz0gaHdjb250ZXh0X2RybS5vCj4gwqBPQkpTLSQoQ09ORklHX01BQ09TX0tQRVJGKcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgICs9IG1hY29zX2twZXJmLm8KPiBAQCAtMjA5LDYgKzIxMSw3 IEBAIFNLSVBIRUFERVJTLSQoSEFWRV9DVURBX0gpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICs9 IGh3Y29udGV4dF9jdWRhLmgKPiDCoFNLSVBIRUFERVJTLSQoQ09ORklHX0NVREEpwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgICs9IGh3Y29udGV4dF9jdWRhX2ludGVybmFsLmjCoMKgwqDCoCBcCj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGN1ZGFfY2hlY2suaAo+IMKgU0tJUEhFQURFUlMt JChDT05GSUdfRDNEMTFWQSnCoMKgwqDCoMKgwqDCoMKgwqAgKz0gaHdjb250ZXh0X2QzZDExdmEu aAo+ICtTS0lQSEVBREVSUy0kKENPTkZJR19EM0QxMlZBKcKgwqDCoMKgwqDCoMKgwqDCoCArPSBo d2NvbnRleHRfZDNkMTJ2YS5oCj4gwqBTS0lQSEVBREVSUy0kKENPTkZJR19EWFZBMinCoMKgwqDC oMKgwqDCoMKgwqDCoMKgICs9IGh3Y29udGV4dF9keHZhMi5oCj4gwqBTS0lQSEVBREVSUy0kKENP TkZJR19RU1YpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKz0gaHdjb250ZXh0X3Fzdi5oCj4g wqBTS0lQSEVBREVSUy0kKENPTkZJR19PUEVOQ0wpwqDCoMKgwqDCoMKgwqDCoMKgwqAgKz0gaHdj b250ZXh0X29wZW5jbC5oCj4gZGlmZiAtLWdpdCBhL2xpYmF2dXRpbC9od2NvbnRleHQuYyBiL2xp YmF2dXRpbC9od2NvbnRleHQuYwo+IGluZGV4IDMzOTY1OTgyNjkuLjA0MDcwYmMzYzMgMTAwNjQ0 Cj4gLS0tIGEvbGliYXZ1dGlsL2h3Y29udGV4dC5jCj4gKysrIGIvbGliYXZ1dGlsL2h3Y29udGV4 dC5jCj4gQEAgLTM2LDYgKzM2LDkgQEAgc3RhdGljIGNvbnN0IEhXQ29udGV4dFR5cGUgKiBjb25z dCBod190YWJsZVtdID0gewo+IMKgI2lmIENPTkZJR19EM0QxMVZBCj4gwqDCoMKgwqAgJmZmX2h3 Y29udGV4dF90eXBlX2QzZDExdmEsCj4gwqAjZW5kaWYKPiArI2lmIENPTkZJR19EM0QxMlZBCj4g K8KgwqDCoCAmZmZfaHdjb250ZXh0X3R5cGVfZDNkMTJ2YSwKPiArI2VuZGlmCj4gwqAjaWYgQ09O RklHX0xJQkRSTQo+IMKgwqDCoMKgICZmZl9od2NvbnRleHRfdHlwZV9kcm0sCj4gwqAjZW5kaWYK PiBAQCAtNzEsNiArNzQsNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgaHdfdHlwZV9uYW1l c1tdID0gewo+IMKgwqDCoMKgIFtBVl9IV0RFVklDRV9UWVBFX0RSTV3CoMKgwqAgPSAiZHJtIiwK PiDCoMKgwqDCoCBbQVZfSFdERVZJQ0VfVFlQRV9EWFZBMl3CoCA9ICJkeHZhMiIsCj4gwqDCoMKg wqAgW0FWX0hXREVWSUNFX1RZUEVfRDNEMTFWQV0gPSAiZDNkMTF2YSIsCj4gK8KgwqDCoCBbQVZf SFdERVZJQ0VfVFlQRV9EM0QxMlZBXSA9ICJkM2QxMnZhIiwKPiDCoMKgwqDCoCBbQVZfSFdERVZJ Q0VfVFlQRV9PUEVOQ0xdID0gIm9wZW5jbCIsCj4gwqDCoMKgwqAgW0FWX0hXREVWSUNFX1RZUEVf UVNWXcKgwqDCoCA9ICJxc3YiLAo+IMKgwqDCoMKgIFtBVl9IV0RFVklDRV9UWVBFX1ZBQVBJXcKg ID0gInZhYXBpIiwKPiBkaWZmIC0tZ2l0IGEvbGliYXZ1dGlsL2h3Y29udGV4dC5oIGIvbGliYXZ1 dGlsL2h3Y29udGV4dC5oCj4gaW5kZXggN2ZmMDhjODYwOC4uMmIzMzcyMWE5NyAxMDA2NDQKPiAt LS0gYS9saWJhdnV0aWwvaHdjb250ZXh0LmgKPiArKysgYi9saWJhdnV0aWwvaHdjb250ZXh0LmgK PiBAQCAtMzcsNiArMzcsNyBAQCBlbnVtIEFWSFdEZXZpY2VUeXBlIHsKPiDCoMKgwqDCoCBBVl9I V0RFVklDRV9UWVBFX09QRU5DTCwKPiDCoMKgwqDCoCBBVl9IV0RFVklDRV9UWVBFX01FRElBQ09E RUMsCj4gwqDCoMKgwqAgQVZfSFdERVZJQ0VfVFlQRV9WVUxLQU4sCj4gK8KgwqDCoCBBVl9IV0RF VklDRV9UWVBFX0QzRDEyVkEsCj4gwqB9Owo+IMKgCj4gwqB0eXBlZGVmIHN0cnVjdCBBVkhXRGV2 aWNlSW50ZXJuYWwgQVZIV0RldmljZUludGVybmFsOwo+IGRpZmYgLS1naXQgYS9saWJhdnV0aWwv aHdjb250ZXh0X2QzZDEydmEuYyBiL2xpYmF2dXRpbC9od2NvbnRleHRfZDNkMTJ2YS5jCj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwLi40OGMzMzlmMjRhCj4gLS0tIC9k ZXYvbnVsbAo+ICsrKyBiL2xpYmF2dXRpbC9od2NvbnRleHRfZDNkMTJ2YS5jCj4gQEAgLTAsMCAr MSw3MDIgQEAKPiArLyoKPiArICogRGlyZWN0M0QgMTIgSFcgYWNjZWxlcmF0aW9uLgo+ICsgKgo+ ICsgKiBjb3B5cmlnaHQgKGMpIDIwMjItMjAyMyBXdSBKaWFuaHVhIDx0b3FzeHdAb3V0bG9vay5j b20+Cj4gKyAqCj4gKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KPiArICoKPiArICog RkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+ ICsgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg UHVibGljCj4gKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlcgo+ICsgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPiArICoKPiArICogRkZtcGVnIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m Cj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS7CoCBTZWUgdGhlIEdOVQo+ICsgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4gKyAqIExpY2Vuc2UgYWxvbmcgd2l0 aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKPiArICogRm91bmRh dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAw MjExMC0xMzAxCj4gVVNBCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgImNvbmZpZy5oIgo+ICsjaW5j bHVkZSAiY29tbW9uLmgiCj4gKyNpbmNsdWRlICJod2NvbnRleHQuaCIKPiArI2luY2x1ZGUgImh3 Y29udGV4dF9pbnRlcm5hbC5oIgo+ICsjaW5jbHVkZSAiaHdjb250ZXh0X2QzZDEydmFfaW50ZXJu YWwuaCIKPiArI2luY2x1ZGUgImh3Y29udGV4dF9kM2QxMnZhLmgiCj4gKyNpbmNsdWRlICJpbWd1 dGlscy5oIgo+ICsjaW5jbHVkZSAicGl4ZGVzYy5oIgo+ICsjaW5jbHVkZSAicGl4Zm10LmgiCj4g KyNpbmNsdWRlICJ0aHJlYWQuaCIKPiArI2luY2x1ZGUgImNvbXBhdC93MzJkbGZjbi5oIgo+ICsj aW5jbHVkZSA8ZHhnaTFfMy5oPgo+ICsKPiArdHlwZWRlZiBIUkVTVUxUKFdJTkFQSSAqUEZOX0NS RUFURV9EWEdJX0ZBQ1RPUlkyKShVSU5UIEZsYWdzLCBSRUZJSUQgcmlpZCwKPiB2b2lkICoqcHBG YWN0b3J5KTsKPiArCj4gK3N0YXRpYyBBVk9uY2UgZnVuY3Rpb25zX2xvYWRlZCA9IEFWX09OQ0Vf SU5JVDsKPiArCj4gK3N0YXRpYyBQRk5fQ1JFQVRFX0RYR0lfRkFDVE9SWTIgZDNkMTJ2YV9jcmVh dGVfZHhnaV9mYWN0b3J5MjsKPiArc3RhdGljIFBGTl9EM0QxMl9DUkVBVEVfREVWSUNFIGQzZDEy dmFfY3JlYXRlX2RldmljZTsKPiArc3RhdGljIFBGTl9EM0QxMl9HRVRfREVCVUdfSU5URVJGQUNF IGQzZDEydmFfZ2V0X2RlYnVnX2ludGVyZmFjZTsKPiArCj4gK3N0YXRpYyBhdl9jb2xkIHZvaWQg bG9hZF9mdW5jdGlvbnModm9pZCkKPiArewo+ICsjaWYgIUhBVkVfVVdQCj4gK8KgwqDCoCAvLyBX ZSBsZXQgdGhlc2UgImxlYWsiIC0gdGhpcyBpcyBmaW5lLCBhcyB1bmxvYWRpbmcgaGFzIG5vIGdy ZWF0IGJlbmVmaXQsCj4gYW5kCj4gK8KgwqDCoCAvLyBXaW5kb3dzIHdpbGwgbWFyayBhIERMTCBh cyBsb2FkZWQgZm9yZXZlciBpZiBpdHMgaW50ZXJuYWwgcmVmY291bnQKPiBvdmVyZmxvd3MKPiAr wqDCoMKgIC8vIGZyb20gdG9vIG1hbnkgTG9hZExpYnJhcnkgY2FsbHMuCj4gK8KgwqDCoCBIQU5E TEUgZDNkbGliLCBkeGdpbGliOwo+ICsKPiArwqDCoMKgIGQzZGxpYsKgID0gZGxvcGVuKCJkM2Qx Mi5kbGwiLCAwKTsKPiArwqDCoMKgIGR4Z2lsaWIgPSBkbG9wZW4oImR4Z2kuZGxsIiwgMCk7Cj4g K8KgwqDCoCBpZiAoIWQzZGxpYiB8fCAhZHhnaWxpYikKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJu Owo+ICsKPiArwqDCoMKgIGQzZDEydmFfY3JlYXRlX2RldmljZSA9IChQRk5fRDNEMTJfQ1JFQVRF X0RFVklDRSlHZXRQcm9jQWRkcmVzcyhkM2RsaWIsCj4gIkQzRDEyQ3JlYXRlRGV2aWNlIik7Cj4g K8KgwqDCoCBkM2QxMnZhX2NyZWF0ZV9keGdpX2ZhY3RvcnkyID0KPiAoUEZOX0NSRUFURV9EWEdJ X0ZBQ1RPUlkyKUdldFByb2NBZGRyZXNzKGR4Z2lsaWIsICJDcmVhdGVEWEdJRmFjdG9yeTIiKTsK PiArwqDCoMKgIGQzZDEydmFfZ2V0X2RlYnVnX2ludGVyZmFjZSA9Cj4gKFBGTl9EM0QxMl9HRVRf REVCVUdfSU5URVJGQUNFKUdldFByb2NBZGRyZXNzKGQzZGxpYiwKPiAiRDNEMTJHZXREZWJ1Z0lu dGVyZmFjZSIpOwo+ICsjZWxzZQo+ICvCoMKgwqAgZDNkMTJ2YV9jcmVhdGVfZGV2aWNlID0gKFBG Tl9EM0QxMV9DUkVBVEVfREVWSUNFKSBEM0QxMUNyZWF0ZURldmljZTsKPiArwqDCoMKgIGQzZDEy dmFfY3JlYXRlX2R4Z2lfZmFjdG9yeTIgPSAoUEZOX0NSRUFURV9EWEdJX0ZBQ1RPUlkyKQo+IENy ZWF0ZURYR0lGYWN0b3J5MjsKPiArwqDCoMKgIGQzZDEydmFfZ2V0X2RlYnVnX2ludGVyZmFjZSA9 IChQRk5fRDNEMTJfR0VUX0RFQlVHX0lOVEVSRkFDRSkKPiBEM0QxMkdldERlYnVnSW50ZXJmYWNl Owo+ICsjZW5kaWYKPiArfQo+ICsKPiArdHlwZWRlZiBzdHJ1Y3QgRDNEMTJWQUZyYW1lc0NvbnRl eHQgewo+ICvCoMKgwqAgSUQzRDEyUmVzb3VyY2XCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICpzdGFn aW5nX2J1ZmZlcjsKPiArwqDCoMKgIElEM0QxMkNvbW1hbmRRdWV1ZcKgwqDCoMKgwqDCoMKgICpj b21tYW5kX3F1ZXVlOwo+ICvCoMKgwqAgSUQzRDEyQ29tbWFuZEFsbG9jYXRvcsKgwqDCoCAqY29t bWFuZF9hbGxvY2F0b3I7Cj4gK8KgwqDCoCBJRDNEMTJHcmFwaGljc0NvbW1hbmRMaXN0ICpjb21t YW5kX2xpc3Q7Cj4gK8KgwqDCoCBBVkQzRDEyVkFTeW5jQ29udGV4dMKgwqDCoMKgwqAgKnN5bmNf Y3R4Owo+ICvCoMKgwqAgaW50wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBuYl9zdXJmYWNlczsKPiArwqDCoMKgIGludMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbmJfc3VyZmFjZXNfdXNlZDsKPiArwqDCoMKgIERYR0lf Rk9STUFUwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZvcm1hdDsKPiArwqDCoMKgIFVJ TlTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsdW1hX2NvbXBv bmVudF9zaXplOwo+ICt9IEQzRDEyVkFGcmFtZXNDb250ZXh0Owo+ICsKPiArc3RhdGljIGNvbnN0 IHN0cnVjdCB7Cj4gK8KgwqDCoCBEWEdJX0ZPUk1BVCBkM2RfZm9ybWF0Owo+ICvCoMKgwqAgZW51 bSBBVlBpeGVsRm9ybWF0IHBpeF9mbXQ7Cj4gK30gc3VwcG9ydGVkX2Zvcm1hdHNbXSA9IHsKPiAr wqDCoMKgIHsgRFhHSV9GT1JNQVRfTlYxMiwgQVZfUElYX0ZNVF9OVjEyIH0sCj4gK8KgwqDCoCB7 IERYR0lfRk9STUFUX1AwMTAsIEFWX1BJWF9GTVRfUDAxMCB9LAo+ICt9Owo+ICsKPiArRFhHSV9G T1JNQVQgYXZfZDNkMTJ2YV9tYXBfc3dfdG9faHdfZm9ybWF0KGVudW0gQVZQaXhlbEZvcm1hdCBw aXhfZm10KQo+ICt7Cj4gK8KgwqDCoCBzd2l0Y2ggKHBpeF9mbXQpIHsKPiArwqDCoMKgIGNhc2Ug QVZfUElYX0ZNVF9OVjEyOnJldHVybiBEWEdJX0ZPUk1BVF9OVjEyOwo+ICvCoMKgwqAgY2FzZSBB Vl9QSVhfRk1UX1AwMTA6cmV0dXJuIERYR0lfRk9STUFUX1AwMTA7Cj4gK8KgwqDCoCBkZWZhdWx0 OsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gRFhHSV9GT1JNQVRfVU5LTk9XTjsKPiAr wqDCoMKgIH0KPiArfQo+ICsKPiAraW50IGF2X2QzZDEydmFfc3luY19jb250ZXh0X2FsbG9jKEFW RDNEMTJWQURldmljZUNvbnRleHQgKmN0eCwKPiBBVkQzRDEyVkFTeW5jQ29udGV4dCAqKnBzeW5j X2N0eCkKPiArewo+ICvCoMKgwqAgQVZEM0QxMlZBU3luY0NvbnRleHQgKnN5bmNfY3R4Owo+ICsK PiArwqDCoMKgIHN5bmNfY3R4ID0gYXZfbWFsbG9jeihzaXplb2YoQVZEM0QxMlZBU3luY0NvbnRl eHQpKTsKPiArwqDCoMKgIGlmICghc3luY19jdHgpCj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBB VkVSUk9SKEVOT01FTSk7Cj4gKwo+ICvCoMKgwqAgRFhfQ0hFQ0soSUQzRDEyRGV2aWNlX0NyZWF0 ZUZlbmNlKGN0eC0+ZGV2aWNlLCBzeW5jX2N0eC0+ZmVuY2VfdmFsdWUsCj4gRDNEMTJfRkVOQ0Vf RkxBR19OT05FLCAmSUlEX0lEM0QxMkZlbmNlLCAmc3luY19jdHgtPmZlbmNlKSk7Cj4gKwo+ICvC oMKgwqAgc3luY19jdHgtPmV2ZW50ID0gQ3JlYXRlRXZlbnQoTlVMTCwgRkFMU0UsIEZBTFNFLCBO VUxMKTsKPiArwqDCoMKgIGlmICghc3luY19jdHgtPmV2ZW50KQo+ICvCoMKgwqDCoMKgwqDCoCBn b3RvIGZhaWw7Cj4gKwo+ICvCoMKgwqAgKnBzeW5jX2N0eCA9IHN5bmNfY3R4Owo+ICsKPiArwqDC oMKgIHJldHVybiAwOwo+ICsKPiArZmFpbDoKPiArwqDCoMKgIEQzRDEyX09CSkVDVF9SRUxFQVNF KHN5bmNfY3R4LT5mZW5jZSk7Cj4gK8KgwqDCoCBhdl9mcmVlcCgmc3luY19jdHgpOwo+ICvCoMKg wqAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiArfQo+ICsKPiArdm9pZCBhdl9kM2QxMnZhX3N5 bmNfY29udGV4dF9mcmVlKEFWRDNEMTJWQVN5bmNDb250ZXh0ICoqcHN5bmNfY3R4KQo+ICt7Cj4g K8KgwqDCoCBBVkQzRDEyVkFTeW5jQ29udGV4dCAqc3luY19jdHggPSAqcHN5bmNfY3R4Owo+ICvC oMKgwqAgaWYgKCFwc3luY19jdHggfHwgIXN5bmNfY3R4KQo+ICvCoMKgwqDCoMKgwqDCoCByZXR1 cm47Cj4gKwo+ICvCoMKgwqAgYXZfZDNkMTJ2YV93YWl0X2lkbGUoc3luY19jdHgpOwo+ICsKPiAr wqDCoMKgIEQzRDEyX09CSkVDVF9SRUxFQVNFKHN5bmNfY3R4LT5mZW5jZSk7Cj4gKwo+ICvCoMKg wqAgaWYgKHN5bmNfY3R4LT5ldmVudCkKPiArwqDCoMKgwqDCoMKgwqAgQ2xvc2VIYW5kbGUoc3lu Y19jdHgtPmV2ZW50KTsKPiArCj4gK8KgwqDCoCBhdl9mcmVlcChwc3luY19jdHgpOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IGF2X2QzZDEydmFfd2FpdF9mb3JfZmVuY2VfdmFsdWUoQVZEM0QxMlZB U3luY0NvbnRleHQgKnN5bmNfY3R4LAo+IHVpbnQ2NF90IGZlbmNlX3ZhbHVlKQo+ICt7Cj4gK8Kg wqDCoCB1aW50NjRfdCBjb21wbGV0aW9uID0gSUQzRDEyRmVuY2VfR2V0Q29tcGxldGVkVmFsdWUo c3luY19jdHgtPmZlbmNlKTsKPiArwqDCoMKgIGlmIChjb21wbGV0aW9uIDwgZmVuY2VfdmFsdWUp IHsKPiArwqDCoMKgwqDCoMKgwqAgaWYgKEZBSUxFRChJRDNEMTJGZW5jZV9TZXRFdmVudE9uQ29t cGxldGlvbihzeW5jX2N0eC0+ZmVuY2UsCj4gZmVuY2VfdmFsdWUsIHN5bmNfY3R4LT5ldmVudCkp KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4gKwo+ ICvCoMKgwqDCoMKgwqDCoCBXYWl0Rm9yU2luZ2xlT2JqZWN0RXgoc3luY19jdHgtPmV2ZW50LCBJ TkZJTklURSwgRkFMU0UpOwo+ICvCoMKgwqAgfQo+ICsKPiArwqDCoMKgIHJldHVybiAwOwo+ICt9 Cj4gKwo+ICtpbnQgYXZfZDNkMTJ2YV93YWl0X2lkbGUoQVZEM0QxMlZBU3luY0NvbnRleHQgKmN0 eCkKPiArewo+ICvCoMKgwqAgcmV0dXJuIGF2X2QzZDEydmFfd2FpdF9mb3JfZmVuY2VfdmFsdWUo Y3R4LCBjdHgtPmZlbmNlX3ZhbHVlKTsKPiArfQo+ICsKPiAraW50IGF2X2QzZDEydmFfd2FpdF9x dWV1ZV9pZGxlKEFWRDNEMTJWQVN5bmNDb250ZXh0ICpzeW5jX2N0eCwKPiBJRDNEMTJDb21tYW5k UXVldWUgKmNvbW1hbmRfcXVldWUpCj4gK3sKPiArwqDCoMKgIERYX0NIRUNLKElEM0QxMkNvbW1h bmRRdWV1ZV9TaWduYWwoY29tbWFuZF9xdWV1ZSwgc3luY19jdHgtPmZlbmNlLAo+ICsrc3luY19j dHgtPmZlbmNlX3ZhbHVlKSk7Cj4gK8KgwqDCoCByZXR1cm4gYXZfZDNkMTJ2YV93YWl0X2lkbGUo c3luY19jdHgpOwo+ICsKPiArZmFpbDoKPiArwqDCoMKgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgaW50IGNyZWF0ZV9yZXNvdXJjZShJRDNEMTJEZXZp Y2UgKmRldmljZSwgY29uc3QKPiBEM0QxMl9SRVNPVVJDRV9ERVNDICpkZXNjLCBEM0QxMl9SRVNP VVJDRV9TVEFURVMgc3RhdGVzLCBJRDNEMTJSZXNvdXJjZQo+ICoqcHBSZXNvdXJjZSwgaW50IGlz X3JlYWRfYmFjaykKPiArewo+ICvCoMKgwqAgRDNEMTJfSEVBUF9QUk9QRVJUSUVTIHByb3BzID0g ewo+ICvCoMKgwqDCoMKgwqDCoCAuVHlwZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ID0gaXNfcmVhZF9iYWNrID8gRDNEMTJfSEVBUF9UWVBFX1JFQURCQUNLIDoKPiBEM0QxMl9IRUFQ X1RZUEVfREVGQVVMVCwKPiArwqDCoMKgwqDCoMKgwqAgLkNQVVBhZ2VQcm9wZXJ0ecKgwqDCoMKg wqAgPSBEM0QxMl9DUFVfUEFHRV9QUk9QRVJUWV9VTktOT1dOLAo+ICvCoMKgwqDCoMKgwqDCoCAu TWVtb3J5UG9vbFByZWZlcmVuY2UgPSBEM0QxMl9NRU1PUllfUE9PTF9VTktOT1dOLAo+ICvCoMKg wqDCoMKgwqDCoCAuQ3JlYXRpb25Ob2RlTWFza8KgwqDCoMKgID0gMCwKPiArwqDCoMKgwqDCoMKg wqAgLlZpc2libGVOb2RlTWFza8KgwqDCoMKgwqAgPSAwLAo+ICvCoMKgwqAgfTsKPiArCj4gK8Kg wqDCoCBpZiAoRkFJTEVEKElEM0QxMkRldmljZV9DcmVhdGVDb21taXR0ZWRSZXNvdXJjZShkZXZp Y2UsICZwcm9wcywKPiBEM0QxMl9IRUFQX0ZMQUdfTk9ORSwgZGVzYywKPiArwqDCoMKgwqDCoMKg wqAgc3RhdGVzLCBOVUxMLCAmSUlEX0lEM0QxMlJlc291cmNlLCBwcFJlc291cmNlKSkpCj4gK8Kg wqDCoMKgwqDCoMKgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4gKwo+ICvCoMKgwqAgcmV0dXJu IDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZDNkMTJ2YV9jcmVhdGVfc3RhZ2luZ19idWZmZXJf cmVzb3VyY2UoQVZIV0ZyYW1lc0NvbnRleHQgKmN0eCkKPiArewo+ICvCoMKgwqAgQVZEM0QxMlZB RGV2aWNlQ29udGV4dCAqZGV2aWNlX2h3Y3R4ID0gY3R4LT5kZXZpY2VfY3R4LT5od2N0eDsKPiAr wqDCoMKgIEQzRDEyVkFGcmFtZXNDb250ZXh0wqDCoCAqc8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg PSBjdHgtPmludGVybmFsLT5wcml2Owo+ICsKPiArwqDCoMKgIEQzRDEyX1JFU09VUkNFX0RFU0Mg ZGVzYyA9IHsKPiArwqDCoMKgwqDCoMKgwqAgLkRpbWVuc2lvbsKgwqDCoMKgwqDCoMKgwqDCoCA9 IEQzRDEyX1JFU09VUkNFX0RJTUVOU0lPTl9CVUZGRVIsCj4gK8KgwqDCoMKgwqDCoMKgIC5BbGln bm1lbnTCoMKgwqDCoMKgwqDCoMKgwqAgPSAwLAo+ICvCoMKgwqDCoMKgwqDCoCAuV2lkdGjCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IDAsCj4gK8KgwqDCoMKgwqDCoMKgIC5IZWlnaHTCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgPSAxLAo+ICvCoMKgwqDCoMKgwqDCoCAuRGVwdGhPckFycmF5 U2l6ZcKgwqAgPSAxLAo+ICvCoMKgwqDCoMKgwqDCoCAuTWlwTGV2ZWxzwqDCoMKgwqDCoMKgwqDC oMKgID0gMSwKPiArwqDCoMKgwqDCoMKgwqAgLkZvcm1hdMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCA9IERYR0lfRk9STUFUX1VOS05PV04sCj4gK8KgwqDCoMKgwqDCoMKgIC5TYW1wbGVEZXNjwqDC oMKgwqDCoMKgwqDCoCA9IHsgLkNvdW50ID0gMSwgLlF1YWxpdHkgPSAwIH0sCj4gK8KgwqDCoMKg wqDCoMKgIC5MYXlvdXTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBEM0QxMl9URVhUVVJFX0xB WU9VVF9ST1dfTUFKT1IsCj4gK8KgwqDCoMKgwqDCoMKgIC5GbGFnc8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgID0gRDNEMTJfUkVTT1VSQ0VfRkxBR19OT05FLAo+ICvCoMKgwqAgfTsKPiArCj4g K8KgwqDCoCBzLT5sdW1hX2NvbXBvbmVudF9zaXplID0gRkZBTElHTihjdHgtPndpZHRoICogKHMt PmZvcm1hdCA9PQo+IERYR0lfRk9STUFUX1AwMTAgPyAyIDogMSksIEQzRDEyX1RFWFRVUkVfREFU QV9QSVRDSF9BTElHTk1FTlQpICogY3R4LT5oZWlnaHQ7Cj4gK8KgwqDCoCBkZXNjLldpZHRoID0g cy0+bHVtYV9jb21wb25lbnRfc2l6ZSArIChzLT5sdW1hX2NvbXBvbmVudF9zaXplID4+IDEpOwo+ ICsKPiArwqDCoMKgIHJldHVybiBjcmVhdGVfcmVzb3VyY2UoZGV2aWNlX2h3Y3R4LT5kZXZpY2Us ICZkZXNjLAo+IEQzRDEyX1JFU09VUkNFX1NUQVRFX0NPUFlfREVTVCwgJnMtPnN0YWdpbmdfYnVm ZmVyLCAxKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBkM2QxMnZhX2NyZWF0ZV9oZWxwZXJfb2Jq ZWN0cyhBVkhXRnJhbWVzQ29udGV4dCAqY3R4KQo+ICt7Cj4gK8KgwqDCoCBBVkQzRDEyVkFEZXZp Y2VDb250ZXh0ICpkZXZpY2VfaHdjdHggPSBjdHgtPmRldmljZV9jdHgtPmh3Y3R4Owo+ICvCoMKg wqAgRDNEMTJWQUZyYW1lc0NvbnRleHTCoMKgICpzwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IGN0 eC0+aW50ZXJuYWwtPnByaXY7Cj4gKwo+ICvCoMKgwqAgRDNEMTJfQ09NTUFORF9RVUVVRV9ERVND IHF1ZXVlX2Rlc2MgPSB7Cj4gK8KgwqDCoMKgwqDCoMKgIC5UeXBlwqDCoMKgwqAgPSBEM0QxMl9D T01NQU5EX0xJU1RfVFlQRV9DT1BZLAo+ICvCoMKgwqDCoMKgwqDCoCAuUHJpb3JpdHkgPSAwLAo+ ICvCoMKgwqDCoMKgwqDCoCAuTm9kZU1hc2sgPSAwLAo+ICvCoMKgwqAgfTsKPiArCj4gK8KgwqDC oCBpbnQgcmV0ID0gZDNkMTJ2YV9jcmVhdGVfc3RhZ2luZ19idWZmZXJfcmVzb3VyY2UoY3R4KTsK PiArwqDCoMKgIGlmIChyZXQgPCAwKQo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+ICsK PiArwqDCoMKgIHJldCA9IGF2X2QzZDEydmFfc3luY19jb250ZXh0X2FsbG9jKGRldmljZV9od2N0 eCwgJnMtPnN5bmNfY3R4KTsKPiArwqDCoMKgIGlmIChyZXQgPCAwKQo+ICvCoMKgwqDCoMKgwqDC oCByZXR1cm4gcmV0Owo+ICsKPiArwqDCoMKgIERYX0NIRUNLKElEM0QxMkRldmljZV9DcmVhdGVD b21tYW5kUXVldWUoZGV2aWNlX2h3Y3R4LT5kZXZpY2UsCj4gJnF1ZXVlX2Rlc2MsCj4gK8KgwqDC oMKgwqDCoMKgICZJSURfSUQzRDEyQ29tbWFuZFF1ZXVlLCAmcy0+Y29tbWFuZF9xdWV1ZSkpOwo+ ICsKPiArwqDCoMKgIERYX0NIRUNLKElEM0QxMkRldmljZV9DcmVhdGVDb21tYW5kQWxsb2NhdG9y KGRldmljZV9od2N0eC0+ZGV2aWNlLAo+IHF1ZXVlX2Rlc2MuVHlwZSwKPiArwqDCoMKgwqDCoMKg wqAgJklJRF9JRDNEMTJDb21tYW5kQWxsb2NhdG9yLCAmcy0+Y29tbWFuZF9hbGxvY2F0b3IpKTsK PiArCj4gK8KgwqDCoCBEWF9DSEVDSyhJRDNEMTJEZXZpY2VfQ3JlYXRlQ29tbWFuZExpc3QoZGV2 aWNlX2h3Y3R4LT5kZXZpY2UsIDAsCj4gcXVldWVfZGVzYy5UeXBlLAo+ICvCoMKgwqDCoMKgwqDC oCBzLT5jb21tYW5kX2FsbG9jYXRvciwgTlVMTCwgJklJRF9JRDNEMTJHcmFwaGljc0NvbW1hbmRM aXN0LCAmcy0KPiA+Y29tbWFuZF9saXN0KSk7Cj4gKwo+ICvCoMKgwqAgRFhfQ0hFQ0soSUQzRDEy R3JhcGhpY3NDb21tYW5kTGlzdF9DbG9zZShzLT5jb21tYW5kX2xpc3QpKTsKPiArCj4gK8KgwqDC oCBJRDNEMTJDb21tYW5kUXVldWVfRXhlY3V0ZUNvbW1hbmRMaXN0cyhzLT5jb21tYW5kX3F1ZXVl LCAxLAo+IChJRDNEMTJDb21tYW5kTGlzdCAqKikmcy0+Y29tbWFuZF9saXN0KTsKPiArCj4gK8Kg wqDCoCByZXR1cm4gYXZfZDNkMTJ2YV93YWl0X3F1ZXVlX2lkbGUocy0+c3luY19jdHgsIHMtPmNv bW1hbmRfcXVldWUpOwo+ICsKPiArZmFpbDoKPiArwqDCoMKgIHJldHVybiBBVkVSUk9SKEVJTlZB TCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGQzZDEydmFfZnJhbWVzX3VuaW5pdChBVkhXRnJh bWVzQ29udGV4dCAqY3R4KQo+ICt7Cj4gK8KgwqDCoCBBVkQzRDEyVkFGcmFtZXNDb250ZXh0ICpm cmFtZXNfaHdjdHggPSBjdHgtPmh3Y3R4Owo+ICvCoMKgwqAgRDNEMTJWQUZyYW1lc0NvbnRleHTC oMKgICpzwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IGN0eC0+aW50ZXJuYWwtPnByaXY7Cj4gKwo+ ICvCoMKgwqAgYXZfZDNkMTJ2YV9zeW5jX2NvbnRleHRfZnJlZSgmcy0+c3luY19jdHgpOwo+ICsK PiArwqDCoMKgIEQzRDEyX09CSkVDVF9SRUxFQVNFKHMtPnN0YWdpbmdfYnVmZmVyKTsKPiArwqDC oMKgIEQzRDEyX09CSkVDVF9SRUxFQVNFKHMtPmNvbW1hbmRfYWxsb2NhdG9yKTsKPiArwqDCoMKg IEQzRDEyX09CSkVDVF9SRUxFQVNFKHMtPmNvbW1hbmRfbGlzdCk7Cj4gK8KgwqDCoCBEM0QxMl9P QkpFQ1RfUkVMRUFTRShzLT5jb21tYW5kX3F1ZXVlKTsKPiArCj4gK8KgwqDCoCBhdl9mcmVlcCgm ZnJhbWVzX2h3Y3R4LT50ZXh0dXJlX2luZm9zKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBkM2Qx MnZhX2ZyYW1lc19nZXRfY29uc3RyYWludHMoQVZIV0RldmljZUNvbnRleHQgKmN0eCwgY29uc3Qg dm9pZAo+ICpod2NvbmZpZywgQVZIV0ZyYW1lc0NvbnN0cmFpbnRzICpjb25zdHJhaW50cykKPiAr ewo+ICvCoMKgwqAgSFJFU1VMVCBocjsKPiArwqDCoMKgIGludCBuYl9zd19mb3JtYXRzID0gMDsK PiArwqDCoMKgIEFWRDNEMTJWQURldmljZUNvbnRleHQgKmRldmljZV9od2N0eCA9IGN0eC0+aHdj dHg7Cj4gKwo+ICvCoMKgwqAgY29uc3RyYWludHMtPnZhbGlkX3N3X2Zvcm1hdHMgPQo+IGF2X21h bGxvY19hcnJheShGRl9BUlJBWV9FTEVNUyhzdXBwb3J0ZWRfZm9ybWF0cykgKyAxLAo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZW9mKCpjb25zdHJh aW50cy0KPiA+dmFsaWRfc3dfZm9ybWF0cykpOwo+ICvCoMKgwqAgaWYgKCFjb25zdHJhaW50cy0+ dmFsaWRfc3dfZm9ybWF0cykKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1IoRU5PTUVN KTsKPiArCj4gK8KgwqDCoCBmb3IgKGludCBpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKHN1cHBv cnRlZF9mb3JtYXRzKTsgaSsrKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIEQzRDEyX0ZFQVRVUkVfREFU QV9GT1JNQVRfU1VQUE9SVCBmb3JtYXRfc3VwcG9ydCA9IHsKPiBzdXBwb3J0ZWRfZm9ybWF0c1tp XS5kM2RfZm9ybWF0IH07Cj4gK8KgwqDCoMKgwqDCoMKgIGhyID0gSUQzRDEyRGV2aWNlX0NoZWNr RmVhdHVyZVN1cHBvcnQoZGV2aWNlX2h3Y3R4LT5kZXZpY2UsCj4gRDNEMTJfRkVBVFVSRV9GT1JN QVRfU1VQUE9SVCwgJmZvcm1hdF9zdXBwb3J0LCBzaXplb2YoZm9ybWF0X3N1cHBvcnQpKTsKPiAr wqDCoMKgwqDCoMKgwqAgaWYgKFNVQ0NFRURFRChocikgJiYgKGZvcm1hdF9zdXBwb3J0LlN1cHBv cnQxICYKPiBEM0QxMl9GT1JNQVRfU1VQUE9SVDFfVEVYVFVSRTJEKSkKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBjb25zdHJhaW50cy0+dmFsaWRfc3dfZm9ybWF0c1tuYl9zd19mb3JtYXRzKytd ID0KPiBzdXBwb3J0ZWRfZm9ybWF0c1tpXS5waXhfZm10Owo+ICvCoMKgwqAgfQo+ICvCoMKgwqAg Y29uc3RyYWludHMtPnZhbGlkX3N3X2Zvcm1hdHNbbmJfc3dfZm9ybWF0c10gPSBBVl9QSVhfRk1U X05PTkU7Cj4gKwo+ICvCoMKgwqAgY29uc3RyYWludHMtPnZhbGlkX2h3X2Zvcm1hdHMgPSBhdl9t YWxsb2NfYXJyYXkoMiwgc2l6ZW9mKCpjb25zdHJhaW50cy0KPiA+dmFsaWRfaHdfZm9ybWF0cykp Owo+ICvCoMKgwqAgaWYgKCFjb25zdHJhaW50cy0+dmFsaWRfaHdfZm9ybWF0cykKPiArwqDCoMKg wqDCoMKgwqAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiArCj4gK8KgwqDCoCBjb25zdHJhaW50 cy0+dmFsaWRfaHdfZm9ybWF0c1swXSA9IEFWX1BJWF9GTVRfRDNEMTI7Cj4gK8KgwqDCoCBjb25z dHJhaW50cy0+dmFsaWRfaHdfZm9ybWF0c1sxXSA9IEFWX1BJWF9GTVRfTk9ORTsKPiArCj4gK8Kg wqDCoCByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZnJlZV90ZXh0dXJlKHZvaWQg Km9wYXF1ZSwgdWludDhfdCAqZGF0YSkKPiArewo+ICvCoMKgwqAgQVZEM0QxMkZyYW1lRGVzY3Jp cHRvciAqZGVzYyA9IChBVkQzRDEyRnJhbWVEZXNjcmlwdG9yICopZGF0YTsKPiArCj4gK8KgwqDC oCBpZiAoZGVzYy0+c3luY19jdHgpCj4gK8KgwqDCoMKgwqDCoMKgIGF2X2QzZDEydmFfc3luY19j b250ZXh0X2ZyZWUoJmRlc2MtPnN5bmNfY3R4KTsKPiArCj4gK8KgwqDCoCBEM0QxMl9PQkpFQ1Rf UkVMRUFTRShkZXNjLT50ZXh0dXJlKTsKPiArwqDCoMKgIGF2X2ZyZWVwKCZkYXRhKTsKPiArfQo+ ICsKPiArc3RhdGljIEFWQnVmZmVyUmVmICp3cmFwX3RleHR1cmVfYnVmKEFWSFdGcmFtZXNDb250 ZXh0ICpjdHgsIElEM0QxMlJlc291cmNlCj4gKnRleHR1cmUsIEFWRDNEMTJWQVN5bmNDb250ZXh0 ICpzeW5jX2N0eCkKPiArewo+ICvCoMKgwqAgQVZCdWZmZXJSZWYgKmJ1ZjsKPiArwqDCoMKgIEQz RDEyVkFGcmFtZXNDb250ZXh0wqDCoCAqc8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBjdHgtPmlu dGVybmFsLT5wcml2Owo+ICvCoMKgwqAgQVZEM0QxMlZBRnJhbWVzQ29udGV4dCAqZnJhbWVzX2h3 Y3R4ID0gY3R4LT5od2N0eDsKPiArCj4gK8KgwqDCoCBBVkQzRDEyRnJhbWVEZXNjcmlwdG9yICpk ZXNjID0gYXZfbWFsbG9jeihzaXplb2YoKmRlc2MpKTsKPiArwqDCoMKgIGlmICghZGVzYykKPiAr wqDCoMKgwqDCoMKgwqAgZ290byBmYWlsOwo+ICsKPiArwqDCoMKgIGlmIChzLT5uYl9zdXJmYWNl cyA8PSBzLT5uYl9zdXJmYWNlc191c2VkKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIGZyYW1lc19od2N0 eC0+dGV4dHVyZV9pbmZvcyA9IGF2X3JlYWxsb2NfZihmcmFtZXNfaHdjdHgtCj4gPnRleHR1cmVf aW5mb3MsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcy0+ bmJfc3VyZmFjZXNfdXNlZCArIDEsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgc2l6ZW9mKCpmcmFtZXNfaHdjdHgtCj4gPnRleHR1cmVfaW5mb3MpKTsKPiAr wqDCoMKgwqDCoMKgwqAgaWYgKCFmcmFtZXNfaHdjdHgtPnRleHR1cmVfaW5mb3MpCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgZ290byBmYWlsOwo+ICvCoMKgwqDCoMKgwqDCoCBzLT5uYl9zdXJm YWNlcyA9IHMtPm5iX3N1cmZhY2VzX3VzZWQgKyAxOwo+ICvCoMKgwqAgfQo+ICsKPiArwqDCoMKg IGRlc2MtPnRleHR1cmXCoCA9IHRleHR1cmU7Cj4gK8KgwqDCoCBkZXNjLT5pbmRleMKgwqDCoCA9 IHMtPm5iX3N1cmZhY2VzX3VzZWQ7Cj4gK8KgwqDCoCBkZXNjLT5zeW5jX2N0eCA9IHN5bmNfY3R4 Owo+ICsKPiArwqDCoMKgIGZyYW1lc19od2N0eC0+dGV4dHVyZV9pbmZvc1tzLT5uYl9zdXJmYWNl c191c2VkXS50ZXh0dXJlwqAgPSB0ZXh0dXJlOwo+ICvCoMKgwqAgZnJhbWVzX2h3Y3R4LT50ZXh0 dXJlX2luZm9zW3MtPm5iX3N1cmZhY2VzX3VzZWRdLmluZGV4wqDCoMKgID0gZGVzYy0+aW5kZXg7 Cj4gK8KgwqDCoCBmcmFtZXNfaHdjdHgtPnRleHR1cmVfaW5mb3Nbcy0+bmJfc3VyZmFjZXNfdXNl ZF0uc3luY19jdHggPSBzeW5jX2N0eDsKPiArwqDCoMKgIHMtPm5iX3N1cmZhY2VzX3VzZWQrKzsK PiArCj4gK8KgwqDCoCBidWYgPSBhdl9idWZmZXJfY3JlYXRlKCh1aW50OF90ICopZGVzYywgc2l6 ZW9mKGRlc2MpLCBmcmVlX3RleHR1cmUsCj4gdGV4dHVyZSwgMCk7Cj4gK8KgwqDCoCBpZiAoIWJ1 Zikgewo+ICvCoMKgwqDCoMKgwqDCoCBEM0QxMl9PQkpFQ1RfUkVMRUFTRSh0ZXh0dXJlKTsKPiAr wqDCoMKgwqDCoMKgwqAgYXZfZnJlZXAoJmRlc2MpOwo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4g TlVMTDsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCByZXR1cm4gYnVmOwo+ICsKPiArZmFpbDoK PiArwqDCoMKgIEQzRDEyX09CSkVDVF9SRUxFQVNFKHRleHR1cmUpOwo+ICvCoMKgwqAgYXZfZDNk MTJ2YV9zeW5jX2NvbnRleHRfZnJlZSgmc3luY19jdHgpOwo+ICvCoMKgwqAgcmV0dXJuIE5VTEw7 Cj4gK30KPiArCj4gK3N0YXRpYyBBVkJ1ZmZlclJlZiAqZDNkMTJ2YV9wb29sX2FsbG9jKHZvaWQg Km9wYXF1ZSwgc2l6ZV90IHNpemUpCj4gK3sKPiArwqDCoMKgIEFWSFdGcmFtZXNDb250ZXh0wqDC oMKgwqDCoCAqY3R4wqDCoMKgwqDCoMKgwqDCoMKgID0gKEFWSFdGcmFtZXNDb250ZXh0ICopb3Bh cXVlOwo+ICvCoMKgwqAgRDNEMTJWQUZyYW1lc0NvbnRleHTCoMKgICpzwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCA9IGN0eC0+aW50ZXJuYWwtPnByaXY7Cj4gK8KgwqDCoCBBVkQzRDEyVkFGcmFtZXND b250ZXh0ICpod2N0eMKgwqDCoMKgwqDCoMKgID0gY3R4LT5od2N0eDsKPiArwqDCoMKgIEFWRDNE MTJWQURldmljZUNvbnRleHQgKmRldmljZV9od2N0eCA9IGN0eC0+ZGV2aWNlX2N0eC0+aHdjdHg7 Cj4gKwo+ICvCoMKgwqAgaW50IHJldDsKPiArwqDCoMKgIElEM0QxMlJlc291cmNlICp0ZXh0dXJl Owo+ICvCoMKgwqAgQVZEM0QxMlZBU3luY0NvbnRleHQgKnN5bmNfY3R4Owo+ICsKPiArwqDCoMKg IEQzRDEyX1JFU09VUkNFX0RFU0MgZGVzYyA9IHsKPiArwqDCoMKgwqDCoMKgwqAgLkRpbWVuc2lv bsKgwqDCoMKgwqDCoMKgID0gRDNEMTJfUkVTT1VSQ0VfRElNRU5TSU9OX1RFWFRVUkUyRCwKPiAr wqDCoMKgwqDCoMKgwqAgLkFsaWdubWVudMKgwqDCoMKgwqDCoMKgID0gMCwKPiArwqDCoMKgwqDC oMKgwqAgLldpZHRowqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IGN0eC0+d2lkdGgsCj4gK8KgwqDC oMKgwqDCoMKgIC5IZWlnaHTCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IGN0eC0+aGVpZ2h0LAo+ICvC oMKgwqDCoMKgwqDCoCAuRGVwdGhPckFycmF5U2l6ZSA9IDEsCj4gK8KgwqDCoMKgwqDCoMKgIC5N aXBMZXZlbHPCoMKgwqDCoMKgwqDCoCA9IDEsCj4gK8KgwqDCoMKgwqDCoMKgIC5Gb3JtYXTCoMKg wqDCoMKgwqDCoMKgwqDCoCA9IHMtPmZvcm1hdCwKPiArwqDCoMKgwqDCoMKgwqAgLlNhbXBsZURl c2PCoMKgwqDCoMKgwqAgPSB7LkNvdW50ID0gMSwgLlF1YWxpdHkgPSAwIH0sCj4gK8KgwqDCoMKg wqDCoMKgIC5MYXlvdXTCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IEQzRDEyX1RFWFRVUkVfTEFZT1VU X1VOS05PV04sCj4gK8KgwqDCoMKgwqDCoMKgIC5GbGFnc8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg PSBEM0QxMl9SRVNPVVJDRV9GTEFHX05PTkUsCj4gK8KgwqDCoCB9Owo+ICsKPiArwqDCoMKgIGlm IChzLT5uYl9zdXJmYWNlc191c2VkID49IGN0eC0+aW5pdGlhbF9wb29sX3NpemUpIHsKPiArwqDC oMKgwqDCoMKgwqAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiU3RhdGljIHN1cmZhY2UgcG9v bCBzaXplIGV4Y2VlZGVkLlxuIik7Cj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBOVUxMOwo+ICvC oMKgwqAgfQo+ICsKPiArwqDCoMKgIHJldCA9IGNyZWF0ZV9yZXNvdXJjZShkZXZpY2VfaHdjdHgt PmRldmljZSwgJmRlc2MsCj4gRDNEMTJfUkVTT1VSQ0VfU1RBVEVfQ09NTU9OLCAmdGV4dHVyZSwg MCk7Cj4gK8KgwqDCoCBpZiAocmV0IDwgMCkKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIE5VTEw7 Cj4gKwo+ICvCoMKgwqAgcmV0ID0gYXZfZDNkMTJ2YV9zeW5jX2NvbnRleHRfYWxsb2MoZGV2aWNl X2h3Y3R4LCAmc3luY19jdHgpOwo+ICvCoMKgwqAgaWYgKHJldCA8IDApIHsKPiArwqDCoMKgwqDC oMKgwqAgRDNEMTJfT0JKRUNUX1JFTEVBU0UodGV4dHVyZSkKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCByZXR1cm4gTlVMTDsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCByZXR1cm4gd3JhcF90 ZXh0dXJlX2J1ZihjdHgsIHRleHR1cmUsIHN5bmNfY3R4KTsKPiArfQo+ICsKPiArc3RhdGljIGlu dCBkM2QxMnZhX2ZyYW1lc19pbml0KEFWSFdGcmFtZXNDb250ZXh0ICpjdHgpCj4gK3sKPiArwqDC oMKgIEFWRDNEMTJWQUZyYW1lc0NvbnRleHQgKmh3Y3R4wqDCoMKgwqDCoMKgwqAgPSBjdHgtPmh3 Y3R4Owo+ICvCoMKgwqAgQVZEM0QxMlZBRGV2aWNlQ29udGV4dCAqZGV2aWNlX2h3Y3R4ID0gY3R4 LT5kZXZpY2VfY3R4LT5od2N0eDsKPiArwqDCoMKgIEQzRDEyVkFGcmFtZXNDb250ZXh0wqDCoCAq c8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBjdHgtPmludGVybmFsLT5wcml2Owo+ICsKPiArwqDC oMKgIGludCBpOwo+ICsKPiArwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBGRl9BUlJBWV9FTEVNUyhz dXBwb3J0ZWRfZm9ybWF0cyk7IGkrKykgewo+ICvCoMKgwqDCoMKgwqDCoCBpZiAoY3R4LT5zd19m b3JtYXQgPT0gc3VwcG9ydGVkX2Zvcm1hdHNbaV0ucGl4X2ZtdCkgewo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHMtPmZvcm1hdCA9IHN1cHBvcnRlZF9mb3JtYXRzW2ldLmQzZF9mb3JtYXQ7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4gK8KgwqDCoMKgwqDCoMKgIH0KPiArwqDC oMKgIH0KPiArwqDCoMKgIGlmIChpID09IEZGX0FSUkFZX0VMRU1TKHN1cHBvcnRlZF9mb3JtYXRz KSkgewo+ICvCoMKgwqDCoMKgwqDCoCBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJVbnN1cHBv cnRlZCBwaXhlbCBmb3JtYXQ6ICVzXG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGF2X2dldF9waXhfZm10X25hbWUoY3R4LT5zd19mb3JtYXQpKTsKPiArwqDCoMKgwqDCoMKgwqAg cmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCBod2N0eC0+ dGV4dHVyZV9pbmZvcyA9IGF2X3JlYWxsb2NfZihOVUxMLCBjdHgtPmluaXRpYWxfcG9vbF9zaXpl LAo+IHNpemVvZigqaHdjdHgtPnRleHR1cmVfaW5mb3MpKTsKPiArwqDCoMKgIGlmICghaHdjdHgt PnRleHR1cmVfaW5mb3MpCj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7 Cj4gKwo+ICvCoMKgwqAgbWVtc2V0KGh3Y3R4LT50ZXh0dXJlX2luZm9zLCAwLCBjdHgtPmluaXRp YWxfcG9vbF9zaXplICogc2l6ZW9mKCpod2N0eC0KPiA+dGV4dHVyZV9pbmZvcykpOwo+ICvCoMKg wqAgcy0+bmJfc3VyZmFjZXMgPSBjdHgtPmluaXRpYWxfcG9vbF9zaXplOwo+ICsKPiArwqDCoMKg IGN0eC0+aW50ZXJuYWwtPnBvb2xfaW50ZXJuYWwgPQo+IGF2X2J1ZmZlcl9wb29sX2luaXQyKHNp emVvZihBVkQzRDEyRnJhbWVEZXNjcmlwdG9yKSwKPiArwqDCoMKgwqDCoMKgwqAgY3R4LCBkM2Qx MnZhX3Bvb2xfYWxsb2MsIE5VTEwpOwo+ICsKPiArwqDCoMKgIGlmICghY3R4LT5pbnRlcm5hbC0+ cG9vbF9pbnRlcm5hbCkKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsK PiArCj4gK8KgwqDCoCByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkM2QxMnZhX2dl dF9idWZmZXIoQVZIV0ZyYW1lc0NvbnRleHQgKmN0eCwgQVZGcmFtZSAqZnJhbWUpCj4gK3sKPiAr wqDCoMKgIGludCByZXQ7Cj4gK8KgwqDCoCBBVkQzRDEyRnJhbWVEZXNjcmlwdG9yICpkZXNjOwo+ ICsKPiArwqDCoMKgIGZyYW1lLT5idWZbMF0gPSBhdl9idWZmZXJfcG9vbF9nZXQoY3R4LT5wb29s KTsKPiArwqDCoMKgIGlmICghZnJhbWUtPmJ1ZlswXSkKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJu IEFWRVJST1IoRU5PTUVNKTsKPiArCj4gK8KgwqDCoCByZXQgPSBhdl9pbWFnZV9maWxsX2FycmF5 cyhmcmFtZS0+ZGF0YSwgZnJhbWUtPmxpbmVzaXplLCBmcmFtZS0+YnVmWzBdLQo+ID5kYXRhLAo+ ICvCoMKgwqDCoMKgwqDCoCBjdHgtPnN3X2Zvcm1hdCwgY3R4LT53aWR0aCwgY3R4LT5oZWlnaHQs Cj4gRDNEMTJfVEVYVFVSRV9EQVRBX1BJVENIX0FMSUdOTUVOVCk7Cj4gK8KgwqDCoCBpZiAocmV0 IDwgMCkKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPiArCj4gK8KgwqDCoCBkZXNjID0g KEFWRDNEMTJGcmFtZURlc2NyaXB0b3IgKilmcmFtZS0+YnVmWzBdLT5kYXRhOwo+ICvCoMKgwqAg ZnJhbWUtPmRhdGFbMF0gPSAodWludDhfdCAqKWRlc2MtPnRleHR1cmU7Cj4gK8KgwqDCoCBmcmFt ZS0+ZGF0YVsxXSA9ICh1aW50OF90ICopZGVzYy0+aW5kZXg7Cj4gK8KgwqDCoCBmcmFtZS0+ZGF0 YVsyXSA9ICh1aW50OF90ICopZGVzYy0+c3luY19jdHg7Cj4gKwo+ICvCoMKgwqAgZnJhbWUtPmZv cm1hdMKgID0gQVZfUElYX0ZNVF9EM0QxMjsKPiArwqDCoMKgIGZyYW1lLT53aWR0aMKgwqAgPSBj dHgtPndpZHRoOwo+ICvCoMKgwqAgZnJhbWUtPmhlaWdodMKgID0gY3R4LT5oZWlnaHQ7Cj4gKwo+ ICvCoMKgwqAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZDNkMTJ2YV90cmFuc2Zl cl9nZXRfZm9ybWF0cyhBVkhXRnJhbWVzQ29udGV4dCAqY3R4LAo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgZW51bSBBVkhXRnJhbWVUcmFuc2ZlckRpcmVjdGlvbiBkaXIsCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBlbnVtIEFWUGl4ZWxGb3JtYXQgKipmb3JtYXRzKQo+ICt7Cj4gK8KgwqDCoCBE M0QxMlZBRnJhbWVzQ29udGV4dCAqcyA9IGN0eC0+aW50ZXJuYWwtPnByaXY7Cj4gK8KgwqDCoCBl bnVtIEFWUGl4ZWxGb3JtYXQgKmZtdHM7Cj4gKwo+ICvCoMKgwqAgZm10cyA9IGF2X21hbGxvY19h cnJheSgyLCBzaXplb2YoKmZtdHMpKTsKPiArwqDCoMKgIGlmICghZm10cykKPiArwqDCoMKgwqDC oMKgwqAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiArCj4gK8KgwqDCoCBmbXRzWzBdID0gY3R4 LT5zd19mb3JtYXQ7Cj4gK8KgwqDCoCBmbXRzWzFdID0gQVZfUElYX0ZNVF9OT05FOwo+ICsKPiAr wqDCoMKgICpmb3JtYXRzID0gZm10czsKPiArCj4gK8KgwqDCoCByZXR1cm4gMDsKPiArfQo+ICsK PiArc3RhdGljIGludCBkM2QxMnZhX3RyYW5zZmVyX2RhdGEoQVZIV0ZyYW1lc0NvbnRleHQgKmN0 eCwgQVZGcmFtZSAqZHN0LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0IEFWRnJhbWUgKnNyYykKPiArewo+ICvC oMKgwqAgQVZEM0QxMlZBRGV2aWNlQ29udGV4dCAqaHdjdHjCoMKgwqDCoMKgwqDCoCA9IGN0eC0+ ZGV2aWNlX2N0eC0+aHdjdHg7Cj4gK8KgwqDCoCBBVkQzRDEyVkFGcmFtZXNDb250ZXh0ICpmcmFt ZXNfaHdjdHggPSBjdHgtPmh3Y3R4Owo+ICvCoMKgwqAgRDNEMTJWQUZyYW1lc0NvbnRleHTCoMKg ICpzwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IGN0eC0+aW50ZXJuYWwtPnByaXY7Cj4gKwo+ICvC oMKgwqAgaW50IHJldDsKPiArwqDCoMKgIGludCBkb3dubG9hZCA9IHNyYy0+Zm9ybWF0ID09IEFW X1BJWF9GTVRfRDNEMTI7Cj4gK8KgwqDCoCBjb25zdCBBVkZyYW1lICpmcmFtZSA9IGRvd25sb2Fk ID8gc3JjIDogZHN0Owo+ICvCoMKgwqAgY29uc3QgQVZGcmFtZSAqb3RoZXIgPSBkb3dubG9hZCA/ IGRzdCA6IHNyYzsKPiArCj4gK8KgwqDCoCBJRDNEMTJSZXNvdXJjZcKgwqDCoMKgwqDCoCAqdGV4 dHVyZcKgID0gKElEM0QxMlJlc291cmNlICopwqDCoMKgwqDCoCBmcmFtZS0+ZGF0YVswXTsKPiAr wqDCoMKgIGludMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbmRleMKgwqDC oCA9IChpbnRwdHJfdCnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmcmFtZS0+ZGF0YVsxXTsK PiArwqDCoMKgIEFWRDNEMTJWQVN5bmNDb250ZXh0ICpzeW5jX2N0eCA9IChBVkQzRDEyVkFTeW5j Q29udGV4dCAqKWZyYW1lLT5kYXRhWzJdOwo+ICsKPiArwqDCoMKgIHVpbnQ4X3QgKm1hcHBlZF9k YXRhOwo+ICvCoMKgwqAgdWludDhfdCAqZGF0YVs0XTsKPiArwqDCoMKgIGludCBsaW5lc2l6ZXNb NF07Cj4gKwo+ICvCoMKgwqAgRDNEMTJfVEVYVFVSRV9DT1BZX0xPQ0FUSU9OIHN0YWdpbmdfeV9s b2NhdGlvbjsKPiArwqDCoMKgIEQzRDEyX1RFWFRVUkVfQ09QWV9MT0NBVElPTiBzdGFnaW5nX3V2 X2xvY2F0aW9uOwo+ICsKPiArwqDCoMKgIEQzRDEyX1RFWFRVUkVfQ09QWV9MT0NBVElPTiB0ZXh0 dXJlX3lfbG9jYXRpb24gPSB7Cj4gK8KgwqDCoMKgwqDCoMKgIC5wUmVzb3VyY2XCoMKgwqDCoMKg wqDCoCA9IHRleHR1cmUsCj4gK8KgwqDCoMKgwqDCoMKgIC5UeXBlwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgID0gRDNEMTJfVEVYVFVSRV9DT1BZX1RZUEVfU1VCUkVTT1VSQ0VfSU5ERVgsCj4gK8Kg wqDCoMKgwqDCoMKgIC5TdWJyZXNvdXJjZUluZGV4ID0gMCwKPiArwqDCoMKgIH07Cj4gKwo+ICvC oMKgwqAgRDNEMTJfVEVYVFVSRV9DT1BZX0xPQ0FUSU9OIHRleHR1cmVfdXZfbG9jYXRpb24gPSB7 Cj4gK8KgwqDCoMKgwqDCoMKgIC5wUmVzb3VyY2XCoMKgwqDCoMKgwqDCoCA9IHRleHR1cmUsCj4g K8KgwqDCoMKgwqDCoMKgIC5UeXBlwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gRDNEMTJfVEVY VFVSRV9DT1BZX1RZUEVfU1VCUkVTT1VSQ0VfSU5ERVgsCj4gK8KgwqDCoMKgwqDCoMKgIC5TdWJy ZXNvdXJjZUluZGV4ID0gMSwKPiArwqDCoMKgIH07Cj4gKwo+ICvCoMKgwqAgRDNEMTJfUkVTT1VS Q0VfQkFSUklFUiBiYXJyaWVyID0gewo+ICvCoMKgwqDCoMKgwqDCoCAuVHlwZcKgID0gRDNEMTJf UkVTT1VSQ0VfQkFSUklFUl9UWVBFX1RSQU5TSVRJT04sCj4gK8KgwqDCoMKgwqDCoMKgIC5GbGFn cyA9IEQzRDEyX1JFU09VUkNFX0JBUlJJRVJfRkxBR19OT05FLAo+ICvCoMKgwqDCoMKgwqDCoCAu VHJhbnNpdGlvbiA9IHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAucFJlc291cmNlwqDCoCA9 IHRleHR1cmUsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLlN0YXRlQmVmb3JlID0gRDNEMTJf UkVTT1VSQ0VfU1RBVEVfQ09NTU9OLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5TdGF0ZUFm dGVywqAgPSBEM0QxMl9SRVNPVVJDRV9TVEFURV9DT1BZX1NPVVJDRSwKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAuU3VicmVzb3VyY2UgPSBEM0QxMl9SRVNPVVJDRV9CQVJSSUVSX0FMTF9TVUJS RVNPVVJDRVMsCj4gK8KgwqDCoMKgwqDCoMKgIH0KPiArwqDCoMKgIH07Cj4gKwo+ICvCoMKgwqAg cy0+Zm9ybWF0ID0gYXZfZDNkMTJ2YV9tYXBfc3dfdG9faHdfZm9ybWF0KGN0eC0+c3dfZm9ybWF0 KTsKPiArCj4gK8KgwqDCoCBpZiAoZnJhbWUtPmh3X2ZyYW1lc19jdHgtPmRhdGEgIT0gKHVpbnQ4 X3QgKiljdHggfHwgb3RoZXItPmZvcm1hdCAhPSBjdHgtCj4gPnN3X2Zvcm1hdCkKPiArwqDCoMKg wqDCoMKgwqAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiArCj4gK8KgwqDCoCBpZiAoIXMtPmNv bW1hbmRfcXVldWUpIHsKPiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gZDNkMTJ2YV9jcmVhdGVfaGVs cGVyX29iamVjdHMoY3R4KTsKPiArwqDCoMKgwqDCoMKgwqAgaWYgKHJldCA8IDApCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCBm b3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykKPiArwqDCoMKgwqDCoMKgwqAgbGluZXNpemVzW2ld ID0gRkZBTElHTihmcmFtZS0+d2lkdGggKiAocy0+Zm9ybWF0ID09IERYR0lfRk9STUFUX1AwMTAK PiA/IDIgOiAxKSwgRDNEMTJfVEVYVFVSRV9EQVRBX1BJVENIX0FMSUdOTUVOVCk7Cj4gKwo+ICvC oMKgwqAgc3RhZ2luZ195X2xvY2F0aW9uID0gKEQzRDEyX1RFWFRVUkVfQ09QWV9MT0NBVElPTikg ewo+ICvCoMKgwqDCoMKgwqDCoCAucFJlc291cmNlID0gcy0+c3RhZ2luZ19idWZmZXIsCj4gK8Kg wqDCoMKgwqDCoMKgIC5UeXBlwqDCoMKgwqDCoCA9IEQzRDEyX1RFWFRVUkVfQ09QWV9UWVBFX1BM QUNFRF9GT09UUFJJTlQsCj4gK8KgwqDCoMKgwqDCoMKgIC5QbGFjZWRGb290cHJpbnQgPSB7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLk9mZnNldCA9IDAsCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgLkZvb3RwcmludCA9IHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5G b3JtYXTCoMKgID0gcy0+Zm9ybWF0ID09IERYR0lfRk9STUFUX1AwMTAgPwo+IERYR0lfRk9STUFU X1IxNl9VTk9STSA6IERYR0lfRk9STUFUX1I4X1VOT1JNLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgLldpZHRowqDCoMKgID0gY3R4LT53aWR0aCwKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIC5IZWlnaHTCoMKgID0gY3R4LT5oZWlnaHQsCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAuRGVwdGjCoMKgwqAgPSAxLAo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgLlJvd1BpdGNoID0gbGluZXNpemVzWzBdLAo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIH0sCj4gK8KgwqDCoMKgwqDCoMKgIH0sCj4gK8KgwqDCoCB9Owo+ICsKPiArwqDC oMKgIHN0YWdpbmdfdXZfbG9jYXRpb24gPSAoRDNEMTJfVEVYVFVSRV9DT1BZX0xPQ0FUSU9OKSB7 Cj4gK8KgwqDCoMKgwqDCoMKgIC5wUmVzb3VyY2UgPSBzLT5zdGFnaW5nX2J1ZmZlciwKPiArwqDC oMKgwqDCoMKgwqAgLlR5cGXCoMKgwqDCoMKgID0gRDNEMTJfVEVYVFVSRV9DT1BZX1RZUEVfUExB Q0VEX0ZPT1RQUklOVCwKPiArwqDCoMKgwqDCoMKgwqAgLlBsYWNlZEZvb3RwcmludCA9IHsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAuT2Zmc2V0ID0gcy0+bHVtYV9jb21wb25lbnRfc2l6ZSwK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAuRm9vdHByaW50ID0gewo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgLkZvcm1hdMKgwqAgPSBzLT5mb3JtYXQgPT0gRFhHSV9GT1JNQVRf UDAxMCA/Cj4gRFhHSV9GT1JNQVRfUjE2RzE2X1VOT1JNIDogRFhHSV9GT1JNQVRfUjhHOF9VTk9S TSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5XaWR0aMKgwqDCoCA9IGN0eC0+ d2lkdGjCoCA+PiAxLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLkhlaWdodMKg wqAgPSBjdHgtPmhlaWdodCA+PiAxLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg LkRlcHRowqDCoMKgID0gMSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5Sb3dQ aXRjaCA9IGxpbmVzaXplc1swXSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9LAo+ICvCoMKg wqDCoMKgwqDCoCB9LAo+ICvCoMKgwqAgfTsKPiArCj4gK8KgwqDCoCBEWF9DSEVDSyhJRDNEMTJD b21tYW5kQWxsb2NhdG9yX1Jlc2V0KHMtPmNvbW1hbmRfYWxsb2NhdG9yKSk7Cj4gKwo+ICvCoMKg wqAgRFhfQ0hFQ0soSUQzRDEyR3JhcGhpY3NDb21tYW5kTGlzdF9SZXNldChzLT5jb21tYW5kX2xp c3QsIHMtCj4gPmNvbW1hbmRfYWxsb2NhdG9yLCBOVUxMKSk7Cj4gKwo+ICvCoMKgwqAgaWYgKGRv d25sb2FkKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIElEM0QxMkdyYXBoaWNzQ29tbWFuZExpc3RfUmVz b3VyY2VCYXJyaWVyKHMtPmNvbW1hbmRfbGlzdCwgMSwKPiAmYmFycmllcik7Cj4gKwo+ICvCoMKg wqDCoMKgwqDCoCBJRDNEMTJHcmFwaGljc0NvbW1hbmRMaXN0X0NvcHlUZXh0dXJlUmVnaW9uKHMt PmNvbW1hbmRfbGlzdCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmc3RhZ2luZ195X2xvY2F0 aW9uLCAwLCAwLCAwLCAmdGV4dHVyZV95X2xvY2F0aW9uLCBOVUxMKTsKPiArCj4gK8KgwqDCoMKg wqDCoMKgIElEM0QxMkdyYXBoaWNzQ29tbWFuZExpc3RfQ29weVRleHR1cmVSZWdpb24ocy0+Y29t bWFuZF9saXN0LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZzdGFnaW5nX3V2X2xvY2F0aW9u LCAwLCAwLCAwLCAmdGV4dHVyZV91dl9sb2NhdGlvbiwgTlVMTCk7Cj4gKwo+ICvCoMKgwqDCoMKg wqDCoCBiYXJyaWVyLlRyYW5zaXRpb24uU3RhdGVCZWZvcmUgPSBiYXJyaWVyLlRyYW5zaXRpb24u U3RhdGVBZnRlcjsKPiArwqDCoMKgwqDCoMKgwqAgYmFycmllci5UcmFuc2l0aW9uLlN0YXRlQWZ0 ZXIgPSBEM0QxMl9SRVNPVVJDRV9TVEFURV9DT01NT047Cj4gK8KgwqDCoMKgwqDCoMKgIElEM0Qx MkdyYXBoaWNzQ29tbWFuZExpc3RfUmVzb3VyY2VCYXJyaWVyKHMtPmNvbW1hbmRfbGlzdCwgMSwK PiAmYmFycmllcik7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCBEWF9DSEVDSyhJRDNEMTJHcmFwaGlj c0NvbW1hbmRMaXN0X0Nsb3NlKHMtPmNvbW1hbmRfbGlzdCkpOwo+ICsKPiArwqDCoMKgwqDCoMKg wqAgaWYgKCFod2N0eC0+c3luYykKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBEWF9DSEVDSyhJ RDNEMTJDb21tYW5kUXVldWVfV2FpdChzLT5jb21tYW5kX3F1ZXVlLCBzeW5jX2N0eC0KPiA+ZmVu Y2UsIHN5bmNfY3R4LT5mZW5jZV92YWx1ZSkpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAgSUQzRDEy Q29tbWFuZFF1ZXVlX0V4ZWN1dGVDb21tYW5kTGlzdHMocy0+Y29tbWFuZF9xdWV1ZSwgMSwKPiAo SUQzRDEyQ29tbWFuZExpc3QgKiopJnMtPmNvbW1hbmRfbGlzdCk7Cj4gKwo+ICvCoMKgwqDCoMKg wqDCoCByZXQgPSBhdl9kM2QxMnZhX3dhaXRfcXVldWVfaWRsZShzLT5zeW5jX2N0eCwgcy0+Y29t bWFuZF9xdWV1ZSk7Cj4gK8KgwqDCoMKgwqDCoMKgIGlmIChyZXQpCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgcmV0dXJuIHJldDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgIERYX0NIRUNLKElEM0Qx MlJlc291cmNlX01hcChzLT5zdGFnaW5nX2J1ZmZlciwgMCwgTlVMTCwKPiAmbWFwcGVkX2RhdGEp KTsKPiArwqDCoMKgwqDCoMKgwqAgYXZfaW1hZ2VfZmlsbF9wb2ludGVycyhkYXRhLCBjdHgtPnN3 X2Zvcm1hdCwgY3R4LT5oZWlnaHQsCj4gbWFwcGVkX2RhdGEsIGxpbmVzaXplcyk7Cj4gKwo+ICvC oMKgwqDCoMKgwqDCoCBhdl9pbWFnZV9jb3B5KGRzdC0+ZGF0YSwgZHN0LT5saW5lc2l6ZSwgZGF0 YSwgbGluZXNpemVzLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGN0eC0+c3dfZm9ybWF0LCBj dHgtPndpZHRoLCBjdHgtPmhlaWdodCk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCBJRDNEMTJSZXNv dXJjZV9Vbm1hcChzLT5zdGFnaW5nX2J1ZmZlciwgMCwgTlVMTCk7Cj4gK8KgwqDCoCB9IGVsc2Ug ewo+ICvCoMKgwqDCoMKgwqDCoCBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJUcmFuc2ZlciBk YXRhIHRvIEFWX1BJWF9GTVRfRDNEMTIgaXMgbm90Cj4gc3VwcG9ydGVkIHlldCFcbiIpOwo+ICvC oMKgwqDCoMKgwqDCoCByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ICvCoMKgwqAgfQo+ICsKPiAr wqDCoMKgIHJldHVybiAwOwo+ICsKPiArZmFpbDoKPiArwqDCoMKgIHJldHVybiBBVkVSUk9SKEVJ TlZBTCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZDNkMTJ2YV9kZXZpY2VfaW5pdChBVkhXRGV2 aWNlQ29udGV4dCAqaHdkZXYpCj4gK3sKPiArwqDCoMKgIEFWRDNEMTJWQURldmljZUNvbnRleHQg KmN0eCA9IGh3ZGV2LT5od2N0eDsKPiArCj4gK8KgwqDCoCBpZiAoIWN0eC0+dmlkZW9fZGV2aWNl KQo+ICvCoMKgwqDCoMKgwqDCoCBEWF9DSEVDSyhJRDNEMTJEZXZpY2VfUXVlcnlJbnRlcmZhY2Uo Y3R4LT5kZXZpY2UsCj4gJklJRF9JRDNEMTJWaWRlb0RldmljZSwgKHZvaWQgKiopJmN0eC0+dmlk ZW9fZGV2aWNlKSk7Cj4gKwo+ICvCoMKgwqAgcmV0dXJuIDA7Cj4gKwo+ICtmYWlsOgo+ICvCoMKg wqAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZDNkMTJ2 YV9kZXZpY2VfdW5pbml0KEFWSFdEZXZpY2VDb250ZXh0ICpod2RldikKPiArewo+ICvCoMKgwqAg QVZEM0QxMlZBRGV2aWNlQ29udGV4dCAqZGV2aWNlX2h3Y3R4ID0gaHdkZXYtPmh3Y3R4Owo+ICsK PiArwqDCoMKgIEQzRDEyX09CSkVDVF9SRUxFQVNFKGRldmljZV9od2N0eC0+dmlkZW9fZGV2aWNl KTsKPiArwqDCoMKgIEQzRDEyX09CSkVDVF9SRUxFQVNFKGRldmljZV9od2N0eC0+ZGV2aWNlKTsK PiArfQo+ICsKPiArc3RhdGljIGludCBkM2QxMnZhX2RldmljZV9jcmVhdGUoQVZIV0RldmljZUNv bnRleHQgKmN0eCwgY29uc3QgY2hhciAqZGV2aWNlLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFWRGljdGlvbmFyeSAq b3B0cywgaW50IGZsYWdzKQo+ICt7Cj4gK8KgwqDCoCBBVkQzRDEyVkFEZXZpY2VDb250ZXh0ICpk ZXZpY2VfaHdjdHggPSBjdHgtPmh3Y3R4Owo+ICsKPiArwqDCoMKgIEhSRVNVTFQgaHI7Cj4gK8Kg wqDCoCBVSU5UIGNyZWF0ZV9mbGFncyA9IDA7Cj4gK8KgwqDCoCBJRFhHSUFkYXB0ZXIgKnBBZGFw dGVyID0gTlVMTDsKPiArCj4gK8KgwqDCoCBpbnQgcmV0Owo+ICvCoMKgwqAgaW50IGlzX2RlYnVn wqDCoMKgwqDCoMKgID0gISFhdl9kaWN0X2dldChvcHRzLCAiZGVidWciLCBOVUxMLCAwKTsKPiAr wqDCoMKgIGRldmljZV9od2N0eC0+c3luYyA9ICEhYXZfZGljdF9nZXQob3B0cywgInN5bmMiLMKg IE5VTEwsIDApOwo+ICsKPiArwqDCoMKgIGlmICgocmV0ID0gZmZfdGhyZWFkX29uY2UoJmZ1bmN0 aW9uc19sb2FkZWQsIGxvYWRfZnVuY3Rpb25zKSkgIT0gMCkKPiArwqDCoMKgwqDCoMKgwqAgcmV0 dXJuIEFWRVJST1JfVU5LTk9XTjsKPiArCj4gK8KgwqDCoCBpZiAoaXNfZGVidWcpIHsKPiArwqDC oMKgwqDCoMKgwqAgSUQzRDEyRGVidWcgKnBEZWJ1ZzsKPiArwqDCoMKgwqDCoMKgwqAgaWYgKGQz ZDEydmFfZ2V0X2RlYnVnX2ludGVyZmFjZSAmJgo+IFNVQ0NFRURFRChkM2QxMnZhX2dldF9kZWJ1 Z19pbnRlcmZhY2UoJklJRF9JRDNEMTJEZWJ1ZywgJnBEZWJ1ZykpKSB7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgY3JlYXRlX2ZsYWdzIHw9IERYR0lfQ1JFQVRFX0ZBQ1RPUllfREVCVUc7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgSUQzRDEyRGVidWdfRW5hYmxlRGVidWdMYXllcihwRGVi dWcpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEQzRDEyX09CSkVDVF9SRUxFQVNFKHBEZWJ1 Zyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZfbG9nKGN0eCwgQVZfTE9HX0lORk8sICJE M0QxMiBkZWJ1ZyBsYXllciBpcyBlbmFibGVkIVxuIik7Cj4gK8KgwqDCoMKgwqDCoMKgIH0KPiAr wqDCoMKgIH0KPiArCj4gK8KgwqDCoCBpZiAoIWRldmljZV9od2N0eC0+ZGV2aWNlKSB7Cj4gK8Kg wqDCoMKgwqDCoMKgIElEWEdJRmFjdG9yeTIgKnBEWEdJRmFjdG9yeSA9IE5VTEw7Cj4gKwo+ICvC oMKgwqDCoMKgwqDCoCBpZiAoIWQzZDEydmFfY3JlYXRlX2RldmljZSB8fCAhZDNkMTJ2YV9jcmVh dGVfZHhnaV9mYWN0b3J5Mikgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X2xvZyhjdHgs IEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBsb2FkIEQzRDEyIGxpYnJhcnkgb3IgaXRzCj4gZnVu Y3Rpb25zXG4iKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gQVZFUlJPUl9VTktO T1dOOwo+ICvCoMKgwqDCoMKgwqDCoCB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCBociA9IGQzZDEy dmFfY3JlYXRlX2R4Z2lfZmFjdG9yeTIoY3JlYXRlX2ZsYWdzLCAmSUlEX0lEWEdJRmFjdG9yeTIs Cj4gKHZvaWQgKiopJnBEWEdJRmFjdG9yeSk7Cj4gK8KgwqDCoMKgwqDCoMKgIGlmIChTVUNDRUVE RUQoaHIpKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50IGFkYXB0ZXIgPSBkZXZpY2Ug PyBhdG9pKGRldmljZSkgOiAwOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChGQUlMRUQo SURYR0lGYWN0b3J5Ml9FbnVtQWRhcHRlcnMocERYR0lGYWN0b3J5LCBhZGFwdGVyLAo+ICZwQWRh cHRlcikpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcEFkYXB0ZXIgPSBOVUxM Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIElEWEdJRmFjdG9yeTJfUmVsZWFzZShwRFhHSUZh Y3RvcnkpOwo+ICvCoMKgwqDCoMKgwqDCoCB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCBpZiAocEFk YXB0ZXIpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBEWEdJX0FEQVBURVJfREVTQyBkZXNj Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGhyID0gSURYR0lBZGFwdGVyMl9HZXREZXNjKHBB ZGFwdGVyLCAmZGVzYyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKCFGQUlMRUQoaHIp KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9sb2coY3R4LCBBVl9MT0df SU5GTywgIlVzaW5nIGRldmljZSAlMDR4OiUwNHggKCVscykuXG4iLAo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZXNjLlZlbmRvcklkLCBkZXNjLkRldmlj ZUlkLCBkZXNjLkRlc2NyaXB0aW9uKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4gK8Kg wqDCoMKgwqDCoMKgIH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgIGhyID0gZDNkMTJ2YV9jcmVhdGVf ZGV2aWNlKChJVW5rbm93biAqKXBBZGFwdGVyLAo+IEQzRF9GRUFUVVJFX0xFVkVMXzEyXzAsICZJ SURfSUQzRDEyRGV2aWNlLCAmZGV2aWNlX2h3Y3R4LT5kZXZpY2UpOwo+ICvCoMKgwqDCoMKgwqDC oCBEM0QxMl9PQkpFQ1RfUkVMRUFTRShwQWRhcHRlcik7Cj4gK8KgwqDCoMKgwqDCoMKgIGlmIChG QUlMRUQoaHIpKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZfbG9nKGN0eCwgQVZfTE9H X0VSUk9SLCAiRmFpbGVkIHRvIGNyZWF0ZSBEaXJlY3RYM0QgMTIgZGV2aWNlCj4gKCVseClcbiIs IChsb25nKWhyKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gQVZFUlJPUl9VTktO T1dOOwo+ICvCoMKgwqDCoMKgwqDCoCB9Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAgcmV0dXJu IDA7Cj4gK30KPiArCj4gK2NvbnN0IEhXQ29udGV4dFR5cGUgZmZfaHdjb250ZXh0X3R5cGVfZDNk MTJ2YSA9IHsKPiArwqDCoMKgIC50eXBlwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgID0gQVZfSFdERVZJQ0VfVFlQRV9EM0QxMlZBLAo+ICvCoMKgwqAgLm5hbWXCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSAiRDNEMTJWQSIsCj4gKwo+ICvCoMKgwqAgLmRl dmljZV9od2N0eF9zaXplwqDCoMKgwqDCoCA9IHNpemVvZihBVkQzRDEyVkFEZXZpY2VDb250ZXh0 KSwKPiArwqDCoMKgIC5mcmFtZXNfaHdjdHhfc2l6ZcKgwqDCoMKgwqAgPSBzaXplb2YoQVZEM0Qx MlZBRnJhbWVzQ29udGV4dCksCj4gK8KgwqDCoCAuZnJhbWVzX3ByaXZfc2l6ZcKgwqDCoMKgwqDC oCA9IHNpemVvZihEM0QxMlZBRnJhbWVzQ29udGV4dCksCj4gKwo+ICvCoMKgwqAgLmRldmljZV9j cmVhdGXCoMKgwqDCoMKgwqDCoMKgwqAgPSBkM2QxMnZhX2RldmljZV9jcmVhdGUsCj4gK8KgwqDC oCAuZGV2aWNlX2luaXTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gZDNkMTJ2YV9kZXZpY2VfaW5p dCwKPiArwqDCoMKgIC5kZXZpY2VfdW5pbml0wqDCoMKgwqDCoMKgwqDCoMKgID0gZDNkMTJ2YV9k ZXZpY2VfdW5pbml0LAo+ICvCoMKgwqAgLmZyYW1lc19nZXRfY29uc3RyYWludHMgPSBkM2QxMnZh X2ZyYW1lc19nZXRfY29uc3RyYWludHMsCj4gK8KgwqDCoCAuZnJhbWVzX2luaXTCoMKgwqDCoMKg wqDCoMKgwqDCoMKgID0gZDNkMTJ2YV9mcmFtZXNfaW5pdCwKPiArwqDCoMKgIC5mcmFtZXNfdW5p bml0wqDCoMKgwqDCoMKgwqDCoMKgID0gZDNkMTJ2YV9mcmFtZXNfdW5pbml0LAo+ICvCoMKgwqAg LmZyYW1lc19nZXRfYnVmZmVywqDCoMKgwqDCoCA9IGQzZDEydmFfZ2V0X2J1ZmZlciwKPiArwqDC oMKgIC50cmFuc2Zlcl9nZXRfZm9ybWF0c8KgwqAgPSBkM2QxMnZhX3RyYW5zZmVyX2dldF9mb3Jt YXRzLAo+ICvCoMKgwqAgLnRyYW5zZmVyX2RhdGFfdG/CoMKgwqDCoMKgwqAgPSBkM2QxMnZhX3Ry YW5zZmVyX2RhdGEsCj4gK8KgwqDCoCAudHJhbnNmZXJfZGF0YV9mcm9twqDCoMKgwqAgPSBkM2Qx MnZhX3RyYW5zZmVyX2RhdGEsCj4gKwo+ICvCoMKgwqAgLnBpeF9mbXRzwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCA9IChjb25zdCBlbnVtIEFWUGl4ZWxGb3JtYXRbXSl7IEFWX1BJWF9GTVRf RDNEMTIsCj4gQVZfUElYX0ZNVF9OT05FIH0sCj4gK307Cj4gZGlmZiAtLWdpdCBhL2xpYmF2dXRp bC9od2NvbnRleHRfZDNkMTJ2YS5oIGIvbGliYXZ1dGlsL2h3Y29udGV4dF9kM2QxMnZhLmgKPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAuLjA2MGY2OTJkMTEKPiAtLS0g L2Rldi9udWxsCj4gKysrIGIvbGliYXZ1dGlsL2h3Y29udGV4dF9kM2QxMnZhLmgKPiBAQCAtMCww ICsxLDE2NyBAQAo+ICsvKgo+ICsgKiBEaXJlY3QzRCAxMiBIVyBhY2NlbGVyYXRpb24uCj4gKyAq Cj4gKyAqIGNvcHlyaWdodCAoYykgMjAyMi0yMDIzIFd1IEppYW5odWEgPHRvcXN4d0BvdXRsb29r LmNvbT4KPiArICoKPiArICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgo+ICsgKgo+ICsg KiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y Cj4gKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh bCBQdWJsaWMKPiArICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyCj4gKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAo YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLsKgIFNlZSB0aGUgR05VCj4gKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCj4gKyAqCj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBhbG9uZyB3 aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQo+ICsgKiBGb3Vu ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B IDAyMTEwLTEzMDEKPiBVU0EKPiArICovCj4gKwo+ICsjaWZuZGVmIEFWVVRJTF9IV0NPTlRFWFRf RDNEMTJWQV9ICj4gKyNkZWZpbmUgQVZVVElMX0hXQ09OVEVYVF9EM0QxMlZBX0gKPiArCj4gKy8q Kgo+ICsgKiBAZmlsZQo+ICsgKiBBbiBBUEktc3BlY2lmaWMgaGVhZGVyIGZvciBBVl9IV0RFVklD RV9UWVBFX0QzRDEyVkEuCj4gKyAqCj4gKyAqLwo+ICsjaW5jbHVkZSA8c3RkaW50Lmg+Cj4gKyNp bmNsdWRlIDxpbml0Z3VpZC5oPgo+ICsjaW5jbHVkZSA8ZDNkMTIuaD4KPiArI2luY2x1ZGUgPGQz ZDEydmlkZW8uaD4KPiArCj4gKy8qKgo+ICsgKiBAYnJpZWYgVGhpcyBzdHJ1Y3QgaXMgYWxsb2Nh dGVkIGFzIEFWSFdEZXZpY2VDb250ZXh0Lmh3Y3R4Cj4gKyAqCj4gKyAqLwo+ICt0eXBlZGVmIHN0 cnVjdCBBVkQzRDEyVkFEZXZpY2VDb250ZXh0IHsKPiArwqDCoMKgIC8qKgo+ICvCoMKgwqDCoCAq IERldmljZSB1c2VkIGZvciBvYmplY3RzIGNyZWF0aW9uIGFuZCBhY2Nlc3MuIFRoaXMgY2FuIGFs c28gYmUKPiArwqDCoMKgwqAgKiB1c2VkIHRvIHNldCB0aGUgbGliYXZjb2RlYyBkZWNvZGluZyBk ZXZpY2UuCj4gK8KgwqDCoMKgICoKPiArwqDCoMKgwqAgKiBDYW4gYmUgc2V0IGJ5IHRoZSB1c2Vy LiBUaGlzIGlzIHRoZSBvbmx5IG1hbmRhdG9yeSBmaWVsZCAtIHRoZSBvdGhlcgo+ICvCoMKgwqDC oCAqIGRldmljZSBjb250ZXh0IGZpZWxkcyBhcmUgc2V0IGZyb20gdGhpcyBhbmQgYXJlIGF2YWls YWJsZSBmb3IKPiBjb252ZW5pZW5jZS4KPiArwqDCoMKgwqAgKgo+ICvCoMKgwqDCoCAqIERlYWxs b2NhdGluZyB0aGUgQVZIV0RldmljZUNvbnRleHQgd2lsbCBhbHdheXMgcmVsZWFzZSB0aGlzIGlu dGVyZmFjZSwKPiArwqDCoMKgwqAgKiBhbmQgaXQgZG9lcyBub3QgbWF0dGVyIHdoZXRoZXIgaXQg d2FzIHVzZXItYWxsb2NhdGVkLgo+ICvCoMKgwqDCoCAqLwo+ICvCoMKgwqAgSUQzRDEyRGV2aWNl ICpkZXZpY2U7Cj4gKwo+ICvCoMKgwqAgLyoqCj4gK8KgwqDCoMKgICogSWYgdW5zZXQsIHRoaXMg d2lsbCBiZSBzZXQgZnJvbSB0aGUgZGV2aWNlIGZpZWxkIG9uIGluaXQuCj4gK8KgwqDCoMKgICoK PiArwqDCoMKgwqAgKiBEZWFsbG9jYXRpbmcgdGhlIEFWSFdEZXZpY2VDb250ZXh0IHdpbGwgYWx3 YXlzIHJlbGVhc2UgdGhpcyBpbnRlcmZhY2UsCj4gK8KgwqDCoMKgICogYW5kIGl0IGRvZXMgbm90 IG1hdHRlciB3aGV0aGVyIGl0IHdhcyB1c2VyLWFsbG9jYXRlZC4KPiArwqDCoMKgwqAgKi8KPiAr wqDCoMKgIElEM0QxMlZpZGVvRGV2aWNlICp2aWRlb19kZXZpY2U7Cj4gKwo+ICvCoMKgwqAgLyoq Cj4gK8KgwqDCoMKgICogU3BlY2lmZWQgYnkgc3luYz0xIHdoZW4gaW5pdCBkM2QxMnZhCj4gK8Kg wqDCoMKgICoKPiArwqDCoMKgwqAgKiBFeGVjdXRlIGNvbW1hbmRzIGFzIHN5bmMgbW9kZQo+ICvC oMKgwqDCoCAqLwo+ICvCoMKgwqAgaW50IHN5bmM7Cj4gK30gQVZEM0QxMlZBRGV2aWNlQ29udGV4 dDsKPiArCj4gKy8qKgo+ICsgKiBAYnJpZWYgVGhpcyBzdHJ1Y3QgaXMgdXNlZCB0byBzeW5jIGQz ZDEyIGV4ZWN1dGlvbgo+ICsgKgo+ICsgKi8KPiArdHlwZWRlZiBzdHJ1Y3QgQVZEM0QxMlZBU3lu Y0NvbnRleHQgewo+ICvCoMKgwqAgLyoqCj4gK8KgwqDCoMKgICogRDNEMTIgZmVuY2Ugb2JqZWN0 Cj4gK8KgwqDCoMKgICovCj4gK8KgwqDCoCBJRDNEMTJGZW5jZSAqZmVuY2U7Cj4gKwo+ICvCoMKg wqAgLyoqCj4gK8KgwqDCoMKgICogQSBoYW5kbGUgdG8gdGhlIGV2ZW50IG9iamVjdAo+ICvCoMKg wqDCoCAqLwo+ICvCoMKgwqAgSEFORExFIGV2ZW50Owo+ICsKPiArwqDCoMKgIC8qKgo+ICvCoMKg wqDCoCAqIFRoZSBmZW5jZSB2YWx1ZSB1c2VkIGZvciBzeW5jCj4gK8KgwqDCoMKgICovCj4gK8Kg wqDCoCB1aW50NjRfdCBmZW5jZV92YWx1ZTsKPiArfSBBVkQzRDEyVkFTeW5jQ29udGV4dDsKPiAr Cj4gKy8qKgo+ICsgKiBAYnJpZWYgRDNEMTIgZnJhbWUgZGVzY3JpcHRvciBmb3IgcG9vbCBhbGxv Y2F0aW9uLgo+ICsgKgo+ICsgKi8KPiArdHlwZWRlZiBzdHJ1Y3QgQVZEM0QxMkZyYW1lRGVzY3Jp cHRvciB7Cj4gK8KgwqDCoCAvKioKPiArwqDCoMKgwqAgKiBUaGUgdGV4dHVyZSBpbiB3aGljaCB0 aGUgZnJhbWUgaXMgbG9jYXRlZC4gVGhlIHJlZmVyZW5jZSBjb3VudCBpcwo+ICvCoMKgwqDCoCAq IG1hbmFnZWQgYnkgdGhlIEFWQnVmZmVyUmVmLCBhbmQgZGVzdHJveWluZyB0aGUgcmVmZXJlbmNl IHdpbGwgcmVsZWFzZQo+ICvCoMKgwqDCoCAqIHRoZSBpbnRlcmZhY2UuCj4gK8KgwqDCoMKgICoK PiArwqDCoMKgwqAgKiBOb3JtYWxseSBzdG9yZWQgaW4gQVZGcmFtZS5kYXRhWzBdLgo+ICvCoMKg wqDCoCAqLwo+ICvCoMKgwqAgSUQzRDEyUmVzb3VyY2UgKnRleHR1cmU7Cj4gKwo+ICvCoMKgwqAg LyoqCj4gK8KgwqDCoMKgICogVGhlIGluZGV4IGludG8gdGhlIGFycmF5IHRleHR1cmUgZWxlbWVu dCByZXByZXNlbnRpbmcgdGhlIGZyYW1lCj4gK8KgwqDCoMKgICoKPiArwqDCoMKgwqAgKiBOb3Jt YWxseSBzdG9yZWQgaW4gQVZGcmFtZS5kYXRhWzFdIChjYXN0IGZyb20gaW50cHRyX3QpLgo+ICvC oMKgwqDCoCAqLwo+ICvCoMKgwqAgaW50cHRyX3QgaW5kZXg7Cj4gKwo+ICvCoMKgwqAgLyoqCj4g K8KgwqDCoMKgICogVGhlIHN5bmMgY29udGV4dCBmb3IgdGhlIHRleHR1cmUKPiArwqDCoMKgwqAg Kgo+ICvCoMKgwqDCoCAqIFVzZSBhdl9kM2QxMnZhX3dhaXRfaWRsZShzeW5jX2N0eCkgdG8gZW5z dXJlIHRoZSBkZWNvZGluZyBvciBlbmNvZGluZwo+IGhhdmUgYmVlbiBmaW5pc2VkCj4gK8KgwqDC oMKgICogQHNlZToKPiBodHRwczovL2xlYXJuLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG93cy93 aW4zMi9tZWRmb3VuZC9kaXJlY3QzZC0xMi12aWRlby1vdmVydmlldyNkaXJlY3R4LTEyLWZlbmNl cwo+ICvCoMKgwqDCoCAqCj4gK8KgwqDCoMKgICogTm9ybWFsbHkgc3RvcmVkIGluIEFWRnJhbWUu ZGF0YVsyXS4KPiArwqDCoMKgwqAgKi8KPiArwqDCoMKgIEFWRDNEMTJWQVN5bmNDb250ZXh0ICpz eW5jX2N0eDsKPiArfSBBVkQzRDEyRnJhbWVEZXNjcmlwdG9yOwo+ICsKPiArLyoqCj4gKyAqIEBi cmllZiBUaGlzIHN0cnVjdCBpcyBhbGxvY2F0ZWQgYXMgQVZIV0ZyYW1lc0NvbnRleHQuaHdjdHgK PiArICoKPiArICovCj4gK3R5cGVkZWYgc3RydWN0IEFWRDNEMTJWQUZyYW1lc0NvbnRleHQgewo+ ICvCoMKgwqAgLyoqCj4gK8KgwqDCoMKgICogVGhlIHNhbWUgaW1wbGVtZW50YXRpb24gYXMgZDNk MTF2YQo+ICvCoMKgwqDCoCAqIFRoaXMgZmllbGQgaXMgbm90IGFibGUgdG8gYmUgdXNlci1hbGxv Y2F0ZWQgYXQgdGhlIHByZXNlbnQuCj4gK8KgwqDCoMKgICovCj4gK8KgwqDCoCBBVkQzRDEyRnJh bWVEZXNjcmlwdG9yICp0ZXh0dXJlX2luZm9zOwo+ICt9IEFWRDNEMTJWQUZyYW1lc0NvbnRleHQ7 Cj4gKwo+ICsvKioKPiArICogQGJyaWVmIE1hcCBzdyBwaXhlbCBmb3JtYXQgdG8gZDNkMTIgZm9y bWF0Cj4gKyAqCj4gKyAqIEByZXR1cm4gZDNkMTIgc3BlY2lmaWVkIGZvcm1hdAo+ICsgKi8KPiAr RFhHSV9GT1JNQVQgYXZfZDNkMTJ2YV9tYXBfc3dfdG9faHdfZm9ybWF0KGVudW0gQVZQaXhlbEZv cm1hdCBwaXhfZm10KTsKPiArCj4gKy8qKgo+ICsgKiBAYnJpZWYgQWxsb2NhdGUgYW4gQVZEM0Qx MlZBU3luY0NvbnRleHQKPiArICoKPiArICogQHJldHVybiBFcnJvciBjb2RlIChyZXQgPCAwIGlm IGZhaWxlZCkKPiArICovCj4gK2ludCBhdl9kM2QxMnZhX3N5bmNfY29udGV4dF9hbGxvYyhBVkQz RDEyVkFEZXZpY2VDb250ZXh0ICpjdHgsCj4gQVZEM0QxMlZBU3luY0NvbnRleHQgKipzeW5jX2N0 eCk7Cj4gKwo+ICsvKioKPiArICogQGJyaWVmIEZyZWUgYW4gQVZEM0QxMlZBU3luY0NvbnRleHQK PiArICovCj4gK3ZvaWQgYXZfZDNkMTJ2YV9zeW5jX2NvbnRleHRfZnJlZShBVkQzRDEyVkFTeW5j Q29udGV4dCAqKnN5bmNfY3R4KTsKPiArCj4gKy8qKgo+ICsgKiBAYnJpZWYgV2FpdCBmb3IgdGhl IHN5bmMgY29udGV4dCB0byB0aGUgaWRsZSBzdGF0ZQo+ICsgKgo+ICsgKiBAcmV0dXJuIEVycm9y IGNvZGUgKHJldCA8IDAgaWYgZmFpbGVkKQo+ICsgKi8KPiAraW50IGF2X2QzZDEydmFfd2FpdF9p ZGxlKEFWRDNEMTJWQVN5bmNDb250ZXh0ICpzeW5jX2N0eCk7Cj4gKwo+ICsvKioKPiArICogQGJy aWVmIFdhaXQgZm9yIGEgc3BlY2lmaWVkIGNvbW1hbmQgcXVldWUgdG8gdGhlIGlkbGUgc3RhdGUK PiArICoKPiArICogQHJldHVybiBFcnJvciBjb2RlIChyZXQgPCAwIGlmIGZhaWxlZCkKPiArICov Cj4gK2ludCBhdl9kM2QxMnZhX3dhaXRfcXVldWVfaWRsZShBVkQzRDEyVkFTeW5jQ29udGV4dCAq c3luY19jdHgsCj4gSUQzRDEyQ29tbWFuZFF1ZXVlICpjb21tYW5kX3F1ZXVlKTsKPiArCj4gKyNl bmRpZiAvKiBBVlVUSUxfSFdDT05URVhUX0QzRDEyVkFfSCAqLwo+IGRpZmYgLS1naXQgYS9saWJh dnV0aWwvaHdjb250ZXh0X2QzZDEydmFfaW50ZXJuYWwuaAo+IGIvbGliYXZ1dGlsL2h3Y29udGV4 dF9kM2QxMnZhX2ludGVybmFsLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAw MDAwMDAuLmVlZWVmODVjZjQKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbGliYXZ1dGlsL2h3Y29u dGV4dF9kM2QxMnZhX2ludGVybmFsLmgKPiBAQCAtMCwwICsxLDU0IEBACj4gKy8qCj4gKyAqIERp cmVjdDNEIDEyIEhXIGFjY2VsZXJhdGlvbi4KPiArICoKPiArICogY29weXJpZ2h0IChjKSAyMDIy LTIwMjMgV3UgSmlhbmh1YSA8dG9xc3h3QG91dGxvb2suY29tPgo+ICsgKgo+ICsgKiBUaGlzIGZp bGUgaXMgcGFydCBvZiBGRm1wZWcuCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPiArICogbW9kaWZ5IGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKPiArICog dmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuwqAgU2VlIHRoZSBHTlUKPiArICog TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICoKPiAr ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRl IHRvIHRoZSBGcmVlIFNvZnR3YXJlCj4gKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMQo+IFVTQQo+ICsgKi8K PiArCj4gKyNpZm5kZWYgQVZVVElMX0hXQ09OVEVYVF9EM0QxMlZBX0lOVEVSTkFMX0gKPiArI2Rl ZmluZSBBVlVUSUxfSFdDT05URVhUX0QzRDEyVkFfSU5URVJOQUxfSAo+ICsKPiArLyoqCj4gKyAq IEBkZWYgQ09CSk1BQ1JPUwo+ICsgKgo+ICsgKiBAYnJpZWYgRW5hYmxlIEMgc3R5bGUgaW50ZXJm YWNlIGZvciBEM0QxMgo+ICsgKi8KPiArI2lmbmRlZiBDT0JKTUFDUk9TCj4gKyNkZWZpbmUgQ09C Sk1BQ1JPUwo+ICsjZW5kaWYKPiArCj4gKy8qKgo+ICsgKiBAZGVmIERYX0NIRUNLCj4gKyAqCj4g KyAqIEBicmllZiBBIGNoZWNrIG1hY3JvIHVzZWQgYnkgRDNEMTIgZnVuY3Rpb25zIGhpZ2hseSBm cmVxdWVudGx5Cj4gKyAqLwo+ICsjZGVmaW5lIERYX0NIRUNLKGhyKSBpZiAoRkFJTEVEKGhyKSkg eyBcCj4gK8KgwqDCoCBnb3RvIGZhaWw7IFwKPiArfQo+ICsKPiArLyoqCj4gKyAqIEBkZWYgRDNE MTJfT0JKRUNUX1JFTEVBU0UKPiArICoKPiArICogQGJyaWVmIEEgcmVsZWFzZSBtYWNybyB1c2Vk IGJ5IEQzRDEyIG9iamVjdHMgaGlnaGx5IGZyZXF1ZW50bHkKPiArICovCj4gKyNkZWZpbmUgRDNE MTJfT0JKRUNUX1JFTEVBU0UocEludGVyZmFjZSkgaWYgKHBJbnRlcmZhY2UpIHsgXAo+ICvCoMKg wqAgSVVua25vd25fUmVsZWFzZSgoSVVua25vd24gKilwSW50ZXJmYWNlKTsgXAo+ICvCoMKgwqAg cEludGVyZmFjZSA9IE5VTEw7IFwKPiArfQo+ICsKPiArI2VuZGlmIC8qIEFWVVRJTF9IV0NPTlRF WFRfRDNEMTJWQV9JTlRFUk5BTF9IICovCj4gXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCj4g ZGlmZiAtLWdpdCBhL2xpYmF2dXRpbC9od2NvbnRleHRfaW50ZXJuYWwuaCBiL2xpYmF2dXRpbC9o d2NvbnRleHRfaW50ZXJuYWwuaAo+IGluZGV4IGU2MjY2NDk0YWMuLjRkZjUxNmVlNmEgMTAwNjQ0 Cj4gLS0tIGEvbGliYXZ1dGlsL2h3Y29udGV4dF9pbnRlcm5hbC5oCj4gKysrIGIvbGliYXZ1dGls L2h3Y29udGV4dF9pbnRlcm5hbC5oCj4gQEAgLTE2NSw2ICsxNjUsNyBAQCBpbnQgZmZfaHdmcmFt ZV9tYXBfcmVwbGFjZShBVkZyYW1lICpkc3QsIGNvbnN0IEFWRnJhbWUKPiAqc3JjKTsKPiDCoAo+ IMKgZXh0ZXJuIGNvbnN0IEhXQ29udGV4dFR5cGUgZmZfaHdjb250ZXh0X3R5cGVfY3VkYTsKPiDC oGV4dGVybiBjb25zdCBIV0NvbnRleHRUeXBlIGZmX2h3Y29udGV4dF90eXBlX2QzZDExdmE7Cj4g K2V4dGVybiBjb25zdCBIV0NvbnRleHRUeXBlIGZmX2h3Y29udGV4dF90eXBlX2QzZDEydmE7Cj4g wqBleHRlcm4gY29uc3QgSFdDb250ZXh0VHlwZSBmZl9od2NvbnRleHRfdHlwZV9kcm07Cj4gwqBl eHRlcm4gY29uc3QgSFdDb250ZXh0VHlwZSBmZl9od2NvbnRleHRfdHlwZV9keHZhMjsKPiDCoGV4 dGVybiBjb25zdCBIV0NvbnRleHRUeXBlIGZmX2h3Y29udGV4dF90eXBlX29wZW5jbDsKPiBkaWZm IC0tZ2l0IGEvbGliYXZ1dGlsL3BpeGRlc2MuYyBiL2xpYmF2dXRpbC9waXhkZXNjLmMKPiBpbmRl eCBlMWUwZGQyYTllLi4wOWZjYTVlZjE5IDEwMDY0NAo+IC0tLSBhL2xpYmF2dXRpbC9waXhkZXNj LmMKPiArKysgYi9saWJhdnV0aWwvcGl4ZGVzYy5jCj4gQEAgLTIyODMsNiArMjI4MywxMCBAQCBz dGF0aWMgY29uc3QgQVZQaXhGbXREZXNjcmlwdG9yCj4gYXZfcGl4X2ZtdF9kZXNjcmlwdG9yc1tB Vl9QSVhfRk1UX05CXSA9IHsKPiDCoMKgwqDCoMKgwqDCoMKgIC5uYW1lID0gImQzZDExIiwKPiDC oMKgwqDCoMKgwqDCoMKgIC5mbGFncyA9IEFWX1BJWF9GTVRfRkxBR19IV0FDQ0VMLAo+IMKgwqDC oMKgIH0sCj4gK8KgwqDCoCBbQVZfUElYX0ZNVF9EM0QxMl0gPSB7Cj4gK8KgwqDCoMKgwqDCoMKg IC5uYW1lID0gImQzZDEyIiwKPiArwqDCoMKgwqDCoMKgwqAgLmZsYWdzID0gQVZfUElYX0ZNVF9G TEFHX0hXQUNDRUwsCj4gK8KgwqDCoCB9LAo+IMKgwqDCoMKgIFtBVl9QSVhfRk1UX0dCUlBGMzJC RV0gPSB7Cj4gwqDCoMKgwqDCoMKgwqDCoCAubmFtZSA9ICJnYnJwZjMyYmUiLAo+IMKgwqDCoMKg wqDCoMKgwqAgLm5iX2NvbXBvbmVudHMgPSAzLAo+IGRpZmYgLS1naXQgYS9saWJhdnV0aWwvcGl4 Zm10LmggYi9saWJhdnV0aWwvcGl4Zm10LmgKPiBpbmRleCA2M2UwN2JhNjRmLi4xZjBhYjJhMjNj IDEwMDY0NAo+IC0tLSBhL2xpYmF2dXRpbC9waXhmbXQuaAo+ICsrKyBiL2xpYmF2dXRpbC9waXhm bXQuaAo+IEBAIC00MjYsNiArNDI2LDE1IEBAIGVudW0gQVZQaXhlbEZvcm1hdCB7Cj4gwqDCoMKg wqAgQVZfUElYX0ZNVF9QNDEyQkUswqDCoMKgwqDCoCAvLy88IGludGVybGVhdmVkIGNocm9tYSBZ VVYgNDo0OjQsIDM2YnBwLCBkYXRhIGluCj4gdGhlIGhpZ2ggYml0cywgYmlnLWVuZGlhbgo+IMKg wqDCoMKgIEFWX1BJWF9GTVRfUDQxMkxFLMKgwqDCoMKgwqAgLy8vPCBpbnRlcmxlYXZlZCBjaHJv bWEgWVVWIDQ6NDo0LCAzNmJwcCwgZGF0YSBpbgo+IHRoZSBoaWdoIGJpdHMsIGxpdHRsZS1lbmRp YW4KPiDCoAo+ICvCoMKgwqAgLyoqCj4gK8KgwqDCoMKgICogSGFyZHdhcmUgc3VyZmFjZXMgZm9y IERpcmVjdDNEIDEyLgo+ICvCoMKgwqDCoCAqCj4gK8KgwqDCoMKgICogZGF0YVswXSBjb250YWlu cyBhIElEM0QxMlJlc291cmNlIHBvaW50ZXIuCj4gK8KgwqDCoMKgICogZGF0YVsxXSBjb250YWlu cyB0aGUgcmVzb3VyY2UgYXJyYXkgaW5kZXggb2YgdGhlIGZyYW1lIGFzIGludHB0cl90Lgo+ICvC oMKgwqDCoCAqIGRhdGFbMl0gY29udGFpbnMgdGhlIHN5bmMgY29udGV4dCBmb3IgY3VycmVudCBy ZXNvdXJjZQo+ICvCoMKgwqDCoCAqLwo+ICvCoMKgwqAgQVZfUElYX0ZNVF9EM0QxMiwKPiArCj4g wqDCoMKgwqAgQVZfUElYX0ZNVF9OQsKgwqDCoMKgwqDCoMKgwqAgLy8vPCBudW1iZXIgb2YgcGl4 ZWwgZm9ybWF0cywgRE8gTk9UIFVTRSBUSElTIGlmCj4geW91IHdhbnQgdG8gbGluayB3aXRoIHNo YXJlZCBsaWJhdiogYmVjYXVzZSB0aGUgbnVtYmVyIG9mIGZvcm1hdHMgbWlnaHQgZGlmZmVyCj4g YmV0d2VlbiB2ZXJzaW9ucwo+IMKgfTsKPiDCoAo+IGRpZmYgLS1naXQgYS9saWJhdnV0aWwvdGVz dHMvaHdkZXZpY2UuYyBiL2xpYmF2dXRpbC90ZXN0cy9od2RldmljZS5jCj4gaW5kZXggYzU3NTg2 NjEzYS4uOWQ3OTY0ZjllZSAxMDA2NDQKPiAtLS0gYS9saWJhdnV0aWwvdGVzdHMvaHdkZXZpY2Uu Ywo+ICsrKyBiL2xpYmF2dXRpbC90ZXN0cy9od2RldmljZS5jCj4gQEAgLTEzNyw2ICsxMzcsOCBA QCBzdGF0aWMgY29uc3Qgc3RydWN0IHsKPiDCoMKgwqDCoMKgwqAgeyAiMCIsICIxIiwgIjIiIH0g fSwKPiDCoMKgwqDCoCB7IEFWX0hXREVWSUNFX1RZUEVfRDNEMTFWQSwKPiDCoMKgwqDCoMKgwqAg eyAiMCIsICIxIiwgIjIiIH0gfSwKPiArwqDCoMKgIHsgQVZfSFdERVZJQ0VfVFlQRV9EM0QxMlZB LAo+ICvCoMKgwqDCoMKgIHsgIjAiLCAiMSIsICIyIiB9IH0sCj4gwqDCoMKgwqAgeyBBVl9IV0RF VklDRV9UWVBFX09QRU5DTCwKPiDCoMKgwqDCoMKgwqAgeyAiMC4wIiwgIjAuMSIsICIxLjAiLCAi MS4xIiB9IH0sCj4gwqDCoMKgwqAgeyBBVl9IV0RFVklDRV9UWVBFX1ZBQVBJLAoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVsIG1haWxp bmcgbGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1h bi9saXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3Zl LCBvciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAi dW5zdWJzY3JpYmUiLgo=