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 31B2545435 for ; Mon, 26 Feb 2024 10:22:56 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 858D068C7B8; Mon, 26 Feb 2024 12:22:52 +0200 (EET) Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.9]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 120F468BDBC for ; Mon, 26 Feb 2024 12:22:44 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1708942970; x=1740478970; h=from:to:subject:date:message-id:references:in-reply-to: content-transfer-encoding:mime-version; bh=OuLIypOYx6qiwPrMFdk+lyqZO74DlkMp4lJgFDbWVeg=; b=mddsI7GCmKTro/dFcDqkRPHJx68QE1NsOJToxzwh2VvRT474nfbS3N5Y vXd8tbG41RDr1F3yFbQs4oNFYSLUIGZd0JgSiKydohP1XMVnYJSofQnaN /FEovH5a1qFOpHFWzUu8L8CcCFba+jB6IH5q07oQUol0VhD4cvqit9I5T dm+sopqTaBVsNUhs5neLR9HmklR7xT+Jdhy/1dRAiusQFPPwNHh5VHKLi ShQsA2zurZT5Gn+byO+/omW6DKjlH0vMStQoyONmJ/AfsVx3BK9wHg5BV c7Rx9Ne35kpqYUxPzuIGW1AVK1Zy6IbD8k6Cqe0xIOsd9yPiHGAnf41g2 w==; X-IronPort-AV: E=McAfee;i="6600,9927,10995"; a="13914639" X-IronPort-AV: E=Sophos;i="6.06,185,1705392000"; d="scan'208";a="13914639" Received: from orviesa002.jf.intel.com ([10.64.159.142]) by fmvoesa103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Feb 2024 02:22:15 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.06,185,1705392000"; d="scan'208";a="37409314" Received: from fmsmsx602.amr.corp.intel.com ([10.18.126.82]) by orviesa002.jf.intel.com with ESMTP/TLS/AES256-GCM-SHA384; 26 Feb 2024 02:22:15 -0800 Received: from fmsmsx610.amr.corp.intel.com (10.18.126.90) 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.35; Mon, 26 Feb 2024 02:22:13 -0800 Received: from FMSEDG603.ED.cps.intel.com (10.1.192.133) 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.35 via Frontend Transport; Mon, 26 Feb 2024 02:22:13 -0800 Received: from NAM02-DM3-obe.outbound.protection.outlook.com (104.47.56.41) by edgegateway.intel.com (192.55.55.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.35; Mon, 26 Feb 2024 02:21:58 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cHlPjnLpmgSIRQAARjTxEGUiKiK31qF5CckZ6ev8+x0shFrzLlMCy4/NMnQ1wtLC+8yGujwMH2q65KrBUF1pI24Jf/5kFbZmFvejh9l9h9phmbfqZTpGY3675Mrqdm1A/fkpRvw7mlRejHIw6AwT7pAViyHOgER6eYRHoDTepo1iK/0yBLmehGmZYP9zCjlyZ8vyKytsb3eThh4t3RGKQMd68D0DtRxEW21ejvWmVxFfDVdCLzv4Cu2ngbvdoqIq3X+MlNQ3UTJcBGwx7See0pWHZDlZj223ZOYfykOPh1neLsO7QqZakcyD8/DEX7Jw2P2GCSMmyw1ipOCWK0KWBQ== 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=OuLIypOYx6qiwPrMFdk+lyqZO74DlkMp4lJgFDbWVeg=; b=StF+pOZImTb81IGpf4q5hqo5n6NTfzMDFYR9Hq0OVU287/fmYLSBm57vRQSM//HIBuf2CmChsshnXURxMQev3cPEN/pY24d0doVOYOufva7NAnfSYD/1NZsM7Tn8wbliVJC51q+EMNOzfKsLWFPt0pZe61j1DlkSP33m0ytJQ6DWJsa6sRboiXtih8acnPFLboyuV3K3/n7VUFTvL7fS6np4ji5Wnuzff+97ijXQDdCIfFzrVFtWzEj20XiFD9byZ295KQal8wEarJFypckA0UCHkU9xs+ZFOG0WuhM3/daUh6t/ATppHQo9zYQ+OQMuNSqGARcwwCYD6Rrzn264ZA== 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 CH3PR11MB8659.namprd11.prod.outlook.com (2603:10b6:610:1cf::5) by BN9PR11MB5371.namprd11.prod.outlook.com (2603:10b6:408:11c::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7339.23; Mon, 26 Feb 2024 10:21:55 +0000 Received: from CH3PR11MB8659.namprd11.prod.outlook.com ([fe80::4c7a:ec78:f0:ac0a]) by CH3PR11MB8659.namprd11.prod.outlook.com ([fe80::4c7a:ec78:f0:ac0a%3]) with mapi id 15.20.7339.022; Mon, 26 Feb 2024 10:21:55 +0000 From: "Wu, Tong1" To: FFmpeg development discussions and patches Thread-Topic: [FFmpeg-devel] [PATCH v5 8/9] avcodec: add D3D12VA hardware HEVC encoder Thread-Index: AQHaYrCMhYYTTO525keEyRHGuV83C7EcYRnw Date: Mon, 26 Feb 2024 10:21:54 +0000 Message-ID: References: <20240218084529.554-1-tong1.wu@intel.com> <20240218084529.554-8-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: CH3PR11MB8659:EE_|BN9PR11MB5371:EE_ x-ms-office365-filtering-correlation-id: 22305a1a-01a4-4bc5-2efa-08dc36b4c190 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: AWM/IsQDLfjlelR1hGpzFw+EjZ9aTJpul8c4KrVOZIaKGq5f5sVNFg/0VYXUeF+DVnnf08K2Uf5uLYuNPWKyrnTNx3OVtmuGex4rHqaka/5LQhne7imUm3dz6t8YX+T/yeB2A9X0nSkpTiIN0dSO6pT/BHab9NGoECSwdiojC3h+Xu8blNfD/lwTNTDTVGzbfdK5E+1AVtWt5MfZo8Vm1r7YP2b4XthkxdwSEq13ibH0Hdb0jbt7U/m3GtYMhXyyFtKxB3zDz5+FYIhQIftbCyU2zyf+Uu6gxiiHtBHMvAC5nQprOwlyv0A80UavS2Dz/JchApZhfEORkT16sqNHyZ+fufJ/OEvE2DFSPqn6v4F7Qmx5DQBmY0GoFXN3P4eLKPcBKIkPonkX/INEKMTLDDsEr47iAbYGjj73FubRoCuaWpEzfDRUruZ6PUoqDXMB7OjYbDImvD6cs9nuu72+1nRb8NriP94jt/OwrlDJltL5Kg2zwOpdIoboYKUrqpzeLDwszsYJZ2BZshskqEYAbI+IE5Wvy5FmRhnlfyxSxKNL43w1Yh9TNkluuxkEU8VrTj3VvNuTczISX/bGfUxyokov1Jd2ypn0ebOlhf/v8SKwto4Yiyx22WdXx3l5adHhgwCMlzE6Id9g5LucqsD2Ger/hKeYHK4htDwKwkCWdsfTZcHRsXrjmx1B4ig4QZJ0HJ4olJAmSE+hYR5Y502DlQ== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CH3PR11MB8659.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(230273577357003)(38070700009); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?WkFJVE5YbkZ3bEJKTURJeE1McitHdW10bWhPQkFsdXlMY2UyM0lkaUZFMnIx?= =?utf-8?B?MzlKekVlMDBCekQvOTBpMFk3MGJxenBiSmhIUEZ2cDZNY1pFcHp0VmIvT2FF?= =?utf-8?B?c3BtME1wRUdyN1d1NDZCVVgxdGtSTURhYk9vMGxlenIzY2U1ZEppNEdGNWh1?= =?utf-8?B?NXJROVd4aTAxMHE1WGp2K0lqVnpWZXdHcHd3WGl2U01XTmpLbVFmRS9EMVAy?= =?utf-8?B?NGIwMTNXUGJpb3F6QUxJL0xPWUMvQ2ZWRVNsSy9EUTMyMG5rdEVYbldnSkFw?= =?utf-8?B?cS9RMlpmL1l4RE9yUWJpd3pEY3lMMi9OVlYwOVlaZGFnZWNSMEdNSUo1eWUv?= =?utf-8?B?TnZ3Nm9vZXdWTkFxb2d3bVN4ZmJxNjA4SXBmNGcwaXNkb05VbVBsaVpGd1JQ?= =?utf-8?B?MEwycW1PYXBsNURXcVFKcDB0U21NVm9wOGd2UGpkb0lLVEE3dEtYQnNjQ1JB?= =?utf-8?B?K282QjYyMEVqUklVY0pybnNuNHBzRktwd3ZzYnVoWEZ3RzQxRTYxL0tuUVgz?= =?utf-8?B?Q2JqcHdKRnBwek96bUQxQnczMjRhRWJvbVFLazdQemx1Qnd4NmYwWVhVTHVM?= =?utf-8?B?UlFoUS9qSGJNZld0WVhPUU04aEJNQm5ZdDZQcExQQXdDY2h6aXB6UnVvVytr?= =?utf-8?B?YkFtSHhmc0Z4cEdNcHhDanJRK2UzTDhyK2lPMUMzdHU2eHByL0t5VGJvdmhN?= =?utf-8?B?WHU4dWVBb1pFWGpheWVwT2tMQ0tmNVVyaUd1RWwwRkZIVk5TaXZZWUJ3RzdS?= =?utf-8?B?aTZEQ0QrWFl6QnNHd3Z4YkJrK2Z6WUJRM3VyRE1teE5DQWdmSmIyNzMvV0Jj?= =?utf-8?B?VUxqVmdsNmtkbktISlV2TnBtaVBWYktmTXdldk03WEVNS1MwdTlZUHRFYjk5?= =?utf-8?B?VDZLUnNsdTdyY3A3YTVHWVYvMmxqL3FLb296b1NUeVJZZitLRUVMb24yTG5P?= =?utf-8?B?bUZ2bUdZZVdSMGFLQjlUVWp5Y3pDWmdWU1RidWZjRm1Qa0ZYaVRhVnVKbGVI?= =?utf-8?B?WlJNcXB5RG9WbUVsT3ZLUW5NZnhvSUVPZ1ptSkVzQndxY0lpSy9Wc2dLaFlu?= =?utf-8?B?U0tDcWdEbG5iWWtMTXVCRXVhanY1MEtCUVlDSkJ6WGlMam5ZdURpRmppL2px?= =?utf-8?B?ZXhWOTllaHFzK3cvS0xqLy8wcDd5Y2Z2dXJlam9QNlkwVW9IdEFtT1ZMQzVa?= =?utf-8?B?bEhjK2JsRlFaZVBxUS84ei91Q3hucTBncTd0RnlGZkcrTkxnakxqZUsyMFB0?= =?utf-8?B?aHVvanR4dC9vN3VvYnBXQWIvU3Iwa1FWUWVLRkFHc1lFUzJNWnBoVHRWYm02?= =?utf-8?B?UjU0M1ozU05EMlNoVmdobUxmdGVhaktmWDVyakVxUHkzZ3hoRFFqK0tUemYx?= =?utf-8?B?WGgyT1ZOOEtVV0wybjBlb2NDMWZCMW5hM3doZEp4T3RJN3hMRGNSVmZFUkpX?= =?utf-8?B?ejMwUUx3Q0g4T1EwMSt6M0daOC8rMCtJL0hwOERnTDVqTWc3cngwb3loL3Rr?= =?utf-8?B?WllrR21iUkhGN3llajRCZWhUK1crMmZTVXYvMEVSYjZnR2FIcUsvdnIxMzBt?= =?utf-8?B?amJPQ1JyRUZUd2U0UG1DSE9vVkV3Q0xuOVgrb2ovb2JSTlk2T0U5M0hBd2Zp?= =?utf-8?B?WHpZZFRneCtxbU9TSVpDNFhjNGJTYUFWcERIWWtzSlFVQUorbFNxWDFlakxn?= =?utf-8?B?b21HaVJVTlpFQXduZm82WW9EUHp4ei9rc0RaOERiK1dKZ2o4dklKck9GM2pQ?= =?utf-8?B?bjdjOU50SEdsUkd5UlY3UktYU2pOVVgwbTBLRDg0b3JZdVRsWEdFNC85OGhp?= =?utf-8?B?cy9wTDk1NEtkTVk5SWRPVWRVVU1BME1WandXUE1qNDYxUEJ6MFJNYS9OWGpt?= =?utf-8?B?V2tnb21vcG8xdWlnRjBTQ1o2QzBWVUZuVXFubEh2elYwR3J4UHd6UVZSS3Vy?= =?utf-8?B?MC8xZGp2QUJ3dVEzWmpYb2RkRVhNMGN2WEU3dlRlZzhwS0dCMGxZbFZvV1dn?= =?utf-8?B?K1dQMTl1R0dzK2dqaWNVSmVBRnA1dERmZDEyOFZCdW90RWQxb1BkYjdidjdT?= =?utf-8?B?MGFDSlViWnQwcWtndXp3c1RHOVZFaFBXMThzdkFNSFRTbzBYTnpiWjdIdTNZ?= =?utf-8?Q?hPks=3D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CH3PR11MB8659.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 22305a1a-01a4-4bc5-2efa-08dc36b4c190 X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Feb 2024 10:21:54.8811 (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: fFvy5s+bM+spsUkjQeJwMLWbHsSVDQ1CjBRQA54N66gBIxXoNYssTm+eRGU6y3NZdScD1zwNWhjTkwy4iMGQNQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN9PR11MB5371 X-OriginatorOrg: intel.com Subject: Re: [FFmpeg-devel] [PATCH v5 8/9] avcodec: add D3D12VA hardware HEVC encoder 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 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: Pk9uIDE4LzAyLzIwMjQgMDg6NDUsIHRvbmcxLnd1LWF0LWludGVsLmNvbUBmZm1wZWcub3JnIHdy b3RlOg0KPj4gRnJvbTogVG9uZyBXdSA8dG9uZzEud3VAaW50ZWwuY29tPg0KPj4NCj4+IFRoaXMg aW1wbGVtZW50YXRpb24gaXMgYmFzZWQgb24gRDNEMTIgVmlkZW8gRW5jb2RpbmcgU3BlYzoNCj4+ IGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9EaXJlY3RYLVNwZWNzL2QzZC9EM0QxMlZpZGVv RW5jb2RpbmcuaHRtbA0KPj4NCj4+IFNhbXBsZSBjb21tYW5kIGxpbmUgZm9yIHRyYW5zY29kaW5n Og0KPj4gZmZtcGVnLmV4ZSAtaHdhY2NlbCBkM2QxMnZhIC1od2FjY2VsX291dHB1dF9mb3JtYXQg ZDNkMTIgLWkgaW5wdXQubXA0DQo+PiAtYzp2IGhldmNfZDNkMTJ2YSBvdXRwdXQubXA0DQo+Pg0K Pj4gU2lnbmVkLW9mZi1ieTogVG9uZyBXdSA8dG9uZzEud3VAaW50ZWwuY29tPg0KPj4gLS0tDQo+ PiAgIGNvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiArDQo+PiAgIGxpYmF2 Y29kZWMvTWFrZWZpbGUgICAgICAgICAgICAgIHwgICAgNCArLQ0KPj4gICBsaWJhdmNvZGVjL2Fs bGNvZGVjcy5jICAgICAgICAgICB8ICAgIDEgKw0KPj4gICBsaWJhdmNvZGVjL2QzZDEydmFfZW5j b2RlLmMgICAgICB8IDE0NDMNCj4rKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4+ICAg bGliYXZjb2RlYy9kM2QxMnZhX2VuY29kZS5oICAgICAgfCAgMjc1ICsrKysrKw0KPj4gICBsaWJh dmNvZGVjL2QzZDEydmFfZW5jb2RlX2hldmMuYyB8IDEwMTMgKysrKysrKysrKysrKysrKysrKysr DQo+PiAgIGxpYmF2Y29kZWMvaHdfYmFzZV9lbmNvZGUuaCAgICAgIHwgICAgMiArLQ0KPj4gICA3 IGZpbGVzIGNoYW5nZWQsIDI3NDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkNCj4NCj5U aGVyZSBhcmUgYSBsb2FkIG9mIHJlZmVyZW5jZXMgdG8gSC4yNjQgYmVsb3cuICBEbyB5b3UgaGF2 ZSBhIHdvcmtpbmcgSC4yNjQNCj5pbXBsZW1lbnRhdGlvbiBhcyB3ZWxsPw0KDQpEbyB5b3UgbWVh biBzb21lIG9mIHRoZSBzdXBwb3J0IGNoZWNrcyBzdWNoIGFzIA0KICAgIHVuaW9uIHsNCiAgICAg ICAgRDNEMTJfVklERU9fRU5DT0RFUl9DT0RFQ19QSUNUVVJFX0NPTlRST0xfU1VQUE9SVF9IMjY0 IGgyNjQ7DQogICAgICAgIEQzRDEyX1ZJREVPX0VOQ09ERVJfQ09ERUNfUElDVFVSRV9DT05UUk9M X1NVUFBPUlRfSEVWQyBoZXZjOw0KICAgIH0gY29kZWNfc3VwcG9ydDsNCg0KVGhlIEQzRDEyIHN0 cnVjdHVyZXMgYXJlIGFsd2F5cyBzaW1pbGFyIHRvIHRoYXQgc28gSSBkZWZpbmVkIHRoZSB1bmlv biBsaWtld2lzZS4gSSBmZWVsIGxpa2UgaXQncyBub3QgbmVjZXNzYXJ5IHRvIHB1dCB0aGVzZSB0 aW55IGNoZWNrcyBpbnRvIGNvZGVjLXNwZWNpZmljIGZpbGVzLiBJdCdzIGluIHByZXBhcmF0aW9u IG9mIHRoZSBmb2xsb3dpbmcgSC4yNjQgaW1wbGVtZW50YXRpb24uIElmIGl0J3MgYm90aGVyaW5n IHlvdSBJIGNvdWxkIHJlbW92ZSB0aGUgSC4yNjQgcGFydHMgYW5kIGFkZCB0aGVtIGxhdGVyLg0K DQo+DQo+PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL2QzZDEydmFfZW5jb2RlLmMN Cj4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvZDNkMTJ2YV9lbmNvZGUuaA0KPj4g ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy9kM2QxMnZhX2VuY29kZV9oZXZjLmMNCj4+ IGRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUNCj4+IGluZGV4IGY3MjUzM2I3ZDIu LjY4MjU3NmFhOTEgMTAwNzU1DQo+PiAtLS0gYS9jb25maWd1cmUNCj4+ICsrKyBiL2NvbmZpZ3Vy ZQ0KPj4gQEAgLTI1NjQsNiArMjU2NCw3IEBAIENPTkZJR19FWFRSQT0iDQo+PiAgICAgICB0cGVs ZHNwDQo+PiAgICAgICB2YWFwaV8xDQo+PiAgICAgICB2YWFwaV9lbmNvZGUNCj4+ICsgICAgZDNk MTJ2YV9lbmNvZGUNCj4+ICAgICAgIHZjMWRzcA0KPj4gICAgICAgdmlkZW9kc3ANCj4+ICAgICAg IHZwM2RzcA0KPj4gQEAgLTMyMDgsNiArMzIwOSw3IEBAIHdtdjNfdmFhcGlfaHdhY2NlbF9zZWxl Y3Q9InZjMV92YWFwaV9od2FjY2VsIg0KPj4gICB3bXYzX3ZkcGF1X2h3YWNjZWxfc2VsZWN0PSJ2 YzFfdmRwYXVfaHdhY2NlbCINCj4+DQo+PiAgICMgaGFyZHdhcmUtYWNjZWxlcmF0ZWQgY29kZWNz DQo+PiArZDNkMTJ2YV9lbmNvZGVfZGVwcz0iZDNkMTJ2YSBJRDNEMTJWaWRlb0VuY29kZXINCj5k M2QxMl9lbmNvZGVyX2ZlYXR1cmUiDQo+PiAgIG1lZGlhZm91bmRhdGlvbl9kZXBzPSJtZnRyYW5z Zm9ybV9oIE1GQ3JlYXRlQWxpZ25lZE1lbW9yeUJ1ZmZlciINCj4+ICAgb214X2RlcHM9ImxpYmRs IHB0aHJlYWRzIg0KPj4gICBvbXhfcnBpX3NlbGVjdD0ib214Ig0KPj4gQEAgLTMyNzUsNiArMzI3 Nyw3IEBAIGgyNjRfdjRsMm0ybV9lbmNvZGVyX2RlcHM9InY0bDJfbTJtDQo+aDI2NF92NGwyX20y bSINCj4+ICAgaGV2Y19hbWZfZW5jb2Rlcl9kZXBzPSJhbWYiDQo+PiAgIGhldmNfY3V2aWRfZGVj b2Rlcl9kZXBzPSJjdXZpZCINCj4+ICAgaGV2Y19jdXZpZF9kZWNvZGVyX3NlbGVjdD0iaGV2Y19t cDR0b2FubmV4Yl9ic2YiDQo+PiAraGV2Y19kM2QxMnZhX2VuY29kZXJfc2VsZWN0PSJhdHNjX2E1 MyBjYnNfaDI2NSBkM2QxMnZhX2VuY29kZSINCj4NCj5TcHVyaW91cyBkZXBlbmRlbmN5IG9uIHRo ZSBub24tQ0JTIEE1MyBzdHVmZj8gIChJZiB5b3Ugd2FudCBBNTMgd2Ugc2hvdWxkDQo+YWRkIGl0 IHRvIENCUyBwcm9wZXJseS4pDQoNCkdvaW5nIHRvIHJlbW92ZSB0aGlzIGRlcGVuZGVuY3kgb24g bmV4dCB2ZXJzaW9uLg0KDQo+DQo+PiAgIGhldmNfbWVkaWFjb2RlY19kZWNvZGVyX2RlcHM9Im1l ZGlhY29kZWMiDQo+PiAgIGhldmNfbWVkaWFjb2RlY19kZWNvZGVyX3NlbGVjdD0iaGV2Y19tcDR0 b2FubmV4Yl9ic2YgaGV2Y19wYXJzZXIiDQo+PiAgIGhldmNfbWVkaWFjb2RlY19lbmNvZGVyX2Rl cHM9Im1lZGlhY29kZWMiDQo+PiBAQCAtNjYxNyw2ICs2NjIwLDkgQEAgY2hlY2tfdHlwZSAid2lu ZG93cy5oIGQzZDExLmgiDQo+IklEM0QxMVZpZGVvRGVjb2RlciINCj4+ICAgY2hlY2tfdHlwZSAi d2luZG93cy5oIGQzZDExLmgiICJJRDNEMTFWaWRlb0NvbnRleHQiDQo+PiAgIGNoZWNrX3R5cGUg IndpbmRvd3MuaCBkM2QxMi5oIiAiSUQzRDEyRGV2aWNlIg0KPj4gICBjaGVja190eXBlICJ3aW5k b3dzLmggZDNkMTJ2aWRlby5oIiAiSUQzRDEyVmlkZW9EZWNvZGVyIg0KPj4gK2NoZWNrX3R5cGUg IndpbmRvd3MuaCBkM2QxMnZpZGVvLmgiICJJRDNEMTJWaWRlb0VuY29kZXIiDQo+PiArdGVzdF9j b2RlIGNjICJ3aW5kb3dzLmggZDNkMTJ2aWRlby5oIiAiRDNEMTJfRkVBVFVSRV9WSURFTyBmZWF0 dXJlID0NCj5EM0QxMl9GRUFUVVJFX1ZJREVPX0VOQ09ERVJfQ09ERUMiICYmIFwNCj4+ICt0ZXN0 X2NvZGUgY2MgIndpbmRvd3MuaCBkM2QxMnZpZGVvLmgiDQo+IkQzRDEyX0ZFQVRVUkVfREFUQV9W SURFT19FTkNPREVSX1JFU09VUkNFX1JFUVVJUkVNRU5UUyByZXEiDQo+JiYgZW5hYmxlIGQzZDEy X2VuY29kZXJfZmVhdHVyZQ0KPj4gICBjaGVja190eXBlICJ3aW5kb3dzLmgiICJEUElfQVdBUkVO RVNTX0NPTlRFWFQiIC0NCj5EX1dJTjMyX1dJTk5UPTB4MEEwMA0KPj4gICBjaGVja190eXBlICJk M2Q5LmggZHh2YTJhcGkuaCIgRFhWQTJfQ29uZmlnUGljdHVyZURlY29kZSAtDQo+RF9XSU4zMl9X SU5OVD0weDA2MDINCj4+ICAgY2hlY2tfZnVuY19oZWFkZXJzIG1mYXBpLmggTUZDcmVhdGVBbGln bmVkTWVtb3J5QnVmZmVyIC1sbWZwbGF0DQo+PiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9NYWtl ZmlsZSBiL2xpYmF2Y29kZWMvTWFrZWZpbGUNCj4+IGluZGV4IDIzOTQ2ZjZlYTMuLjUwNTkwYjM0 ZjQgMTAwNjQ0DQo+PiAtLS0gYS9saWJhdmNvZGVjL01ha2VmaWxlDQo+PiArKysgYi9saWJhdmNv ZGVjL01ha2VmaWxlDQo+PiBAQCAtODYsNiArODYsNyBAQCBPQkpTLSQoQ09ORklHX0NCU19NUEVH MikgICAgICAgICAgICAgICArPSBjYnNfbXBlZzIubw0KPj4gICBPQkpTLSQoQ09ORklHX0NCU19W UDgpICAgICAgICAgICAgICAgICArPSBjYnNfdnA4Lm8gdnA4ZGF0YS5vDQo+PiAgIE9CSlMtJChD T05GSUdfQ0JTX1ZQOSkgICAgICAgICAgICAgICAgICs9IGNic192cDkubw0KPj4gICBPQkpTLSQo Q09ORklHX0NSWVNUQUxIRCkgICAgICAgICAgICAgICArPSBjcnlzdGFsaGQubw0KPj4gK09CSlMt JChDT05GSUdfRDNEMTJWQV9FTkNPREUpICAgICAgICAgICs9IGQzZDEydmFfZW5jb2RlLm8NCj5o d19iYXNlX2VuY29kZS5vDQo+PiAgIE9CSlMtJChDT05GSUdfREVGTEFURV9XUkFQUEVSKSAgICAg ICAgICs9IHpsaWJfd3JhcHBlci5vDQo+PiAgIE9CSlMtJChDT05GSUdfRE9WSV9SUFUpICAgICAg ICAgICAgICAgICs9IGRvdmlfcnB1Lm8NCj4+ICAgT0JKUy0kKENPTkZJR19FUlJPUl9SRVNJTElF TkNFKSAgICAgICAgKz0gZXJyb3JfcmVzaWxpZW5jZS5vDQo+PiBAQCAtNDM3LDYgKzQzOCw3IEBA IE9CSlMtJChDT05GSUdfSEVWQ19ERUNPREVSKSAgICAgICAgICAgICs9DQo+aGV2Y2RlYy5vIGhl dmNfbXZzLm8gXA0KPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBoMjc0Lm8NCj4+ICAgT0JKUy0kKENPTkZJR19IRVZDX0FNRl9FTkNPREVSKSAgICAgICAgKz0g YW1mZW5jX2hldmMubw0KPj4gICBPQkpTLSQoQ09ORklHX0hFVkNfQ1VWSURfREVDT0RFUikgICAg ICArPSBjdXZpZGRlYy5vDQo+PiArT0JKUy0kKENPTkZJR19IRVZDX0QzRDEyVkFfRU5DT0RFUikg ICAgKz0gZDNkMTJ2YV9lbmNvZGVfaGV2Yy5vDQo+PiAgIE9CSlMtJChDT05GSUdfSEVWQ19NRURJ QUNPREVDX0RFQ09ERVIpICs9IG1lZGlhY29kZWNkZWMubw0KPj4gICBPQkpTLSQoQ09ORklHX0hF VkNfTUVESUFDT0RFQ19FTkNPREVSKSArPSBtZWRpYWNvZGVjZW5jLm8NCj4+ICAgT0JKUy0kKENP TkZJR19IRVZDX01GX0VOQ09ERVIpICAgICAgICAgKz0gbWZlbmMubyBtZl91dGlscy5vDQo+PiBA QCAtMTI2Nyw3ICsxMjY5LDcgQEAgU0tJUEhFQURFUlMgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKz0gJV90YWJsZWdlbi5oDQo+XA0KPj4NCj4+ICAgU0tJUEhFQURFUlMtJChDT05GSUdfQU1G KSAgICAgICAgICAgICAgKz0gYW1mZW5jLmgNCj4+ICAgU0tJUEhFQURFUlMtJChDT05GSUdfRDNE MTFWQSkgICAgICAgICAgKz0gZDNkMTF2YS5oIGR4dmEyX2ludGVybmFsLmgNCj4+IC1TS0lQSEVB REVSUy0kKENPTkZJR19EM0QxMlZBKSAgICAgICAgICArPSBkM2QxMnZhX2RlY29kZS5oDQo+PiAr U0tJUEhFQURFUlMtJChDT05GSUdfRDNEMTJWQSkgICAgICAgICAgKz0gZDNkMTJ2YV9kZWNvZGUu aA0KPmQzZDEydmFfZW5jb2RlLmgNCj4+ICAgU0tJUEhFQURFUlMtJChDT05GSUdfRFhWQTIpICAg ICAgICAgICAgKz0gZHh2YTIuaCBkeHZhMl9pbnRlcm5hbC5oDQo+PiAgIFNLSVBIRUFERVJTLSQo Q09ORklHX0pOSSkgICAgICAgICAgICAgICs9IGZmam5pLmgNCj4+ICAgU0tJUEhFQURFUlMtJChD T05GSUdfTENNUzIpICAgICAgICAgICAgKz0gZmZsY21zMi5oDQo+PiBkaWZmIC0tZ2l0IGEvbGli YXZjb2RlYy9hbGxjb2RlY3MuYyBiL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMNCj4+IGluZGV4IGVm OGMzYTZkN2QuLjlhMzQ5NzQxNDEgMTAwNjQ0DQo+PiAtLS0gYS9saWJhdmNvZGVjL2FsbGNvZGVj cy5jDQo+PiArKysgYi9saWJhdmNvZGVjL2FsbGNvZGVjcy5jDQo+PiBAQCAtODY1LDYgKzg2NSw3 IEBAIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2gyNjRfdmFhcGlfZW5jb2RlcjsNCj4+ICAgZXh0 ZXJuIGNvbnN0IEZGQ29kZWMgZmZfaDI2NF92aWRlb3Rvb2xib3hfZW5jb2RlcjsNCj4+ICAgZXh0 ZXJuIGNvbnN0IEZGQ29kZWMgZmZfaGV2Y19hbWZfZW5jb2RlcjsNCj4+ICAgZXh0ZXJuIGNvbnN0 IEZGQ29kZWMgZmZfaGV2Y19jdXZpZF9kZWNvZGVyOw0KPj4gK2V4dGVybiBjb25zdCBGRkNvZGVj IGZmX2hldmNfZDNkMTJ2YV9lbmNvZGVyOw0KPj4gICBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9o ZXZjX21lZGlhY29kZWNfZGVjb2RlcjsNCj4+ICAgZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfaGV2 Y19tZWRpYWNvZGVjX2VuY29kZXI7DQo+PiAgIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2hldmNf bWZfZW5jb2RlcjsNCj4+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2QzZDEydmFfZW5jb2RlLmMg Yi9saWJhdmNvZGVjL2QzZDEydmFfZW5jb2RlLmMNCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ PiBpbmRleCAwMDAwMDAwMDAwLi4yNDg5OGRiY2IxDQo+PiAtLS0gL2Rldi9udWxsDQo+PiArKysg Yi9saWJhdmNvZGVjL2QzZDEydmFfZW5jb2RlLmMNCj4+IEBAIC0wLDAgKzEsMTQ0MyBAQA0KPj4g Ky8qDQo+PiArICogRGlyZWN0M0QgMTIgSFcgYWNjZWxlcmF0aW9uIHZpZGVvIGVuY29kZXINCj4+ ICsgKg0KPj4gKyAqIENvcHlyaWdodCAoYykgMjAyNCBJbnRlbCBDb3Jwb3JhdGlvbg0KPj4gKyAq DQo+PiArICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLg0KPj4gKyAqDQo+PiArICogRkZt cGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KPj4g KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMNCj4+ICsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXINCj4+ICsgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3Ig KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCj4+ICsgKg0KPj4gKyAqIEZGbXBl ZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KPj4g KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mDQo+PiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KPkdOVQ0KPj4gKyAqIExlc3NlciBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQo+PiArICoNCj4+ICsgKiBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljDQo+PiAr ICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT b2Z0d2FyZQ0KPj4gKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm dGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMQ0KPlVTQQ0KPj4gKyAqLw0KPj4gKw0KPj4g KyNpbmNsdWRlICJsaWJhdnV0aWwvYXZhc3NlcnQuaCINCj4+ICsjaW5jbHVkZSAibGliYXZ1dGls L2NvbW1vbi5oIg0KPj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvaW50ZXJuYWwuaCINCj4+ICsjaW5j bHVkZSAibGliYXZ1dGlsL2xvZy5oIg0KPj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvcGl4ZGVzYy5o Ig0KPj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvaHdjb250ZXh0X2QzZDEydmFfaW50ZXJuYWwuaCIN Cj4+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2h3Y29udGV4dF9kM2QxMnZhLmgiDQo+PiArDQo+PiAr I2luY2x1ZGUgImF2Y29kZWMuaCINCj4+ICsjaW5jbHVkZSAiZDNkMTJ2YV9lbmNvZGUuaCINCj4+ ICsjaW5jbHVkZSAiZW5jb2RlLmgiDQo+PiArDQo+PiArY29uc3QgQVZDb2RlY0hXQ29uZmlnSW50 ZXJuYWwgKmNvbnN0IGZmX2QzZDEydmFfZW5jb2RlX2h3X2NvbmZpZ3NbXSA9DQo+ew0KPg0KPnN0 YXRpYw0KDQpCdXQgaXQncyBpZGVudGljYWwgdG8gdmFhcGlfZW5jb2RlLmMgd2hpY2ggaXMgbm90 IHN0YXRpYyBlaXRoZXIuIFBsdXMgaXQncyB1c2VkIGJ5IG90aGVyIGZpbGVzLg0KDQo+DQo+PiAr ICAgIEhXX0NPTkZJR19FTkNPREVSX0ZSQU1FUyhEM0QxMiwgRDNEMTJWQSksDQo+PiArICAgIE5V TEwsDQo+PiArfTsNCj4+ICsNCj4+ICtzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBpY3R1cmVf dHlwZV9uYW1lW10gPSB7ICJJRFIiLCAiSSIsICJQIiwgIkIiIH07DQo+DQo+TWVyZ2Ugd2l0aCB0 aGUgb25lIGluIFZBQVBJPyAgKFRyaXZpYWwgZnVuY3Rpb24gaW4gdGhlIGNvbW1vbiBjb2RlLCBt YXliZT8pDQo+DQoNCk1heWJlIHJlbW92ZSB0aGUgc3RhdGljIGtleSB3b3JkIGFuZCBwdXQgaW4g dGhlIGNvbW1vbiBoZWFkZXI/DQoNCj4+ICsNCj4+ICtzdGF0aWMgaW50IGQzZDEydmFfZmVuY2Vf Y29tcGxldGlvbihBVkQzRDEyVkFTeW5jQ29udGV4dCAqcHN5bmNfY3R4KQ0KPj4gK3sNCj4+ICsg ICAgdWludDY0X3QgY29tcGxldGlvbiA9IElEM0QxMkZlbmNlX0dldENvbXBsZXRlZFZhbHVlKHBz eW5jX2N0eC0NCj4+ZmVuY2UpOw0KPj4gKyAgICBpZiAoY29tcGxldGlvbiA8IHBzeW5jX2N0eC0+ ZmVuY2VfdmFsdWUpIHsNCj4+ICsgICAgICAgIGlmIChGQUlMRUQoSUQzRDEyRmVuY2VfU2V0RXZl bnRPbkNvbXBsZXRpb24ocHN5bmNfY3R4LT5mZW5jZSwNCj5wc3luY19jdHgtPmZlbmNlX3ZhbHVl LCBwc3luY19jdHgtPmV2ZW50KSkpDQo+PiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlO VkFMKTsNCj4+ICsNCj4+ICsgICAgICAgIFdhaXRGb3JTaW5nbGVPYmplY3RFeChwc3luY19jdHgt PmV2ZW50LCBJTkZJTklURSwgRkFMU0UpOw0KPj4gKyAgICB9DQo+PiArDQo+PiArICAgIHJldHVy biAwOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGQzZDEydmFfc3luY193aXRoX2dwdShB VkNvZGVjQ29udGV4dCAqYXZjdHgpDQo+PiArew0KPj4gKyAgICBEM0QxMlZBRW5jb2RlQ29udGV4 dCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsNCj4+ICsNCj4+ICsgICAgRFhfQ0hFQ0soSUQzRDEy Q29tbWFuZFF1ZXVlX1NpZ25hbChjdHgtPmNvbW1hbmRfcXVldWUsIGN0eC0NCj4+c3luY19jdHgu ZmVuY2UsICsrY3R4LT5zeW5jX2N0eC5mZW5jZV92YWx1ZSkpOw0KPj4gKyAgICByZXR1cm4gZDNk MTJ2YV9mZW5jZV9jb21wbGV0aW9uKCZjdHgtPnN5bmNfY3R4KTsNCj4+ICsNCj4+ICtmYWlsOg0K Pj4gKyAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOw0KPj4gK30NCj4+ICsNCj4+ICt0eXBlZGVm IHN0cnVjdCBDb21tYW5kQWxsb2NhdG9yIHsNCj4+ICsgICAgSUQzRDEyQ29tbWFuZEFsbG9jYXRv ciAqY29tbWFuZF9hbGxvY2F0b3I7DQo+PiArICAgIHVpbnQ2NF90IGZlbmNlX3ZhbHVlOw0KPj4g K30gQ29tbWFuZEFsbG9jYXRvcjsNCj4+ICsNCj4+ICtzdGF0aWMgaW50IGQzZDEydmFfZ2V0X3Zh bGlkX2NvbW1hbmRfYWxsb2NhdG9yKEFWQ29kZWNDb250ZXh0ICphdmN0eCwNCj5JRDNEMTJDb21t YW5kQWxsb2NhdG9yICoqcHBBbGxvY2F0b3IpDQo+PiArew0KPj4gKyAgICBIUkVTVUxUIGhyOw0K Pj4gKyAgICBEM0QxMlZBRW5jb2RlQ29udGV4dCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsNCj4+ ICsgICAgQ29tbWFuZEFsbG9jYXRvciBhbGxvY2F0b3I7DQo+PiArDQo+PiArICAgIGlmIChhdl9m aWZvX3BlZWsoY3R4LT5hbGxvY2F0b3JfcXVldWUsICZhbGxvY2F0b3IsIDEsIDApID49IDApIHsN Cj4+ICsgICAgICAgIHVpbnQ2NF90IGNvbXBsZXRpb24gPSBJRDNEMTJGZW5jZV9HZXRDb21wbGV0 ZWRWYWx1ZShjdHgtDQo+PnN5bmNfY3R4LmZlbmNlKTsNCj4+ICsgICAgICAgIGlmIChjb21wbGV0 aW9uID49IGFsbG9jYXRvci5mZW5jZV92YWx1ZSkgew0KPj4gKyAgICAgICAgICAgICpwcEFsbG9j YXRvciA9IGFsbG9jYXRvci5jb21tYW5kX2FsbG9jYXRvcjsNCj4+ICsgICAgICAgICAgICBhdl9m aWZvX3JlYWQoY3R4LT5hbGxvY2F0b3JfcXVldWUsICZhbGxvY2F0b3IsIDEpOw0KPj4gKyAgICAg ICAgICAgIHJldHVybiAwOw0KPj4gKyAgICAgICAgfQ0KPj4gKyAgICB9DQo+PiArDQo+PiArICAg IGhyID0gSUQzRDEyRGV2aWNlX0NyZWF0ZUNvbW1hbmRBbGxvY2F0b3IoY3R4LT5od2N0eC0+ZGV2 aWNlLA0KPkQzRDEyX0NPTU1BTkRfTElTVF9UWVBFX1ZJREVPX0VOQ09ERSwNCj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSUlEX0lEM0QxMkNvbW1hbmRB bGxvY2F0b3IsICh2b2lkDQo+KiopcHBBbGxvY2F0b3IpOw0KPj4gKyAgICBpZiAoRkFJTEVEKGhy KSkgew0KPj4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8g Y3JlYXRlIGEgbmV3IGNvbW1hbmQNCj5hbGxvY2F0b3IhXG4iKTsNCj4+ICsgICAgICAgIHJldHVy biBBVkVSUk9SKEVJTlZBTCk7DQo+PiArICAgIH0NCj4+ICsNCj4+ICsgICAgcmV0dXJuIDA7DQo+ PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgZDNkMTJ2YV9kaXNjYXJkX2NvbW1hbmRfYWxsb2Nh dG9yKEFWQ29kZWNDb250ZXh0ICphdmN0eCwNCj5JRDNEMTJDb21tYW5kQWxsb2NhdG9yICpwQWxs b2NhdG9yLCB1aW50NjRfdCBmZW5jZV92YWx1ZSkNCj4+ICt7DQo+PiArICAgIEQzRDEyVkFFbmNv ZGVDb250ZXh0ICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOw0KPj4gKw0KPj4gKyAgICBDb21tYW5k QWxsb2NhdG9yIGFsbG9jYXRvciA9IHsNCj4+ICsgICAgICAgIC5jb21tYW5kX2FsbG9jYXRvciA9 IHBBbGxvY2F0b3IsDQo+PiArICAgICAgICAuZmVuY2VfdmFsdWUgPSBmZW5jZV92YWx1ZSwNCj4+ ICsgICAgfTsNCj4+ICsNCj4+ICsgICAgaWYgKGF2X2ZpZm9fd3JpdGUoY3R4LT5hbGxvY2F0b3Jf cXVldWUsICZhbGxvY2F0b3IsIDEpIDwgMCkgew0KPj4gKyAgICAgICAgRDNEMTJfT0JKRUNUX1JF TEVBU0UocEFsbG9jYXRvcik7DQo+PiArICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOw0K Pg0KPkNhbiB5b3UgZXhwbGFpbiB3aGVuIHRoaXMgZmFpbHVyZSBjYXNlIGhhcHBlbnM/ICBJdCBs b29rcyBsaWtlIHRoZSBmaWZvIGlzIHNpemVkIHRvDQo+YXZvaWQgaXQuDQoNCk9rIGl0IHNlZW1z IGl0J3Mgbm90IGhhcHBlbmluZy4gSSdsbCByZW1vdmUgdGhlIGZhaWx1cmUgY2hlY2suDQoNCj4N Cj4+ICsgICAgfQ0KPj4gKw0KPj4gKyAgICByZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3Rh dGljIGludCBkM2QxMnZhX2VuY29kZV93YWl0KEFWQ29kZWNDb250ZXh0ICphdmN0eCwNCj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEMTJWQUVuY29kZVBpY3R1cmUgKnBpYykN Cj4+ICt7DQo+PiArICAgIEQzRDEyVkFFbmNvZGVDb250ZXh0ICpjdHggICAgID0gYXZjdHgtPnBy aXZfZGF0YTsNCj4+ICsgICAgSFdCYXNlRW5jb2RlUGljdHVyZSAqYmFzZV9waWMgPSAoSFdCYXNl RW5jb2RlUGljdHVyZSAqKXBpYzsNCj4+ICsgICAgdWludDY0X3QgY29tcGxldGlvbjsNCj4+ICsN Cj4+ICsgICAgYXZfYXNzZXJ0MChiYXNlX3BpYy0+ZW5jb2RlX2lzc3VlZCk7DQo+PiArDQo+PiAr ICAgIGlmIChiYXNlX3BpYy0+ZW5jb2RlX2NvbXBsZXRlKSB7DQo+PiArICAgICAgICAvLyBBbHJl YWR5IHdhaXRlZCBmb3IgdGhpcyBwaWN0dXJlLg0KPj4gKyAgICAgICAgcmV0dXJuIDA7DQo+PiAr ICAgIH0NCj4+ICsNCj4+ICsgICAgY29tcGxldGlvbiA9IElEM0QxMkZlbmNlX0dldENvbXBsZXRl ZFZhbHVlKGN0eC0+c3luY19jdHguZmVuY2UpOw0KPj4gKyAgICBpZiAoY29tcGxldGlvbiA8IHBp Yy0+ZmVuY2VfdmFsdWUpIHsNCj4+ICsgICAgICAgIGlmIChGQUlMRUQoSUQzRDEyRmVuY2VfU2V0 RXZlbnRPbkNvbXBsZXRpb24oY3R4LT5zeW5jX2N0eC5mZW5jZSwNCj5waWMtPmZlbmNlX3ZhbHVl LA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjdHgtPnN5bmNfY3R4LmV2ZW50KSkpDQo+PiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1Io RUlOVkFMKTsNCj4+ICsNCj4+ICsgICAgICAgIFdhaXRGb3JTaW5nbGVPYmplY3RFeChjdHgtPnN5 bmNfY3R4LmV2ZW50LCBJTkZJTklURSwgRkFMU0UpOw0KPj4gKyAgICB9DQo+PiArDQo+PiArICAg IGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiU3luYyB0byBwaWMgJSJQUklkNjQiLyUiUFJJ ZDY0IiAiDQo+PiArICAgICAgICAgICAiKGlucHV0IHN1cmZhY2UgJXApLlxuIiwgYmFzZV9waWMt PmRpc3BsYXlfb3JkZXIsDQo+PiArICAgICAgICAgICBiYXNlX3BpYy0+ZW5jb2RlX29yZGVyLCBw aWMtPmlucHV0X3N1cmZhY2UtPnRleHR1cmUpOw0KPj4gKw0KPj4gKyAgICBhdl9mcmFtZV9mcmVl KCZiYXNlX3BpYy0+aW5wdXRfaW1hZ2UpOw0KPj4gKw0KPj4gKyAgICBiYXNlX3BpYy0+ZW5jb2Rl X2NvbXBsZXRlID0gMTsNCj4+ICsgICAgcmV0dXJuIDA7DQo+PiArfQ0KPg0KPkkgdGhpbmsgdGhp cyBmdW5jdGlvbiBiZWluZyBzdGFuZGFsb25lIGluIGJvdGggVkFBUEkgYW5kIEQzRDEyIGlzIHN1 Z2dlc3RpbmcNCj50aGF0IGl0IHNob3VsZCBiZSBhIHNlcGFyYXRlIGNhbGxiYWNrIGZyb20gdGhl IGNvbW1vbiBjb2RlPyAgKEJlZm9yZSB0aGUNCj5vdXRwdXQgb25lLikNCg0KVGhpcyBmdW5jdGlv biBpcyBub3QgY2FsbGVkIGJ5IGJhc2UuIEl0J3MgY2FsbGVkIGJ5IGVuY29kZV9vdXRwdXQgYW5k IGVuY29kZV9kaXNjYXJkIHdoaWNoIGFyZSBub3QgY29tbW9uIGNvZGUuIFNpbmNlIGVuY29kZV9v dXRwdXQgaXMgYWxyZWFkeSBhIGNhbGxiYWNrLCBJIGd1ZXNzIGl0J3Mgb2sgdG8gaGF2ZSBpdCBo ZXJlIHNlcGFyYXRlbHkgbWF5YmU/DQoNCj4NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGQzZDEydmFf ZW5jb2RlX2NyZWF0ZV9tZXRhZGF0YV9idWZmZXJzKEFWQ29kZWNDb250ZXh0DQo+KmF2Y3R4LA0K Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNE MTJWQUVuY29kZVBpY3R1cmUgKnBpYykNCj4+ICt7DQo+PiArICAgIEQzRDEyVkFFbmNvZGVDb250 ZXh0ICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOw0KPj4gKyAgICBpbnQgd2lkdGggPSBzaXplb2Yo RDNEMTJfVklERU9fRU5DT0RFUl9PVVRQVVRfTUVUQURBVEEpICsNCj5zaXplb2YoRDNEMTJfVklE RU9fRU5DT0RFUl9GUkFNRV9TVUJSRUdJT05fTUVUQURBVEEpOw0KPj4gKyAgICBEM0QxMl9IRUFQ X1BST1BFUlRJRVMgZW5jb2RlZF9tZXRhX3Byb3BzID0geyAuVHlwZSA9DQo+RDNEMTJfSEVBUF9U WVBFX0RFRkFVTFQgfSwgcmVzb2x2ZWRfbWV0YV9wcm9wczsNCj4+ICsgICAgRDNEMTJfSEVBUF9U WVBFIHJlc29sdmVkX2hlYXBfdHlwZSA9DQo+RDNEMTJfSEVBUF9UWVBFX1JFQURCQUNLOw0KPj4g KyAgICBIUkVTVUxUIGhyOw0KPj4gKw0KPj4gKyAgICBEM0QxMl9SRVNPVVJDRV9ERVNDIG1ldGFf ZGVzYyA9IHsNCj4+ICsgICAgICAgIC5EaW1lbnNpb24gICAgICAgID0gRDNEMTJfUkVTT1VSQ0Vf RElNRU5TSU9OX0JVRkZFUiwNCj4+ICsgICAgICAgIC5BbGlnbm1lbnQgICAgICAgID0gMCwNCj4+ ICsgICAgICAgIC5XaWR0aCAgICAgICAgICAgID0gY3R4LT5yZXEuTWF4RW5jb2Rlck91dHB1dE1l dGFkYXRhQnVmZmVyU2l6ZSwNCj4+ICsgICAgICAgIC5IZWlnaHQgICAgICAgICAgID0gMSwNCj4+ ICsgICAgICAgIC5EZXB0aE9yQXJyYXlTaXplID0gMSwNCj4+ICsgICAgICAgIC5NaXBMZXZlbHMg ICAgICAgID0gMSwNCj4+ICsgICAgICAgIC5Gb3JtYXQgICAgICAgICAgID0gRFhHSV9GT1JNQVRf VU5LTk9XTiwNCj4+ICsgICAgICAgIC5TYW1wbGVEZXNjICAgICAgID0geyAuQ291bnQgPSAxLCAu UXVhbGl0eSA9IDAgfSwNCj4+ICsgICAgICAgIC5MYXlvdXQgICAgICAgICAgID0gRDNEMTJfVEVY VFVSRV9MQVlPVVRfUk9XX01BSk9SLA0KPj4gKyAgICAgICAgLkZsYWdzICAgICAgICAgICAgPSBE M0QxMl9SRVNPVVJDRV9GTEFHX05PTkUsDQo+PiArICAgIH07DQo+PiArDQo+PiArICAgIGhyID0g SUQzRDEyRGV2aWNlX0NyZWF0ZUNvbW1pdHRlZFJlc291cmNlKGN0eC0+aHdjdHgtPmRldmljZSwN Cj4mZW5jb2RlZF9tZXRhX3Byb3BzLCBEM0QxMl9IRUFQX0ZMQUdfTk9ORSwNCj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1ldGFfZGVzYywNCj5EM0Qx Ml9SRVNPVVJDRV9TVEFURV9DT01NT04sIE5VTEwsDQo+PiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZJSURfSUQzRDEyUmVzb3VyY2UsICh2b2lkICoqKSZw aWMtDQo+PmVuY29kZWRfbWV0YWRhdGEpOw0KPj4gKyAgICBpZiAoRkFJTEVEKGhyKSkgew0KPj4g KyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gY3JlYXRlIG1l dGFkYXRhIGJ1ZmZlci5cbiIpOw0KPj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfVU5LTk9XTjsN Cj4+ICsgICAgfQ0KPj4gKw0KPj4gKyAgICBjdHgtPmh3Y3R4LT5kZXZpY2UtPmxwVnRibC0+R2V0 Q3VzdG9tSGVhcFByb3BlcnRpZXMoY3R4LT5od2N0eC0NCj4+ZGV2aWNlLCAmcmVzb2x2ZWRfbWV0 YV9wcm9wcywgMCwgcmVzb2x2ZWRfaGVhcF90eXBlKTsNCj4+ICsNCj4+ICsgICAgbWV0YV9kZXNj LldpZHRoID0gd2lkdGg7DQo+PiArDQo+PiArICAgIGhyID0gSUQzRDEyRGV2aWNlX0NyZWF0ZUNv bW1pdHRlZFJlc291cmNlKGN0eC0+aHdjdHgtPmRldmljZSwNCj4mcmVzb2x2ZWRfbWV0YV9wcm9w cywgRDNEMTJfSEVBUF9GTEFHX05PTkUsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZtZXRhX2Rlc2MsDQo+RDNEMTJfUkVTT1VSQ0VfU1RBVEVfQ09N TU9OLCBOVUxMLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmSUlEX0lEM0QxMlJlc291cmNlLCAodm9pZCAqKikmcGljLQ0KPj5yZXNvbHZlZF9tZXRh ZGF0YSk7DQo+PiArDQo+PiArICAgIGlmIChGQUlMRUQoaHIpKSB7DQo+PiArICAgICAgICBhdl9s b2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBjcmVhdGUgbWV0YWRhdGEgYnVmZmVy LlxuIik7DQo+PiArICAgICAgICByZXR1cm4gQVZFUlJPUl9VTktOT1dOOw0KPj4gKyAgICB9DQo+ PiArDQo+PiArICAgIHJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGQzZDEy dmFfZW5jb2RlX2lzc3VlKEFWQ29kZWNDb250ZXh0ICphdmN0eCwNCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEhXQmFzZUVuY29kZVBpY3R1cmUgKmJhc2VfcGljKQ0KPj4gK3sN Cj4+ICsgICAgSFdCYXNlRW5jb2RlQ29udGV4dCAqYmFzZV9jdHggPSBhdmN0eC0+cHJpdl9kYXRh Ow0KPj4gKyAgICBEM0QxMlZBRW5jb2RlQ29udGV4dCAgICAgKmN0eCA9IGF2Y3R4LT5wcml2X2Rh dGE7DQo+PiArICAgIEFWRDNEMTJWQUZyYW1lc0NvbnRleHQgKmZyYW1lc19od2N0eCA9IGJhc2Vf Y3R4LT5pbnB1dF9mcmFtZXMtDQo+Pmh3Y3R4Ow0KPj4gKyAgICBEM0QxMlZBRW5jb2RlUGljdHVy ZSAqcGljID0gKEQzRDEyVkFFbmNvZGVQaWN0dXJlICopYmFzZV9waWM7DQo+PiArICAgIGludCBl cnIsIGksIGo7DQo+PiArICAgIEhSRVNVTFQgaHI7DQo+PiArICAgIGNoYXIgZGF0YVtNQVhfUEFS QU1fQlVGRkVSX1NJWkVdOw0KPj4gKyAgICB2b2lkICpwdHI7DQo+PiArICAgIHNpemVfdCBiaXRf bGVuOw0KPj4gKyAgICBJRDNEMTJDb21tYW5kQWxsb2NhdG9yICpjb21tYW5kX2FsbG9jYXRvciA9 IE5VTEw7DQo+PiArICAgIElEM0QxMlZpZGVvRW5jb2RlQ29tbWFuZExpc3QyICpjbWRfbGlzdCA9 IGN0eC0+Y29tbWFuZF9saXN0Ow0KPj4gKyAgICBEM0QxMl9SRVNPVVJDRV9CQVJSSUVSIGJhcnJp ZXJzWzMyXSA9IHsgMCB9Ow0KPj4gKyAgICBEM0QxMl9WSURFT19FTkNPREVfUkVGRVJFTkNFX0ZS QU1FUyBkM2QxMl9yZWZzID0geyAwIH07DQo+PiArDQo+PiArICAgIEQzRDEyX1ZJREVPX0VOQ09E RVJfRU5DT0RFRlJBTUVfSU5QVVRfQVJHVU1FTlRTDQo+aW5wdXRfYXJncyA9IHsNCj4+ICsgICAg ICAgIC5TZXF1ZW5jZUNvbnRyb2xEZXNjID0gew0KPj4gKyAgICAgICAgICAgIC5GbGFncyA9DQo+ RDNEMTJfVklERU9fRU5DT0RFUl9TRVFVRU5DRV9DT05UUk9MX0ZMQUdfTk9ORSwNCj4+ICsgICAg ICAgICAgICAuSW50cmFSZWZyZXNoQ29uZmlnID0geyAwIH0sDQo+PiArICAgICAgICAgICAgLlJh dGVDb250cm9sID0gY3R4LT5yYywNCj4+ICsgICAgICAgICAgICAuUGljdHVyZVRhcmdldFJlc29s dXRpb24gPSBjdHgtPnJlc29sdXRpb24sDQo+PiArICAgICAgICAgICAgLlNlbGVjdGVkTGF5b3V0 TW9kZSA9DQo+RDNEMTJfVklERU9fRU5DT0RFUl9GUkFNRV9TVUJSRUdJT05fTEFZT1VUX01PREVf RlVMTF9GUkFNRSwNCj4+ICsgICAgICAgICAgICAuRnJhbWVTdWJyZWdpb25zTGF5b3V0RGF0YSA9 IHsgMCB9LA0KPj4gKyAgICAgICAgICAgIC5Db2RlY0dvcFNlcXVlbmNlID0gY3R4LT5nb3AsDQo+ PiArICAgICAgICB9LA0KPj4gKyAgICAgICAgLnBJbnB1dEZyYW1lID0gcGljLT5pbnB1dF9zdXJm YWNlLT50ZXh0dXJlLA0KPj4gKyAgICAgICAgLklucHV0RnJhbWVTdWJyZXNvdXJjZSA9IDAsDQo+ PiArICAgIH07DQo+PiArDQo+PiArICAgIEQzRDEyX1ZJREVPX0VOQ09ERVJfRU5DT0RFRlJBTUVf T1VUUFVUX0FSR1VNRU5UUw0KPm91dHB1dF9hcmdzID0geyAwIH07DQo+PiArDQo+PiArICAgIEQz RDEyX1ZJREVPX0VOQ09ERVJfUkVTT0xWRV9NRVRBREFUQV9JTlBVVF9BUkdVTUVOVFMNCj5pbnB1 dF9tZXRhZGF0YSA9IHsNCj4+ICsgICAgICAgIC5FbmNvZGVyQ29kZWMgPSBjdHgtPmNvZGVjLT5k M2QxMl9jb2RlYywNCj4+ICsgICAgICAgIC5FbmNvZGVyUHJvZmlsZSA9IGN0eC0+cHJvZmlsZS0+ ZDNkMTJfcHJvZmlsZSwNCj4+ICsgICAgICAgIC5FbmNvZGVySW5wdXRGb3JtYXQgPSBmcmFtZXNf aHdjdHgtPmZvcm1hdCwNCj4+ICsgICAgICAgIC5FbmNvZGVkUGljdHVyZUVmZmVjdGl2ZVJlc29s dXRpb24gPSBjdHgtPnJlc29sdXRpb24sDQo+PiArICAgIH07DQo+PiArDQo+PiArICAgIEQzRDEy X1ZJREVPX0VOQ09ERVJfUkVTT0xWRV9NRVRBREFUQV9PVVRQVVRfQVJHVU1FTlRTDQo+b3V0cHV0 X21ldGFkYXRhID0geyAwIH07DQo+PiArDQo+PiArICAgIG1lbXNldChkYXRhLCAwLCBzaXplb2Yo ZGF0YSkpOw0KPj4gKw0KPj4gKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIklzc3Vp bmcgZW5jb2RlIGZvcg0KPnBpYyAlIlBSSWQ2NCIvJSJQUklkNjQiICINCj4+ICsgICAgICAgICAg ICJhcyB0eXBlICVzLlxuIiwgYmFzZV9waWMtPmRpc3BsYXlfb3JkZXIsIGJhc2VfcGljLT5lbmNv ZGVfb3JkZXIsDQo+PiArICAgICAgICAgICBwaWN0dXJlX3R5cGVfbmFtZVtiYXNlX3BpYy0+dHlw ZV0pOw0KPj4gKyAgICBpZiAoYmFzZV9waWMtPm5iX3JlZnNbMF0gPT0gMCAmJiBiYXNlX3BpYy0+ bmJfcmVmc1sxXSA9PSAwKSB7DQo+PiArICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJV RywgIk5vIHJlZmVyZW5jZSBwaWN0dXJlcy5cbiIpOw0KPj4gKyAgICB9IGVsc2Ugew0KPj4gKyAg ICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJMMCByZWZlcnMgdG8iKTsNCj4+ICsg ICAgICAgIGZvciAoaSA9IDA7IGkgPCBiYXNlX3BpYy0+bmJfcmVmc1swXTsgaSsrKSB7DQo+PiAr ICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICIgJSJQUklkNjQiLyUiUFJJ ZDY0LA0KPj4gKyAgICAgICAgICAgICAgICAgICBiYXNlX3BpYy0+cmVmc1swXVtpXS0+ZGlzcGxh eV9vcmRlciwgYmFzZV9waWMtPnJlZnNbMF1baV0tDQo+PmVuY29kZV9vcmRlcik7DQo+PiArICAg ICAgICB9DQo+PiArICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIi5cbiIpOw0K Pj4gKw0KPj4gKyAgICAgICAgaWYgKGJhc2VfcGljLT5uYl9yZWZzWzFdKSB7DQo+PiArICAgICAg ICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJMMSByZWZlcnMgdG8iKTsNCj4+ICsg ICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYmFzZV9waWMtPm5iX3JlZnNbMV07IGkrKykgew0K Pj4gKyAgICAgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIiAlIlBSSWQ2 NCIvJSJQUklkNjQsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICBiYXNlX3BpYy0+cmVmc1sx XVtpXS0+ZGlzcGxheV9vcmRlciwgYmFzZV9waWMtPnJlZnNbMV1baV0tDQo+PmVuY29kZV9vcmRl cik7DQo+PiArICAgICAgICAgICAgfQ0KPj4gKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZf TE9HX0RFQlVHLCAiLlxuIik7DQo+PiArICAgICAgICB9DQo+PiArICAgIH0NCj4+ICsNCj4+ICsg ICAgYXZfYXNzZXJ0MCghYmFzZV9waWMtPmVuY29kZV9pc3N1ZWQpOw0KPj4gKyAgICBmb3IgKGkg PSAwOyBpIDwgYmFzZV9waWMtPm5iX3JlZnNbMF07IGkrKykgew0KPj4gKyAgICAgICAgYXZfYXNz ZXJ0MChiYXNlX3BpYy0+cmVmc1swXVtpXSk7DQo+PiArICAgICAgICBhdl9hc3NlcnQwKGJhc2Vf cGljLT5yZWZzWzBdW2ldLT5lbmNvZGVfaXNzdWVkKTsNCj4+ICsgICAgfQ0KPj4gKyAgICBmb3Ig KGkgPSAwOyBpIDwgYmFzZV9waWMtPm5iX3JlZnNbMV07IGkrKykgew0KPj4gKyAgICAgICAgYXZf YXNzZXJ0MChiYXNlX3BpYy0+cmVmc1sxXVtpXSk7DQo+PiArICAgICAgICBhdl9hc3NlcnQwKGJh c2VfcGljLT5yZWZzWzFdW2ldLT5lbmNvZGVfaXNzdWVkKTsNCj4+ICsgICAgfQ0KPj4gKw0KPj4g KyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIklucHV0IHN1cmZhY2UgaXMgJXAuXG4i LCBwaWMtDQo+PmlucHV0X3N1cmZhY2UtPnRleHR1cmUpOw0KPj4gKw0KPj4gKyAgICBiYXNlX3Bp Yy0+cmVjb25faW1hZ2UgPSBhdl9mcmFtZV9hbGxvYygpOw0KPj4gKyAgICBpZiAoIWJhc2VfcGlj LT5yZWNvbl9pbWFnZSkgew0KPj4gKyAgICAgICAgZXJyID0gQVZFUlJPUihFTk9NRU0pOw0KPj4g KyAgICAgICAgZ290byBmYWlsOw0KPj4gKyAgICB9DQo+PiArDQo+PiArICAgIGVyciA9IGF2X2h3 ZnJhbWVfZ2V0X2J1ZmZlcihiYXNlX2N0eC0+cmVjb25fZnJhbWVzX3JlZiwgYmFzZV9waWMtDQo+ PnJlY29uX2ltYWdlLCAwKTsNCj4+ICsgICAgaWYgKGVyciA8IDApIHsNCj4+ICsgICAgICAgIGVy ciA9IEFWRVJST1IoRU5PTUVNKTsNCj4+ICsgICAgICAgIGdvdG8gZmFpbDsNCj4+ICsgICAgfQ0K Pj4gKw0KPj4gKyAgICBwaWMtPnJlY29uX3N1cmZhY2UgPSAoQVZEM0QxMlZBRnJhbWUgKiliYXNl X3BpYy0+cmVjb25faW1hZ2UtDQo+PmRhdGFbMF07DQo+PiArICAgIGF2X2xvZyhhdmN0eCwgQVZf TE9HX0RFQlVHLCAiUmVjb24gc3VyZmFjZSBpcyAlcC5cbiIsDQo+PiArICAgICAgICAgICBwaWMt PnJlY29uX3N1cmZhY2UtPnRleHR1cmUpOw0KPj4gKw0KPj4gKyAgICBwaWMtPm91dHB1dF9idWZm ZXJfcmVmID0gYXZfYnVmZmVyX3Bvb2xfZ2V0KGN0eC0+b3V0cHV0X2J1ZmZlcl9wb29sKTsNCj4+ ICsgICAgaWYgKCFwaWMtPm91dHB1dF9idWZmZXJfcmVmKSB7DQo+PiArICAgICAgICBlcnIgPSBB VkVSUk9SKEVOT01FTSk7DQo+PiArICAgICAgICBnb3RvIGZhaWw7DQo+PiArICAgIH0NCj4+ICsg ICAgcGljLT5vdXRwdXRfYnVmZmVyID0gKElEM0QxMlJlc291cmNlICopcGljLT5vdXRwdXRfYnVm ZmVyX3JlZi0+ZGF0YTsNCj4+ICsgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJPdXRw dXQgYnVmZmVyIGlzICVwLlxuIiwNCj4+ICsgICAgICAgICAgIHBpYy0+b3V0cHV0X2J1ZmZlcik7 DQo+PiArDQo+PiArICAgIGVyciA9IGQzZDEydmFfZW5jb2RlX2NyZWF0ZV9tZXRhZGF0YV9idWZm ZXJzKGF2Y3R4LCBwaWMpOw0KPj4gKyAgICBpZiAoZXJyIDwgMCkNCj4+ICsgICAgICAgIGdvdG8g ZmFpbDsNCj4+ICsNCj4+ICsgICAgaWYgKGN0eC0+Y29kZWMtPmluaXRfcGljdHVyZV9wYXJhbXMp IHsNCj4+ICsgICAgICAgIGVyciA9IGN0eC0+Y29kZWMtPmluaXRfcGljdHVyZV9wYXJhbXMoYXZj dHgsIHBpYyk7DQo+PiArICAgICAgICBpZiAoZXJyIDwgMCkgew0KPj4gKyAgICAgICAgICAgIGF2 X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGluaXRpYWxpc2UgcGljdHVyZSAi DQo+PiArICAgICAgICAgICAgICAgICAgICJwYXJhbWV0ZXJzOiAlZC5cbiIsIGVycik7DQo+PiAr ICAgICAgICAgICAgZ290byBmYWlsOw0KPj4gKyAgICAgICAgfQ0KPj4gKyAgICB9DQo+PiArDQo+ PiArICAgIGlmIChiYXNlX3BpYy0+dHlwZSA9PSBQSUNUVVJFX1RZUEVfSURSKSB7DQo+PiArICAg ICAgICBpZiAoY3R4LT5jb2RlYy0+d3JpdGVfc2VxdWVuY2VfaGVhZGVyKSB7DQo+PiArICAgICAg ICAgICAgYml0X2xlbiA9IDggKiBzaXplb2YoZGF0YSk7DQo+PiArICAgICAgICAgICAgZXJyID0g Y3R4LT5jb2RlYy0+d3JpdGVfc2VxdWVuY2VfaGVhZGVyKGF2Y3R4LCBkYXRhLCAmYml0X2xlbik7 DQo+PiArICAgICAgICAgICAgaWYgKGVyciA8IDApIHsNCj4+ICsgICAgICAgICAgICAgICAgYXZf bG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gd3JpdGUgcGVyLXNlcXVlbmNlICIN Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICJoZWFkZXI6ICVkLlxuIiwgZXJyKTsNCj4+ICsg ICAgICAgICAgICAgICAgZ290byBmYWlsOw0KPj4gKyAgICAgICAgICAgIH0NCj4+ICsgICAgICAg IH0NCj4+ICsNCj4+ICsgICAgICAgIHBpYy0+aGVhZGVyX3NpemUgPSAoaW50KWJpdF9sZW4gLyA4 Ow0KPj4gKyAgICAgICAgcGljLT5oZWFkZXJfc2l6ZSA9IHBpYy0+aGVhZGVyX3NpemUgJSBjdHgt DQo+PnJlcS5Db21wcmVzc2VkQml0c3RyZWFtQnVmZmVyQWNjZXNzQWxpZ25tZW50ID8NCj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICBGRkFMSUdOKHBpYy0+aGVhZGVyX3NpemUsIGN0eC0N Cj4+cmVxLkNvbXByZXNzZWRCaXRzdHJlYW1CdWZmZXJBY2Nlc3NBbGlnbm1lbnQpIDoNCj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICBwaWMtPmhlYWRlcl9zaXplOw0KPg0KPlRoaXMgbG9v a3MgZHViaW91cz8gIFlvdSd2ZSBsb3N0IHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgaGVhZGVyIGJ5 IGFsaWduaW5nLCBidXQNCj50aGUgZW5jb2RlciBkZWZpbml0ZWx5IG5lZWRzIHRvIGtub3cgaXQg dG8ga25vdyB3aGVyZSB0aGUgYml0c3RyZWFtIGFmdGVyIHRoYXQNCj5zaG91bGQgc3RhcnQuDQoN ClNlZSBodHRwczovL2xlYXJuLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG93cy93aW4zMi9hcGkv ZDNkMTJ2aWRlby9ucy1kM2QxMnZpZGVvLWQzZDEyX2ZlYXR1cmVfZGF0YV92aWRlb19lbmNvZGVy X3Jlc291cmNlX3JlcXVpcmVtZW50cy4NCg0KSSB0cmllZCB3aXRob3V0IGFsaWdubWVudCBhbmQg ZHJpdmVyIHJlcG9ydHMgZmFpbHVyZS4gSWYgZHJpdmVyIHJlcXVlc3RzIHRoaXMgYWxpZ25tZW50 LCBpdCBzZWVtcyB3ZSBoYXZlIHRvIGZvbGxvdyB0aGlzLiBBbmQgeW91IGZpbGwgdGhlIEJpdHN0 cmVhbS5GcmFtZVN0YXJ0T2Zmc2V0IHRvIHRlbGwgd2hlcmUgdG8gc3RhcnQuDQoNCj4NCj4+ICsN Cj4+ICsgICAgICAgIGhyID0gSUQzRDEyUmVzb3VyY2VfTWFwKHBpYy0+b3V0cHV0X2J1ZmZlciwg MCwgTlVMTCwgKHZvaWQgKiopJnB0cik7DQo+PiArICAgICAgICBpZiAoRkFJTEVEKGhyKSkgew0K Pj4gKyAgICAgICAgICAgIGVyciA9IEFWRVJST1JfVU5LTk9XTjsNCj4+ICsgICAgICAgICAgICBn b3RvIGZhaWw7DQo+PiArICAgICAgICB9DQo+PiArDQo+PiArICAgICAgICBtZW1jcHkocHRyLCBk YXRhLCBwaWMtPmhlYWRlcl9zaXplKTsNCj4+ICsgICAgICAgIElEM0QxMlJlc291cmNlX1VubWFw KHBpYy0+b3V0cHV0X2J1ZmZlciwgMCwgTlVMTCk7DQo+PiArICAgIH0NCj4+ICsNCj4+ICsgICAg ZDNkMTJfcmVmcy5OdW1UZXh0dXJlMkRzID0gYmFzZV9waWMtPm5iX3JlZnNbMF0gKyBiYXNlX3Bp Yy0NCj4+bmJfcmVmc1sxXTsNCj4+ICsgICAgaWYgKGQzZDEyX3JlZnMuTnVtVGV4dHVyZTJEcykg ew0KPj4gKyAgICAgICAgZDNkMTJfcmVmcy5wcFRleHR1cmUyRHMgPSBhdl9jYWxsb2MoZDNkMTJf cmVmcy5OdW1UZXh0dXJlMkRzLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZW9mKCpkM2QxMl9yZWZzLnBwVGV4dHVyZTJEcykpOw0KPj4gKyAgICAg ICAgaWYgKCFkM2QxMl9yZWZzLnBwVGV4dHVyZTJEcykgew0KPj4gKyAgICAgICAgICAgIGVyciA9 IEFWRVJST1IoRU5PTUVNKTsNCj4+ICsgICAgICAgICAgICBnb3RvIGZhaWw7DQo+PiArICAgICAg ICB9DQo+PiArDQo+PiArICAgICAgICBpID0gMDsNCj4+ICsgICAgICAgIGZvciAoaiA9IDA7IGog PCBiYXNlX3BpYy0+bmJfcmVmc1swXTsgaisrKQ0KPj4gKyAgICAgICAgICAgIGQzZDEyX3JlZnMu cHBUZXh0dXJlMkRzW2krK10gPSAoKEQzRDEyVkFFbmNvZGVQaWN0dXJlDQo+KiliYXNlX3BpYy0+ cmVmc1swXVtqXSktPnJlY29uX3N1cmZhY2UtPnRleHR1cmU7DQo+PiArICAgICAgICBmb3IgKGog PSAwOyBqIDwgYmFzZV9waWMtPm5iX3JlZnNbMV07IGorKykNCj4+ICsgICAgICAgICAgICBkM2Qx Ml9yZWZzLnBwVGV4dHVyZTJEc1tpKytdID0gKChEM0QxMlZBRW5jb2RlUGljdHVyZQ0KPiopYmFz ZV9waWMtPnJlZnNbMV1bal0pLT5yZWNvbl9zdXJmYWNlLT50ZXh0dXJlOw0KPj4gKyAgICB9DQo+ PiArDQo+PiArICAgIGlucHV0X2FyZ3MuUGljdHVyZUNvbnRyb2xEZXNjLkludHJhUmVmcmVzaEZy YW1lSW5kZXggID0gMDsNCj4+ICsgICAgaWYgKGJhc2VfcGljLT50eXBlICE9IFBJQ1RVUkVfVFlQ RV9CKQ0KPj4gKyAgICAgICAgaW5wdXRfYXJncy5QaWN0dXJlQ29udHJvbERlc2MuRmxhZ3MgfD0N Cj5EM0QxMl9WSURFT19FTkNPREVSX1BJQ1RVUkVfQ09OVFJPTF9GTEFHX1VTRURfQVNfUkVGRVJF TkNFX1BJDQo+Q1RVUkU7DQo+DQo+VGhlIEJfUElDVFVSRV9SRUZFUkVOQ0VTIGZsYWcgaXMgc2V0 IGJlbG93IHNvIHRoaXMgaXNuJ3QgbmVjZXNzYXJpbHkgcmlnaHQuDQo+SGF2ZSB5b3UgdGVzdGVk IHdpdGggYl9kZXB0aCA+IDE/DQoNCkdvb2QgY2F0Y2guIFRoaXMgaXMgYnVnIGFuZCBJJ2xsIG1v ZGlmeSBpdCB0byBiYXNlX3BpYy0+aXNfcmVmZXJlbmNlLiBCX2RlcHRoID4gMSBpcyBhYmxlIHRv IHdvcmsgYWZ0ZXIgdGhhdC4NCg0KPg0KPj4gKw0KPj4gKyAgICBpbnB1dF9hcmdzLlBpY3R1cmVD b250cm9sRGVzYy5QaWN0dXJlQ29udHJvbENvZGVjRGF0YSA9IHBpYy0+cGljX2N0bDsNCj4+ICsg ICAgaW5wdXRfYXJncy5QaWN0dXJlQ29udHJvbERlc2MuUmVmZXJlbmNlRnJhbWVzICAgICAgICAg PSBkM2QxMl9yZWZzOw0KPj4gKyAgICBpbnB1dF9hcmdzLkN1cnJlbnRGcmFtZUJpdHN0cmVhbU1l dGFkYXRhU2l6ZSAgICAgICAgICA9IHBpYy0+aGVhZGVyX3NpemU7DQo+PiArDQo+PiArICAgIG91 dHB1dF9hcmdzLkJpdHN0cmVhbS5wQnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgPSBwaWMtPm91dHB1dF9idWZmZXI7DQo+PiArICAgIG91dHB1dF9hcmdzLkJpdHN0cmVh bS5GcmFtZVN0YXJ0T2Zmc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBwaWMtDQo+Pmhl YWRlcl9zaXplOw0KPj4gKyAgICBvdXRwdXRfYXJncy5SZWNvbnN0cnVjdGVkUGljdHVyZS5wUmVj b25zdHJ1Y3RlZFBpY3R1cmUgICAgICAgICAgID0gcGljLQ0KPj5yZWNvbl9zdXJmYWNlLT50ZXh0 dXJlOw0KPj4gKyAgICBvdXRwdXRfYXJncy5SZWNvbnN0cnVjdGVkUGljdHVyZS5SZWNvbnN0cnVj dGVkUGljdHVyZVN1YnJlc291cmNlID0gMDsNCj4NCj5TbyB0aGlzIGRvZXNuJ3Qgc3VwcG9ydA0K PkQzRDEyX1ZJREVPX0VOQ09ERVJfU1VQUE9SVF9GTEFHX1JFQ09OU1RSVUNURURfRlJBTUVTX1JF UVVJDQo+UkVfVEVYVFVSRV9BUlJBWVM/ICBZb3Ugc2hvdWxkIGNoZWNrIHRoZSBmbGFnIGJlbG93 IHRvIGZhaWwgZWFybHkgbm90aW5nIHRoYXQNCj50aGlzIGlzIG1pc3NpbmcgZnJvbSB0aGUgaW1w bGVtZW50YXRpb24uDQoNCkknbGwgZG8gaXQgaW4gbmV4dCB2ZXJzaW9uLiBUaGFuayB5b3UuDQoN Cj4NCj4+ICsgICAgb3V0cHV0X2FyZ3MuRW5jb2Rlck91dHB1dE1ldGFkYXRhLnBCdWZmZXIgICAg ICAgICAgICAgICAgICAgICAgICA9IHBpYy0NCj4+ZW5jb2RlZF9tZXRhZGF0YTsNCj4+ICsgICAg b3V0cHV0X2FyZ3MuRW5jb2Rlck91dHB1dE1ldGFkYXRhLk9mZnNldCAgICAgICAgICAgICAgICAg ICAgICAgICA9IDA7DQo+PiArDQo+PiArICAgIGlucHV0X21ldGFkYXRhLkhXTGF5b3V0TWV0YWRh dGEucEJ1ZmZlciA9IHBpYy0+ZW5jb2RlZF9tZXRhZGF0YTsNCj4+ICsgICAgaW5wdXRfbWV0YWRh dGEuSFdMYXlvdXRNZXRhZGF0YS5PZmZzZXQgID0gMDsNCj4+ICsNCj4+ICsgICAgb3V0cHV0X21l dGFkYXRhLlJlc29sdmVkTGF5b3V0TWV0YWRhdGEucEJ1ZmZlciA9IHBpYy0NCj4+cmVzb2x2ZWRf bWV0YWRhdGE7DQo+PiArICAgIG91dHB1dF9tZXRhZGF0YS5SZXNvbHZlZExheW91dE1ldGFkYXRh Lk9mZnNldCAgPSAwOw0KPj4gKw0KPj4gKyAgICBlcnIgPSBkM2QxMnZhX2dldF92YWxpZF9jb21t YW5kX2FsbG9jYXRvcihhdmN0eCwNCj4mY29tbWFuZF9hbGxvY2F0b3IpOw0KPj4gKyAgICBpZiAo ZXJyIDwgMCkNCj4+ICsgICAgICAgIGdvdG8gZmFpbDsNCj4+ICsNCj4+ICsgICAgaHIgPSBJRDNE MTJDb21tYW5kQWxsb2NhdG9yX1Jlc2V0KGNvbW1hbmRfYWxsb2NhdG9yKTsNCj4+ICsgICAgaWYg KEZBSUxFRChocikpIHsNCj4+ICsgICAgICAgIGVyciA9IEFWRVJST1JfVU5LTk9XTjsNCj4+ICsg ICAgICAgIGdvdG8gZmFpbDsNCj4+ICsgICAgfQ0KPj4gKw0KPj4gKyAgICBociA9IElEM0QxMlZp ZGVvRW5jb2RlQ29tbWFuZExpc3QyX1Jlc2V0KGNtZF9saXN0LA0KPmNvbW1hbmRfYWxsb2NhdG9y KTsNCj4+ICsgICAgaWYgKEZBSUxFRChocikpIHsNCj4+ICsgICAgICAgIGVyciA9IEFWRVJST1Jf VU5LTk9XTjsNCj4+ICsgICAgICAgIGdvdG8gZmFpbDsNCj4+ICsgICAgfQ0KPj4gKw0KPj4gKyNk ZWZpbmUgVFJBTlNJVElPTl9CQVJSSUVSKHJlcywgYmVmb3JlLCBhZnRlcikgICAgICAgICAgICAg ICAgICAgICAgXA0KPj4gKyAgICAoRDNEMTJfUkVTT1VSQ0VfQkFSUklFUikgeyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KPj4gKyAgICAgICAgLlR5cGUgID0gRDNEMTJf UkVTT1VSQ0VfQkFSUklFUl9UWVBFX1RSQU5TSVRJT04sICAgICAgICAgICAgXA0KPj4gKyAgICAg ICAgLkZsYWdzID0gRDNEMTJfUkVTT1VSQ0VfQkFSUklFUl9GTEFHX05PTkUsICAgICAgICAgICAg ICAgICAgXA0KPj4gKyAgICAgICAgLlRyYW5zaXRpb24gPSB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXA0KPj4gKyAgICAgICAgICAgIC5wUmVzb3VyY2UgICA9 IHJlcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KPj4gKyAgICAgICAg ICAgIC5TdWJyZXNvdXJjZSA9IEQzRDEyX1JFU09VUkNFX0JBUlJJRVJfQUxMX1NVQlJFU09VUkNF UywgXA0KPj4gKyAgICAgICAgICAgIC5TdGF0ZUJlZm9yZSA9IGJlZm9yZSwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXA0KPj4gKyAgICAgICAgICAgIC5TdGF0ZUFmdGVyICA9IGFm dGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KPj4gKyAgICAgICAgfSwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XA0KPj4gKyAgICB9DQo+PiArDQo+PiArICAgIGJhcnJpZXJzWzBdID0gVFJBTlNJVElPTl9CQVJS SUVSKHBpYy0+aW5wdXRfc3VyZmFjZS0+dGV4dHVyZSwNCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRDNEMTJfUkVTT1VSQ0VfU1RBVEVfQ09NTU9OLA0KPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0QxMl9SRVNPVVJDRV9TVEFURV9WSURF T19FTkNPREVfUkVBRCk7DQo+PiArICAgIGJhcnJpZXJzWzFdID0gVFJBTlNJVElPTl9CQVJSSUVS KHBpYy0+b3V0cHV0X2J1ZmZlciwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRDNEMTJfUkVTT1VSQ0VfU1RBVEVfQ09NTU9OLA0KPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBEM0QxMl9SRVNPVVJDRV9TVEFURV9WSURFT19FTkNPREVfV1JJ VEUpOw0KPj4gKyAgICBiYXJyaWVyc1syXSA9IFRSQU5TSVRJT05fQkFSUklFUihwaWMtPnJlY29u X3N1cmZhY2UtPnRleHR1cmUsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEQzRDEyX1JFU09VUkNFX1NUQVRFX0NPTU1PTiwNCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRDNEMTJfUkVTT1VSQ0VfU1RBVEVfVklERU9fRU5DT0RFX1dSSVRF KTsNCj4+ICsgICAgYmFycmllcnNbM10gPSBUUkFOU0lUSU9OX0JBUlJJRVIocGljLT5lbmNvZGVk X21ldGFkYXRhLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0Qx Ml9SRVNPVVJDRV9TVEFURV9DT01NT04sDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEQzRDEyX1JFU09VUkNFX1NUQVRFX1ZJREVPX0VOQ09ERV9XUklURSk7DQo+PiAr ICAgIGJhcnJpZXJzWzRdID0gVFJBTlNJVElPTl9CQVJSSUVSKHBpYy0+cmVzb2x2ZWRfbWV0YWRh dGEsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRDEyX1JFU09V UkNFX1NUQVRFX0NPTU1PTiwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRDNEMTJfUkVTT1VSQ0VfU1RBVEVfVklERU9fRU5DT0RFX1dSSVRFKTsNCj4+ICsNCj4+ICsg ICAgSUQzRDEyVmlkZW9FbmNvZGVDb21tYW5kTGlzdDJfUmVzb3VyY2VCYXJyaWVyKGNtZF9saXN0 LCA1LA0KPmJhcnJpZXJzKTsNCj4+ICsNCj4+ICsgICAgaWYgKGQzZDEyX3JlZnMuTnVtVGV4dHVy ZTJEcykgew0KPj4gKyAgICAgICAgRDNEMTJfUkVTT1VSQ0VfQkFSUklFUiByZWZzX2JhcnJpZXJz WzNdOw0KPj4gKw0KPj4gKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGQzZDEyX3JlZnMuTnVtVGV4 dHVyZTJEczsgaSsrKQ0KPj4gKyAgICAgICAgICAgIHJlZnNfYmFycmllcnNbaV0gPSBUUkFOU0lU SU9OX0JBUlJJRVIoZDNkMTJfcmVmcy5wcFRleHR1cmUyRHNbaV0sDQo+PiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0QxMl9SRVNPVVJDRV9TVEFU RV9DT01NT04sDQo+PiArDQo+RDNEMTJfUkVTT1VSQ0VfU1RBVEVfVklERU9fRU5DT0RFX1JFQUQp Ow0KPj4gKw0KPj4gKyAgICAgICAgSUQzRDEyVmlkZW9FbmNvZGVDb21tYW5kTGlzdDJfUmVzb3Vy Y2VCYXJyaWVyKGNtZF9saXN0LA0KPmQzZDEyX3JlZnMuTnVtVGV4dHVyZTJEcywNCj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZzX2Jh cnJpZXJzKTsNCj4+ICsgICAgfQ0KPj4gKw0KPj4gKyAgICBJRDNEMTJWaWRlb0VuY29kZUNvbW1h bmRMaXN0Ml9FbmNvZGVGcmFtZShjbWRfbGlzdCwgY3R4LQ0KPj5lbmNvZGVyLCBjdHgtPmVuY29k ZXJfaGVhcCwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJmlucHV0X2FyZ3MsICZvdXRwdXRfYXJncyk7DQo+PiArDQo+PiArICAgIGJhcnJpZXJzWzNd ID0gVFJBTlNJVElPTl9CQVJSSUVSKHBpYy0+ZW5jb2RlZF9tZXRhZGF0YSwNCj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEMTJfUkVTT1VSQ0VfU1RBVEVfVklERU9f RU5DT0RFX1dSSVRFLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE M0QxMl9SRVNPVVJDRV9TVEFURV9WSURFT19FTkNPREVfUkVBRCk7DQo+PiArDQo+PiArICAgIElE M0QxMlZpZGVvRW5jb2RlQ29tbWFuZExpc3QyX1Jlc291cmNlQmFycmllcihjbWRfbGlzdCwgMSwN Cj4mYmFycmllcnNbM10pOw0KPj4gKw0KPj4gKw0KPklEM0QxMlZpZGVvRW5jb2RlQ29tbWFuZExp c3QyX1Jlc29sdmVFbmNvZGVyT3V0cHV0TWV0YWRhdGEoY21kX2xpc3QNCj4sICZpbnB1dF9tZXRh ZGF0YSwgJm91dHB1dF9tZXRhZGF0YSk7DQo+PiArDQo+PiArICAgIGlmIChkM2QxMl9yZWZzLk51 bVRleHR1cmUyRHMpIHsNCj4+ICsgICAgICAgIEQzRDEyX1JFU09VUkNFX0JBUlJJRVIgcmVmc19i YXJyaWVyc1szXTsNCj4+ICsNCj4+ICsgICAgICAgIGZvciAoaSA9IDA7IGkgPCBkM2QxMl9yZWZz Lk51bVRleHR1cmUyRHM7IGkrKykNCj4+ICsgICAgICAgICAgICAgICAgICAgIHJlZnNfYmFycmll cnNbaV0gPQ0KPlRSQU5TSVRJT05fQkFSUklFUihkM2QxMl9yZWZzLnBwVGV4dHVyZTJEc1tpXSwN Cj4+ICsNCj5EM0QxMl9SRVNPVVJDRV9TVEFURV9WSURFT19FTkNPREVfUkVBRCwNCj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNE MTJfUkVTT1VSQ0VfU1RBVEVfQ09NTU9OKTsNCj4+ICsNCj4+ICsgICAgICAgIElEM0QxMlZpZGVv RW5jb2RlQ29tbWFuZExpc3QyX1Jlc291cmNlQmFycmllcihjbWRfbGlzdCwNCj5kM2QxMl9yZWZz Lk51bVRleHR1cmUyRHMsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcmVmc19iYXJyaWVycyk7DQo+PiArICAgIH0NCj4+ICsNCj4+ICsg ICAgYmFycmllcnNbMF0gPSBUUkFOU0lUSU9OX0JBUlJJRVIocGljLT5pbnB1dF9zdXJmYWNlLT50 ZXh0dXJlLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0QxMl9S RVNPVVJDRV9TVEFURV9WSURFT19FTkNPREVfUkVBRCwNCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRDNEMTJfUkVTT1VSQ0VfU1RBVEVfQ09NTU9OKTsNCj4+ICsgICAg YmFycmllcnNbMV0gPSBUUkFOU0lUSU9OX0JBUlJJRVIocGljLT5vdXRwdXRfYnVmZmVyLA0KPj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0QxMl9SRVNPVVJDRV9TVEFU RV9WSURFT19FTkNPREVfV1JJVEUsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEQzRDEyX1JFU09VUkNFX1NUQVRFX0NPTU1PTik7DQo+PiArICAgIGJhcnJpZXJzWzJd ID0gVFJBTlNJVElPTl9CQVJSSUVSKHBpYy0+cmVjb25fc3VyZmFjZS0+dGV4dHVyZSwNCj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEMTJfUkVTT1VSQ0VfU1RBVEVf VklERU9fRU5DT0RFX1dSSVRFLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBEM0QxMl9SRVNPVVJDRV9TVEFURV9DT01NT04pOw0KPj4gKyAgICBiYXJyaWVyc1szXSA9 IFRSQU5TSVRJT05fQkFSUklFUihwaWMtPmVuY29kZWRfbWV0YWRhdGEsDQo+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRDEyX1JFU09VUkNFX1NUQVRFX1ZJREVPX0VO Q09ERV9SRUFELA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0Qx Ml9SRVNPVVJDRV9TVEFURV9DT01NT04pOw0KPj4gKyAgICBiYXJyaWVyc1s0XSA9IFRSQU5TSVRJ T05fQkFSUklFUihwaWMtPnJlc29sdmVkX21ldGFkYXRhLA0KPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBEM0QxMl9SRVNPVVJDRV9TVEFURV9WSURFT19FTkNPREVfV1JJ VEUsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRDEyX1JFU09V UkNFX1NUQVRFX0NPTU1PTik7DQo+PiArDQo+PiArICAgIElEM0QxMlZpZGVvRW5jb2RlQ29tbWFu ZExpc3QyX1Jlc291cmNlQmFycmllcihjbWRfbGlzdCwgNSwNCj5iYXJyaWVycyk7DQo+PiArDQo+ PiArICAgIGhyID0gSUQzRDEyVmlkZW9FbmNvZGVDb21tYW5kTGlzdDJfQ2xvc2UoY21kX2xpc3Qp Ow0KPj4gKyAgICBpZiAoRkFJTEVEKGhyKSkgew0KPj4gKyAgICAgICAgZXJyID0gQVZFUlJPUl9V TktOT1dOOw0KPj4gKyAgICAgICAgZ290byBmYWlsOw0KPj4gKyAgICB9DQo+PiArDQo+PiArICAg IGhyID0gSUQzRDEyQ29tbWFuZFF1ZXVlX1dhaXQoY3R4LT5jb21tYW5kX3F1ZXVlLCBwaWMtDQo+ PmlucHV0X3N1cmZhY2UtPnN5bmNfY3R4LmZlbmNlLA0KPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHBpYy0+aW5wdXRfc3VyZmFjZS0+c3luY19jdHguZmVuY2VfdmFsdWUpOw0K Pj4gKyAgICBpZiAoRkFJTEVEKGhyKSkgew0KPj4gKyAgICAgICAgZXJyID0gQVZFUlJPUl9VTktO T1dOOw0KPj4gKyAgICAgICAgZ290byBmYWlsOw0KPj4gKyAgICB9DQo+PiArDQo+PiArICAgIElE M0QxMkNvbW1hbmRRdWV1ZV9FeGVjdXRlQ29tbWFuZExpc3RzKGN0eC0+Y29tbWFuZF9xdWV1ZSwN Cj4xLCAoSUQzRDEyQ29tbWFuZExpc3QgKiopJmN0eC0+Y29tbWFuZF9saXN0KTsNCj4+ICsNCj4+ ICsgICAgaHIgPSBJRDNEMTJDb21tYW5kUXVldWVfU2lnbmFsKGN0eC0+Y29tbWFuZF9xdWV1ZSwg cGljLQ0KPj5pbnB1dF9zdXJmYWNlLT5zeW5jX2N0eC5mZW5jZSwNCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICsrcGljLT5pbnB1dF9zdXJmYWNlLT5zeW5jX2N0eC5mZW5j ZV92YWx1ZSk7DQo+PiArICAgIGlmIChGQUlMRUQoaHIpKSB7DQo+PiArICAgICAgICBlcnIgPSBB VkVSUk9SX1VOS05PV047DQo+PiArICAgICAgICBnb3RvIGZhaWw7DQo+PiArICAgIH0NCj4+ICsN Cj4+ICsgICAgaHIgPSBJRDNEMTJDb21tYW5kUXVldWVfU2lnbmFsKGN0eC0+Y29tbWFuZF9xdWV1 ZSwgY3R4LQ0KPj5zeW5jX2N0eC5mZW5jZSwgKytjdHgtPnN5bmNfY3R4LmZlbmNlX3ZhbHVlKTsN Cj4+ICsgICAgaWYgKEZBSUxFRChocikpIHsNCj4+ICsgICAgICAgIGVyciA9IEFWRVJST1JfVU5L Tk9XTjsNCj4+ICsgICAgICAgIGdvdG8gZmFpbDsNCj4+ICsgICAgfQ0KPj4gKw0KPj4gKyAgICBl cnIgPSBkM2QxMnZhX2Rpc2NhcmRfY29tbWFuZF9hbGxvY2F0b3IoYXZjdHgsIGNvbW1hbmRfYWxs b2NhdG9yLA0KPmN0eC0+c3luY19jdHguZmVuY2VfdmFsdWUpOw0KPj4gKyAgICBpZiAoZXJyIDwg MCkNCj4+ICsgICAgICAgIGdvdG8gZmFpbDsNCj4+ICsNCj4+ICsgICAgcGljLT5mZW5jZV92YWx1 ZSA9IGN0eC0+c3luY19jdHguZmVuY2VfdmFsdWU7DQo+PiArICAgIGJhc2VfcGljLT5lbmNvZGVf aXNzdWVkID0gMTsNCj4+ICsNCj4+ICsgICAgaWYgKGQzZDEyX3JlZnMucHBUZXh0dXJlMkRzKQ0K Pj4gKyAgICAgICAgYXZfZnJlZXAoJmQzZDEyX3JlZnMucHBUZXh0dXJlMkRzKTsNCj4+ICsNCj4+ ICsgICAgcmV0dXJuIDA7DQo+PiArDQo+PiArZmFpbDoNCj4+ICsgICAgaWYgKGNvbW1hbmRfYWxs b2NhdG9yKQ0KPj4gKyAgICAgICAgZDNkMTJ2YV9kaXNjYXJkX2NvbW1hbmRfYWxsb2NhdG9yKGF2 Y3R4LCBjb21tYW5kX2FsbG9jYXRvciwgY3R4LQ0KPj5zeW5jX2N0eC5mZW5jZV92YWx1ZSk7DQo+ PiArDQo+PiArICAgIGlmIChkM2QxMl9yZWZzLnBwVGV4dHVyZTJEcykNCj4+ICsgICAgICAgIGF2 X2ZyZWVwKCZkM2QxMl9yZWZzLnBwVGV4dHVyZTJEcyk7DQo+PiArDQo+PiArICAgIGlmIChjdHgt PmNvZGVjLT5mcmVlX3BpY3R1cmVfcGFyYW1zKQ0KPj4gKyAgICAgICAgY3R4LT5jb2RlYy0+ZnJl ZV9waWN0dXJlX3BhcmFtcyhwaWMpOw0KPj4gKw0KPj4gKyAgICBhdl9mcmFtZV9mcmVlKCZiYXNl X3BpYy0+cmVjb25faW1hZ2UpOw0KPj4gKyAgICBhdl9idWZmZXJfdW5yZWYoJnBpYy0+b3V0cHV0 X2J1ZmZlcl9yZWYpOw0KPj4gKyAgICBwaWMtPm91dHB1dF9idWZmZXIgPSBOVUxMOw0KPj4gKyAg ICBEM0QxMl9PQkpFQ1RfUkVMRUFTRShwaWMtPmVuY29kZWRfbWV0YWRhdGEpOw0KPj4gKyAgICBE M0QxMl9PQkpFQ1RfUkVMRUFTRShwaWMtPnJlc29sdmVkX21ldGFkYXRhKTsNCj4+ICsgICAgcmV0 dXJuIGVycjsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBkM2QxMnZhX2VuY29kZV9kaXNj YXJkKEFWQ29kZWNDb250ZXh0ICphdmN0eCwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRDNEMTJWQUVuY29kZVBpY3R1cmUgKnBpYykNCj4+ICt7DQo+PiArICAgIEhXQmFz ZUVuY29kZVBpY3R1cmUgKmJhc2VfcGljID0gKEhXQmFzZUVuY29kZVBpY3R1cmUgKilwaWM7DQo+ PiArICAgIGQzZDEydmFfZW5jb2RlX3dhaXQoYXZjdHgsIHBpYyk7DQo+PiArDQo+PiArICAgIGlm IChwaWMtPm91dHB1dF9idWZmZXJfcmVmKSB7DQo+PiArICAgICAgICBhdl9sb2coYXZjdHgsIEFW X0xPR19ERUJVRywgIkRpc2NhcmQgb3V0cHV0IGZvciBwaWMgIg0KPj4gKyAgICAgICAgICAgICAg ICIlIlBSSWQ2NCIvJSJQUklkNjQiLlxuIiwNCj4+ICsgICAgICAgICAgICAgICBiYXNlX3BpYy0+ ZGlzcGxheV9vcmRlciwgYmFzZV9waWMtPmVuY29kZV9vcmRlcik7DQo+PiArDQo+PiArICAgICAg ICBhdl9idWZmZXJfdW5yZWYoJnBpYy0+b3V0cHV0X2J1ZmZlcl9yZWYpOw0KPj4gKyAgICAgICAg cGljLT5vdXRwdXRfYnVmZmVyID0gTlVMTDsNCj4+ICsgICAgfQ0KPj4gKw0KPj4gKyAgICBEM0Qx Ml9PQkpFQ1RfUkVMRUFTRShwaWMtPmVuY29kZWRfbWV0YWRhdGEpOw0KPj4gKyAgICBEM0QxMl9P QkpFQ1RfUkVMRUFTRShwaWMtPnJlc29sdmVkX21ldGFkYXRhKTsNCj4+ICsNCj4+ICsgICAgcmV0 dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBIV0Jhc2VFbmNvZGVQaWN0dXJlICpkM2Qx MnZhX2VuY29kZV9hbGxvYyhBVkNvZGVjQ29udGV4dA0KPiphdmN0eCwNCj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFWRnJhbWUgKmZy YW1lKQ0KPj4gK3sNCj4+ICsgICAgRDNEMTJWQUVuY29kZUNvbnRleHQgKmN0eCA9IGF2Y3R4LT5w cml2X2RhdGE7DQo+PiArICAgIEQzRDEyVkFFbmNvZGVQaWN0dXJlICpwaWM7DQo+PiArDQo+PiAr ICAgIHBpYyA9IGF2X21hbGxvY3ooc2l6ZW9mKCpwaWMpKTsNCj4+ICsgICAgaWYgKCFwaWMpDQo+ PiArICAgICAgICByZXR1cm4gTlVMTDsNCj4+ICsNCj4+ICsgICAgaWYgKGN0eC0+Y29kZWMtPnBp Y3R1cmVfcHJpdl9kYXRhX3NpemUgPiAwKSB7DQo+PiArICAgICAgICBwaWMtPmJhc2UucHJpdl9k YXRhID0gYXZfbWFsbG9jeihjdHgtPmNvZGVjLT5waWN0dXJlX3ByaXZfZGF0YV9zaXplKTsNCj4+ ICsgICAgICAgIGlmICghcGljLT5iYXNlLnByaXZfZGF0YSkgew0KPj4gKyAgICAgICAgICAgIGF2 X2ZyZWVwKCZwaWMpOw0KPj4gKyAgICAgICAgICAgIHJldHVybiBOVUxMOw0KPj4gKyAgICAgICAg fQ0KPj4gKyAgICB9DQo+PiArDQo+PiArICAgIHBpYy0+aW5wdXRfc3VyZmFjZSA9IChBVkQzRDEy VkFGcmFtZSAqKWZyYW1lLT5kYXRhWzBdOw0KPj4gKw0KPj4gKyAgICByZXR1cm4gKEhXQmFzZUVu Y29kZVBpY3R1cmUgKilwaWM7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgZDNkMTJ2YV9l bmNvZGVfZnJlZShBVkNvZGVjQ29udGV4dCAqYXZjdHgsDQo+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEhXQmFzZUVuY29kZVBpY3R1cmUgKmJhc2VfcGljKQ0KPj4gK3sNCj4+ICsg ICAgRDNEMTJWQUVuY29kZUNvbnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7DQo+PiArICAg IEQzRDEyVkFFbmNvZGVQaWN0dXJlICpwaWMgPSAoRDNEMTJWQUVuY29kZVBpY3R1cmUgKiliYXNl X3BpYzsNCj4+ICsNCj4+ICsgICAgaWYgKGJhc2VfcGljLT5lbmNvZGVfaXNzdWVkKQ0KPj4gKyAg ICAgICAgZDNkMTJ2YV9lbmNvZGVfZGlzY2FyZChhdmN0eCwgcGljKTsNCj4+ICsNCj4+ICsgICAg aWYgKGN0eC0+Y29kZWMtPmZyZWVfcGljdHVyZV9wYXJhbXMpDQo+PiArICAgICAgICBjdHgtPmNv ZGVjLT5mcmVlX3BpY3R1cmVfcGFyYW1zKHBpYyk7DQo+PiArDQo+PiArICAgIGF2X2ZyYW1lX2Zy ZWUoJmJhc2VfcGljLT5pbnB1dF9pbWFnZSk7DQo+PiArICAgIGF2X2ZyYW1lX2ZyZWUoJmJhc2Vf cGljLT5yZWNvbl9pbWFnZSk7DQo+PiArDQo+PiArICAgIGF2X2J1ZmZlcl91bnJlZigmYmFzZV9w aWMtPm9wYXF1ZV9yZWYpOw0KPj4gKw0KPj4gKyAgICBhdl9mcmVlcCgmYmFzZV9waWMtPnByaXZf ZGF0YSk7DQo+PiArDQo+PiArICAgIGF2X2ZyZWUocGljKTsNCj4+ICsNCj4+ICsgICAgcmV0dXJu IDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgZDNkMTJ2YV9lbmNvZGVfZ2V0X2J1ZmZl cl9zaXplKEFWQ29kZWNDb250ZXh0ICphdmN0eCwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBEM0QxMlZBRW5jb2RlUGljdHVyZSAqcGljLCB1aW50NjRfdCAq c2l6ZSkNCj4NCj5zaXplX3QgZm9yIHNpemUgb2Ygb2JqZWN0cyBpbiBtZW1vcnkuDQoNClN1cmUu DQoNCj4NCj4+ICt7DQo+PiArICAgIEQzRDEyX1ZJREVPX0VOQ09ERVJfT1VUUFVUX01FVEFEQVRB ICptZXRhID0gTlVMTDsNCj4+ICsgICAgdWludDhfdCAqZGF0YTsNCj4+ICsNCj4+ICsgICAgSUQz RDEyUmVzb3VyY2VfTWFwKHBpYy0+cmVzb2x2ZWRfbWV0YWRhdGEsIDAsIE5VTEwsICh2b2lkICoq KSZkYXRhKTsNCj4NCj5DYW4gZmFpbC4NCg0KV2lsbCBhZGQuDQoNCj4NCj4+ICsNCj4+ICsgICAg bWV0YSA9IChEM0QxMl9WSURFT19FTkNPREVSX09VVFBVVF9NRVRBREFUQSAqKWRhdGE7DQo+PiAr DQo+PiArICAgIGlmIChtZXRhLT5FbmNvZGVFcnJvckZsYWdzICE9DQo+RDNEMTJfVklERU9fRU5D T0RFUl9FTkNPREVfRVJST1JfRkxBR19OT19FUlJPUikgew0KPj4gKyAgICAgICAgYXZfbG9nKGF2 Y3R4LCBBVl9MT0dfRVJST1IsICJFbmNvZGUgZmFpbGVkICUiUFJJdTY0IlxuIiwgbWV0YS0NCj4+ RW5jb2RlRXJyb3JGbGFncyk7DQo+PiArICAgICAgICByZXR1cm4gLTE7DQo+PiArICAgIH0NCj4+ ICsNCj4+ICsgICAgYXZfYXNzZXJ0MChtZXRhLT5FbmNvZGVkQml0c3RyZWFtV3JpdHRlbkJ5dGVz Q291bnQgPiAwKTsNCj4NCj5XaHkgaXMgdGhpcyBhbiBhc3NlcnRpb24gcmF0aGVyIHRoYW4gYW4g ZXJyb3IgcmV0dXJuPw0KDQpXaWxsIGNoYW5nZS4NCg0KPg0KPj4gKyAgICAqc2l6ZSA9IG1ldGEt PkVuY29kZWRCaXRzdHJlYW1Xcml0dGVuQnl0ZXNDb3VudDsNCj4+ICsNCj4+ICsgICAgSUQzRDEy UmVzb3VyY2VfVW5tYXAocGljLT5yZXNvbHZlZF9tZXRhZGF0YSwgMCwgTlVMTCk7DQo+PiArICAg IHJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGQzZDEydmFfZW5jb2RlX2dl dF9jb2RlZF9kYXRhKEFWQ29kZWNDb250ZXh0ICphdmN0eCwNCj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEQzRDEyVkFFbmNvZGVQaWN0dXJlICpwaWMsIEFWUGFj a2V0ICpwa3QpDQo+PiArew0KPj4gKyAgICBpbnQgZXJyOw0KPj4gKyAgICB1aW50OF90ICpwdHIs ICptYXBwZWRfZGF0YTsNCj4+ICsgICAgdWludDY0X3QgdG90YWxfc2l6ZSA9IDA7DQo+PiArDQo+ PiArICAgIGVyciA9IGQzZDEydmFfZW5jb2RlX2dldF9idWZmZXJfc2l6ZShhdmN0eCwgcGljLCAm dG90YWxfc2l6ZSk7DQo+PiArICAgIGlmIChlcnIgPCAwKQ0KPj4gKyAgICAgICAgZ290byBlbmQ7 DQo+PiArDQo+PiArICAgIHRvdGFsX3NpemUgKz0gcGljLT5oZWFkZXJfc2l6ZTsNCj4+ICsgICAg YXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJPdXRwdXQgYnVmZmVyIHNpemUgJSJQUklkNjQi XG4iLA0KPnRvdGFsX3NpemUpOw0KPj4gKw0KPj4gKyAgICBJRDNEMTJSZXNvdXJjZV9NYXAocGlj LT5vdXRwdXRfYnVmZmVyLCAwLCBOVUxMLCAodm9pZA0KPioqKSZtYXBwZWRfZGF0YSk7DQo+DQo+ Q2FuIGZhaWwuDQoNCldpbGwgYWRkLg0KDQo+DQo+PiArDQo+PiArICAgIGVyciA9IGZmX2dldF9l bmNvZGVfYnVmZmVyKGF2Y3R4LCBwa3QsIHRvdGFsX3NpemUsIDApOw0KPj4gKyAgICBpZiAoZXJy IDwgMCkNCj4+ICsgICAgICAgIGdvdG8gZW5kOw0KPj4gKyAgICBwdHIgPSBwa3QtPmRhdGE7DQo+ PiArDQo+PiArICAgIG1lbWNweShwdHIsIG1hcHBlZF9kYXRhLCB0b3RhbF9zaXplKTsNCj4+ICsN Cj4+ICsgICAgSUQzRDEyUmVzb3VyY2VfVW5tYXAocGljLT5vdXRwdXRfYnVmZmVyLCAwLCBOVUxM KTsNCj4+ICsNCj4+ICtlbmQ6DQo+PiArICAgIGF2X2J1ZmZlcl91bnJlZigmcGljLT5vdXRwdXRf YnVmZmVyX3JlZik7DQo+PiArICAgIHBpYy0+b3V0cHV0X2J1ZmZlciA9IE5VTEw7DQo+PiArICAg IHJldHVybiBlcnI7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgZDNkMTJ2YV9lbmNvZGVf b3V0cHV0KEFWQ29kZWNDb250ZXh0ICphdmN0eCwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBIV0Jhc2VFbmNvZGVQaWN0dXJlICpiYXNlX3BpYywgQVZQYWNrZXQgKnBrdCkN Cj4+ICt7DQo+PiArICAgIEQzRDEyVkFFbmNvZGVDb250ZXh0ICpjdHggPSBhdmN0eC0+cHJpdl9k YXRhOw0KPj4gKyAgICBEM0QxMlZBRW5jb2RlUGljdHVyZSAqcGljID0gKEQzRDEyVkFFbmNvZGVQ aWN0dXJlICopYmFzZV9waWM7DQo+PiArICAgIEFWUGFja2V0ICpwa3RfcHRyID0gcGt0Ow0KPj4g KyAgICBpbnQgZXJyOw0KPj4gKw0KPj4gKyAgICBlcnIgPSBkM2QxMnZhX2VuY29kZV93YWl0KGF2 Y3R4LCBwaWMpOw0KPj4gKyAgICBpZiAoZXJyIDwgMCkNCj4+ICsgICAgICAgIHJldHVybiBlcnI7 DQo+PiArDQo+PiArICAgIGVyciA9IGQzZDEydmFfZW5jb2RlX2dldF9jb2RlZF9kYXRhKGF2Y3R4 LCBwaWMsIHBrdCk7DQo+PiArICAgIGlmIChlcnIgPCAwKQ0KPj4gKyAgICAgICAgcmV0dXJuIGVy cjsNCj4+ICsNCj4+ICsgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJPdXRwdXQgcmVh ZCBmb3INCj5waWMgJSJQUklkNjQiLyUiUFJJZDY0Ii5cbiIsDQo+PiArICAgICAgICAgICBiYXNl X3BpYy0+ZGlzcGxheV9vcmRlciwgYmFzZV9waWMtPmVuY29kZV9vcmRlcik7DQo+PiArDQo+PiAr ICAgIGZmX2h3X2Jhc2VfZW5jb2RlX3NldF9vdXRwdXRfcHJvcGVydHkoYXZjdHgsIGJhc2VfcGlj LCBwa3RfcHRyLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGN0eC0+Y29kZWMtPmZsYWdzICYgRkxBR19USU1FU1RBTVBfTk9fREVMQVkpOw0KPj4gKw0KPj4g KyAgICByZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBkM2QxMnZhX2VuY29k ZV9zZXRfcHJvZmlsZShBVkNvZGVjQ29udGV4dCAqYXZjdHgpDQo+PiArew0KPj4gKyAgICBIV0Jh c2VFbmNvZGVDb250ZXh0ICpiYXNlX2N0eCA9IGF2Y3R4LT5wcml2X2RhdGE7DQo+PiArICAgIEQz RDEyVkFFbmNvZGVDb250ZXh0ICpjdHggICAgID0gYXZjdHgtPnByaXZfZGF0YTsNCj4+ICsgICAg Y29uc3QgRDNEMTJWQUVuY29kZVByb2ZpbGUgKnByb2ZpbGU7DQo+PiArICAgIGNvbnN0IEFWUGl4 Rm10RGVzY3JpcHRvciAqZGVzYzsNCj4+ICsgICAgaW50IGksIGRlcHRoOw0KPj4gKw0KPj4gKyAg ICBkZXNjID0gYXZfcGl4X2ZtdF9kZXNjX2dldChiYXNlX2N0eC0+aW5wdXRfZnJhbWVzLT5zd19m b3JtYXQpOw0KPj4gKyAgICBpZiAoIWRlc2MpIHsNCj4+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwg QVZfTE9HX0VSUk9SLCAiSW52YWxpZCBpbnB1dCBwaXhmbXQgKCVkKS5cbiIsDQo+PiArICAgICAg ICAgICAgICAgYmFzZV9jdHgtPmlucHV0X2ZyYW1lcy0+c3dfZm9ybWF0KTsNCj4+ICsgICAgICAg IHJldHVybiBBVkVSUk9SKEVJTlZBTCk7DQo+PiArICAgIH0NCj4+ICsNCj4+ICsgICAgZGVwdGgg PSBkZXNjLT5jb21wWzBdLmRlcHRoOw0KPj4gKyAgICBmb3IgKGkgPSAxOyBpIDwgZGVzYy0+bmJf Y29tcG9uZW50czsgaSsrKSB7DQo+PiArICAgICAgICBpZiAoZGVzYy0+Y29tcFtpXS5kZXB0aCAh PSBkZXB0aCkgew0KPj4gKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAi SW52YWxpZCBpbnB1dCBwaXhmbXQgKCVzKS5cbiIsDQo+PiArICAgICAgICAgICAgICAgICAgIGRl c2MtPm5hbWUpOw0KPj4gKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7DQo+PiAr ICAgICAgICB9DQo+PiArICAgIH0NCj4+ICsgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9T RSwgIklucHV0IHN1cmZhY2UgZm9ybWF0IGlzICVzLlxuIiwNCj4+ICsgICAgICAgICAgIGRlc2Mt Pm5hbWUpOw0KPj4gKw0KPj4gKyAgICBhdl9hc3NlcnQwKGN0eC0+Y29kZWMtPnByb2ZpbGVzKTsN Cj4+ICsgICAgZm9yIChpID0gMDsgKGN0eC0+Y29kZWMtPnByb2ZpbGVzW2ldLmF2X3Byb2ZpbGUg IT0NCj4+ICsgICAgICAgICAgICAgICAgIEFWX1BST0ZJTEVfVU5LTk9XTik7IGkrKykgew0KPj4g KyAgICAgICAgcHJvZmlsZSA9ICZjdHgtPmNvZGVjLT5wcm9maWxlc1tpXTsNCj4+ICsgICAgICAg IGlmIChkZXB0aCAgICAgICAgICAgICAgICE9IHByb2ZpbGUtPmRlcHRoIHx8DQo+PiArICAgICAg ICAgICAgZGVzYy0+bmJfY29tcG9uZW50cyAhPSBwcm9maWxlLT5uYl9jb21wb25lbnRzKQ0KPj4g KyAgICAgICAgICAgIGNvbnRpbnVlOw0KPj4gKyAgICAgICAgaWYgKGRlc2MtPm5iX2NvbXBvbmVu dHMgPiAxICYmDQo+PiArICAgICAgICAgICAgKGRlc2MtPmxvZzJfY2hyb21hX3cgIT0gcHJvZmls ZS0+bG9nMl9jaHJvbWFfdyB8fA0KPj4gKyAgICAgICAgICAgICBkZXNjLT5sb2cyX2Nocm9tYV9o ICE9IHByb2ZpbGUtPmxvZzJfY2hyb21hX2gpKQ0KPj4gKyAgICAgICAgICAgIGNvbnRpbnVlOw0K Pj4gKyAgICAgICAgaWYgKGF2Y3R4LT5wcm9maWxlICE9IHByb2ZpbGUtPmF2X3Byb2ZpbGUgJiYN Cj4+ICsgICAgICAgICAgICBhdmN0eC0+cHJvZmlsZSAhPSBBVl9QUk9GSUxFX1VOS05PV04pDQo+ PiArICAgICAgICAgICAgY29udGludWU7DQo+PiArDQo+PiArICAgICAgICBjdHgtPnByb2ZpbGUg PSBwcm9maWxlOw0KPj4gKyAgICAgICAgYnJlYWs7DQo+PiArICAgIH0NCj4+ICsgICAgaWYgKCFj dHgtPnByb2ZpbGUpIHsNCj4+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAi Tm8gdXNhYmxlIGVuY29kaW5nIHByb2ZpbGUgZm91bmQuXG4iKTsNCj4+ICsgICAgICAgIHJldHVy biBBVkVSUk9SKEVOT1NZUyk7DQo+PiArICAgIH0NCj4+ICsNCj4+ICsgICAgYXZjdHgtPnByb2Zp bGUgPSBwcm9maWxlLT5hdl9wcm9maWxlOw0KPj4gKyAgICByZXR1cm4gMDsNCj4+ICt9DQo+PiAr DQo+PiArc3RhdGljIGNvbnN0IEQzRDEyVkFFbmNvZGVSQ01vZGUgZDNkMTJ2YV9lbmNvZGVfcmNf bW9kZXNbXSA9IHsNCj4+ICsgICAgLy8gICAgICAgICAgICAgICAgICAgICBCaXRyYXRlICAgUXVh bGl0eQ0KPj4gKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgIHwgTWF4cmF0ZSB8IEhSRC9W QlYNCj4+ICsgICAgeyB7IDAgfSB9LCAvLyAgICAgICAgICAgICB8ICAgIHwgICAgfCAgICB8DQo+ PiArICAgIHsgeyBSQ19NT0RFX0NRUCwgICJDUVAiLCAgMCwgICAwLCAgIDEsICAgMCB9LCAxLA0K PkQzRDEyX1ZJREVPX0VOQ09ERVJfUkFURV9DT05UUk9MX01PREVfQ1FQIH0sDQo+PiArICAgIHsg eyBSQ19NT0RFX0NCUiwgICJDQlIiLCAgMSwgICAwLCAgIDAsICAgMSB9LCAxLA0KPkQzRDEyX1ZJ REVPX0VOQ09ERVJfUkFURV9DT05UUk9MX01PREVfQ0JSIH0sDQo+PiArICAgIHsgeyBSQ19NT0RF X1ZCUiwgICJWQlIiLCAgMSwgICAxLCAgIDAsICAgMSB9LCAxLA0KPkQzRDEyX1ZJREVPX0VOQ09E RVJfUkFURV9DT05UUk9MX01PREVfVkJSIH0sDQo+PiArICAgIHsgeyBSQ19NT0RFX0lDUSwgICJJ Q1EiLCAgMCwgICAwLCAgIDEsICAgMCB9LCAwIH0sDQo+PiArICAgIHsgeyBSQ19NT0RFX1FWQlIs ICJRVkJSIiwgMSwgICAxLCAgIDEsICAgMSB9LCAxLA0KPkQzRDEyX1ZJREVPX0VOQ09ERVJfUkFU RV9DT05UUk9MX01PREVfUVZCUiB9LA0KPj4gKyAgICB7IHsgUkNfTU9ERV9BVkJSLCAiQVZCUiIs IDEsICAgMCwgICAwLCAgIDAgfSwgMCB9LA0KPj4gK307DQo+PiArDQo+PiArc3RhdGljIGludCBj aGVja19yYXRlX2NvbnRyb2xfc3VwcG9ydChBVkNvZGVjQ29udGV4dCAqYXZjdHgsIGNvbnN0DQo+ RDNEMTJWQUVuY29kZVJDTW9kZSAqcmNfbW9kZSkNCj4+ICt7DQo+PiArICAgIEhSRVNVTFQgaHI7 DQo+PiArICAgIEQzRDEyVkFFbmNvZGVDb250ZXh0ICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOw0K Pj4gKyAgICBEM0QxMl9GRUFUVVJFX0RBVEFfVklERU9fRU5DT0RFUl9SQVRFX0NPTlRST0xfTU9E RQ0KPmQzZDEyX3JjX21vZGUgPSB7DQo+PiArICAgICAgICAuQ29kZWMgPSBjdHgtPmNvZGVjLT5k M2QxMl9jb2RlYywNCj4+ICsgICAgfTsNCj4+ICsNCj4+ICsgICAgaWYgKCFyY19tb2RlLT5kM2Qx Ml9tb2RlKQ0KPj4gKyAgICAgICAgcmV0dXJuIDA7DQo+PiArDQo+PiArICAgIGQzZDEyX3JjX21v ZGUuSXNTdXBwb3J0ZWQgPSAwOw0KPj4gKyAgICBkM2QxMl9yY19tb2RlLlJhdGVDb250cm9sTW9k ZSA9IHJjX21vZGUtPmQzZDEyX21vZGU7DQo+PiArDQo+PiArICAgIGhyID0gSUQzRDEyVmlkZW9E ZXZpY2UzX0NoZWNrRmVhdHVyZVN1cHBvcnQoY3R4LT52aWRlb19kZXZpY2UzLA0KPj4gKw0KPkQz RDEyX0ZFQVRVUkVfVklERU9fRU5DT0RFUl9SQVRFX0NPTlRST0xfTU9ERSwNCj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZDNkMTJfcmNfbW9kZSwg c2l6ZW9mKGQzZDEyX3JjX21vZGUpKTsNCj4+ICsgICAgaWYgKEZBSUxFRChocikpIHsNCj4+ICsg ICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGNoZWNrIHJhdGUg Y29udHJvbA0KPnN1cHBvcnQuXG4iKTsNCj4+ICsgICAgICAgIHJldHVybiAwOw0KPj4gKyAgICB9 DQo+PiArDQo+PiArICAgIHJldHVybiBkM2QxMl9yY19tb2RlLklzU3VwcG9ydGVkOw0KPj4gK30N Cj4+ICsNCj4+ICtzdGF0aWMgaW50IGQzZDEydmFfZW5jb2RlX2luaXRfcmF0ZV9jb250cm9sKEFW Q29kZWNDb250ZXh0ICphdmN0eCkNCj4+ICt7DQo+PiArICAgIEhXQmFzZUVuY29kZUNvbnRleHQg KmJhc2VfY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsNCj4+ICsgICAgRDNEMTJWQUVuY29kZUNvbnRl eHQgICAgICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOw0KPj4gKyAgICBIV0Jhc2VFbmNvZGVSQ0Nv bmZpZ3VyZSByY19jb25mID0geyAwIH07DQo+PiArICAgIGludCBlcnI7DQo+PiArICAgIGNvbnN0 IEQzRDEyVkFFbmNvZGVSQ01vZGUgKnJjX21vZGU7DQo+PiArDQo+PiArICAgIC8vIFJhdGUgY29u dHJvbCBtb2RlIHNlbGVjdGlvbjoNCj4+ICsgICAgLy8gKiBJZiB0aGUgdXNlciBoYXMgc2V0IGEg bW9kZSBleHBsaWNpdGx5IHdpdGggdGhlIHJjX21vZGUgb3B0aW9uLA0KPj4gKyAgICAvLyAgIHVz ZSBpdCBhbmQgZmFpbCBpZiBpdCBpcyBub3QgYXZhaWxhYmxlLg0KPj4gKyAgICAvLyAqIElmIGFu IGV4cGxpY2l0IFFQIG9wdGlvbiBoYXMgYmVlbiBzZXQsIHVzZSBDUVAuDQo+PiArICAgIC8vICog SWYgdGhlIGNvZGVjIGlzIENRLW9ubHksIHVzZSBDUVAuDQo+PiArICAgIC8vICogSWYgdGhlIFFT Q0FMRSBhdmNvZGVjIG9wdGlvbiBpcyBzZXQsIHVzZSBDUVAuDQo+PiArICAgIC8vICogSWYgYml0 cmF0ZSBhbmQgcXVhbGl0eSBhcmUgYm90aCBzZXQsIHRyeSBRVkJSLg0KPj4gKyAgICAvLyAqIElm IHF1YWxpdHkgaXMgc2V0LCB0cnkgSUNRLCB0aGVuIENRUC4NCj4+ICsgICAgLy8gKiBJZiBiaXRy YXRlIGFuZCBtYXhyYXRlIGFyZSBzZXQgYW5kIGhhdmUgdGhlIHNhbWUgdmFsdWUsIHRyeSBDQlIu DQo+PiArICAgIC8vICogSWYgYSBiaXRyYXRlIGlzIHNldCwgdHJ5IEFWQlIsIHRoZW4gVkJSLCB0 aGVuIENCUi4NCj4+ICsgICAgLy8gKiBJZiBubyBiaXRyYXRlIGlzIHNldCwgdHJ5IElDUSwgdGhl biBDUVAuDQo+PiArDQo+PiArI2RlZmluZSBUUllfUkNfTU9ERShtb2RlLCBmYWlsKSBkbyB7IFwN Cj4+ICsgICAgICAgIHJjX21vZGUgPSAmZDNkMTJ2YV9lbmNvZGVfcmNfbW9kZXNbbW9kZV07IFwN Cj4+ICsgICAgICAgIGlmICghKHJjX21vZGUtPmQzZDEyX21vZGUgJiYgY2hlY2tfcmF0ZV9jb250 cm9sX3N1cHBvcnQoYXZjdHgsDQo+cmNfbW9kZSkpKSB7IFwNCj4+ICsgICAgICAgICAgICBpZiAo ZmFpbCkgeyBcDQo+PiArICAgICAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9S LCAiRHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgJXMgIiBcDQo+PiArICAgICAgICAgICAgICAgICAg ICAgICAiUkMgbW9kZS5cbiIsIHJjX21vZGUtPmJhc2UubmFtZSk7IFwNCj4+ICsgICAgICAgICAg ICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsgXA0KPj4gKyAgICAgICAgICAgIH0gXA0KPj4g KyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiRHJpdmVyIGRvZXMgbm90 IHN1cHBvcnQgJXMgIiBcDQo+PiArICAgICAgICAgICAgICAgICAgICJSQyBtb2RlLlxuIiwgcmNf bW9kZS0+YmFzZS5uYW1lKTsgXA0KPj4gKyAgICAgICAgICAgIHJjX21vZGUgPSBOVUxMOyBcDQo+ PiArICAgICAgICB9IGVsc2UgeyBcDQo+PiArICAgICAgICAgICAgZ290byByY19tb2RlX2ZvdW5k OyBcDQo+PiArICAgICAgICB9IFwNCj4+ICsgICAgfSB3aGlsZSAoMCkNCj4+ICsNCj4+ICsgICAg aWYgKGJhc2VfY3R4LT5leHBsaWNpdF9yY19tb2RlKQ0KPj4gKyAgICAgICAgVFJZX1JDX01PREUo YmFzZV9jdHgtPmV4cGxpY2l0X3JjX21vZGUsIDEpOw0KPj4gKw0KPj4gKyAgICBpZiAoYmFzZV9j dHgtPmV4cGxpY2l0X3FwKQ0KPj4gKyAgICAgICAgVFJZX1JDX01PREUoUkNfTU9ERV9DUVAsIDEp Ow0KPj4gKw0KPj4gKyAgICBpZiAoY3R4LT5jb2RlYy0+ZmxhZ3MgJiBGTEFHX0NPTlNUQU5UX1FV QUxJVFlfT05MWSkNCj4+ICsgICAgICAgIFRSWV9SQ19NT0RFKFJDX01PREVfQ1FQLCAxKTsNCj4+ ICsNCj4+ICsgICAgaWYgKGF2Y3R4LT5mbGFncyAmIEFWX0NPREVDX0ZMQUdfUVNDQUxFKQ0KPj4g KyAgICAgICAgVFJZX1JDX01PREUoUkNfTU9ERV9DUVAsIDEpOw0KPj4gKw0KPj4gKyAgICBpZiAo YXZjdHgtPmJpdF9yYXRlID4gMCAmJiBhdmN0eC0+Z2xvYmFsX3F1YWxpdHkgPiAwKQ0KPj4gKyAg ICAgICAgVFJZX1JDX01PREUoUkNfTU9ERV9RVkJSLCAwKTsNCj4+ICsNCj4+ICsgICAgaWYgKGF2 Y3R4LT5nbG9iYWxfcXVhbGl0eSA+IDApIHsNCj4+ICsgICAgICAgIFRSWV9SQ19NT0RFKFJDX01P REVfSUNRLCAwKTsNCj4+ICsgICAgICAgIFRSWV9SQ19NT0RFKFJDX01PREVfQ1FQLCAwKTsNCj4+ ICsgICAgfQ0KPj4gKw0KPj4gKyAgICBpZiAoYXZjdHgtPmJpdF9yYXRlID4gMCAmJiBhdmN0eC0+ cmNfbWF4X3JhdGUgPT0gYXZjdHgtPmJpdF9yYXRlKQ0KPj4gKyAgICAgICAgVFJZX1JDX01PREUo UkNfTU9ERV9DQlIsIDApOw0KPj4gKw0KPj4gKyAgICBpZiAoYXZjdHgtPmJpdF9yYXRlID4gMCkg ew0KPj4gKyAgICAgICAgVFJZX1JDX01PREUoUkNfTU9ERV9BVkJSLCAwKTsNCj4+ICsgICAgICAg IFRSWV9SQ19NT0RFKFJDX01PREVfVkJSLCAwKTsNCj4+ICsgICAgICAgIFRSWV9SQ19NT0RFKFJD X01PREVfQ0JSLCAwKTsNCj4+ICsgICAgfSBlbHNlIHsNCj4+ICsgICAgICAgIFRSWV9SQ19NT0RF KFJDX01PREVfSUNRLCAwKTsNCj4+ICsgICAgICAgIFRSWV9SQ19NT0RFKFJDX01PREVfQ1FQLCAw KTsNCj4+ICsgICAgfQ0KPj4gKw0KPj4gKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwg IkRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IGFueSAiDQo+PiArICAgICAgICAgICAiUkMgbW9kZSBj b21wYXRpYmxlIHdpdGggc2VsZWN0ZWQgb3B0aW9ucy5cbiIpOw0KPj4gKyAgICByZXR1cm4gQVZF UlJPUihFSU5WQUwpOw0KPj4gKw0KPj4gK3JjX21vZGVfZm91bmQ6DQo+PiArICAgIGVyciA9IGZm X2h3X2Jhc2VfcmNfbW9kZV9jb25maWd1cmUoYXZjdHgsIChjb25zdA0KPkhXQmFzZUVuY29kZVJD TW9kZSopcmNfbW9kZSwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjdHgtPmNvZGVjLT5kZWZhdWx0X3F1YWxpdHksICZyY19jb25mKTsNCj4+ICsgICAgaWYgKGVy ciA8IDApDQo+PiArICAgICAgICByZXR1cm4gZXJyOw0KPj4gKw0KPj4gKyAgICBjdHgtPnJjX21v ZGUgPSByY19tb2RlOw0KPj4gKw0KPj4gKyAgICBjdHgtPnJjLkZsYWdzICAgICAgICAgICAgICAg ICAgICAgICA9DQo+RDNEMTJfVklERU9fRU5DT0RFUl9SQVRFX0NPTlRST0xfRkxBR19OT05FOw0K Pj4gKyAgICBjdHgtPnJjLlRhcmdldEZyYW1lUmF0ZS5OdW1lcmF0b3IgICA9IHJjX2NvbmYuZnJf bnVtOw0KPj4gKyAgICBjdHgtPnJjLlRhcmdldEZyYW1lUmF0ZS5EZW5vbWluYXRvciA9IHJjX2Nv bmYuZnJfZGVuOw0KPj4gKyAgICBjdHgtPnJjLk1vZGUgICAgICAgICAgICAgICAgICAgICAgICA9 IHJjX21vZGUtPmQzZDEyX21vZGU7DQo+PiArDQo+PiArICAgIHN3aXRjaCAocmNfbW9kZS0+YmFz ZS5tb2RlKSB7DQo+PiArICAgICAgICBjYXNlIFJDX01PREVfQ1FQOg0KPj4gKyAgICAgICAgICAg IC8vIGNxcCBDb25maWdQYXJhbXMgd2lsbCBiZSB1cGRhdGVkIGluIGN0eC0+Y29kZWMtPmNvbmZp Z3VyZQ0KPj4gKyAgICAgICAgICAgIGJyZWFrOw0KPj4gKw0KPj4gKyAgICAgICAgY2FzZSBSQ19N T0RFX0NCUjoNCj4+ICsgICAgICAgICAgICBEM0QxMl9WSURFT19FTkNPREVSX1JBVEVfQ09OVFJP TF9DQlIgKmNicl9jdGw7DQo+PiArDQo+PiArICAgICAgICAgICAgY3R4LT5yYy5Db25maWdQYXJh bXMuRGF0YVNpemUgPQ0KPnNpemVvZihEM0QxMl9WSURFT19FTkNPREVSX1JBVEVfQ09OVFJPTF9D QlIpOw0KPj4gKyAgICAgICAgICAgIGNicl9jdGwgPSBhdl9tYWxsb2N6KGN0eC0+cmMuQ29uZmln UGFyYW1zLkRhdGFTaXplKTsNCj4+ICsgICAgICAgICAgICBpZiAoIWNicl9jdGwpDQo+PiArICAg ICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7DQo+PiArDQo+PiArICAgICAgICAg ICAgY2JyX2N0bC0+VGFyZ2V0Qml0UmF0ZSAgICAgID0gcmNfY29uZi5yY19iaXRzX3Blcl9zZWNv bmQ7DQo+PiArICAgICAgICAgICAgY2JyX2N0bC0+VkJWQ2FwYWNpdHkgICAgICAgID0gcmNfY29u Zi5ocmRfYnVmZmVyX3NpemU7DQo+PiArICAgICAgICAgICAgY2JyX2N0bC0+SW5pdGlhbFZCVkZ1 bGxuZXNzID0gcmNfY29uZi5ocmRfaW5pdGlhbF9idWZmZXJfZnVsbG5lc3M7DQo+PiArICAgICAg ICAgICAgY3R4LT5yYy5GbGFncyB8PQ0KPkQzRDEyX1ZJREVPX0VOQ09ERVJfUkFURV9DT05UUk9M X0ZMQUdfRU5BQkxFX1ZCVl9TSVpFUzsNCj4NCj5Qcm9iYWJseSBzaG91bGRuJ3QgYWx3YXlzIGJl IHNldD8gIERlcGVuZHMgb24gdGhlIGNvbmZpZ3VyYXRpb24uDQoNCkluIFZBQVBJLCB3ZSBoYXZl IHRoZSBIUkQvVkJWIGZsYWcgZm9yIGFsbCByYyBtb2Rlcy4gSXQgc2VlbXMgSFJEIHBhcmFtZXRl cnMgYXJlIGFsd2F5cyBhZGRlZCBhcyBsb25nIGFzIHRoZSByYXRlIGNvbnRyb2wgbW9kZSBzdXBw b3J0cyh3aXRob3V0IG1hbnVhbCBjb25maWd1cmF0aW9uKS4gQW5kIG1lc2EgZDNkMTIgZHJpdmVy IHdpbGwgYWRkIHRoaXMgZmxhZyBhY2NvcmRpbmdseSwgdG9vLiBTbyBJIGd1ZXNzIEknbSBkb2lu ZyB0aGUgc2FtZSB0aGluZyBoZXJlLg0KDQo+DQo+PiArDQo+PiArICAgICAgICAgICAgaWYgKGF2 Y3R4LT5xbWluID4gMCB8fCBhdmN0eC0+cW1heCA+IDApIHsNCj4+ICsgICAgICAgICAgICAgICAg Y2JyX2N0bC0+TWluUVAgPSBhdmN0eC0+cW1pbjsNCj4+ICsgICAgICAgICAgICAgICAgY2JyX2N0 bC0+TWF4UVAgPSBhdmN0eC0+cW1heDsNCj4+ICsgICAgICAgICAgICAgICAgY3R4LT5yYy5GbGFn cyB8PQ0KPkQzRDEyX1ZJREVPX0VOQ09ERVJfUkFURV9DT05UUk9MX0ZMQUdfRU5BQkxFX1FQX1JB TkdFOw0KPg0KPldoYXQgaGFwcGVucyBpZiBvbmx5IG9uZSBvZiB0aGVtIGlzIHNldD8NCg0KSSB0 cmllZCBpdCdzIHN0aWxsIHdvcmtpbmcuIEFuZCBpdCBzZWVtcyB0aGVyZSdzIG5vIGRvY3VtZW50 IHRvIGxpbWl0IHN1Y2ggYmVoYXZpb3IuDQoNCj4NCj4+ICsgICAgICAgICAgICB9DQo+PiArDQo+ PiArICAgICAgICAgICAgY3R4LT5yYy5Db25maWdQYXJhbXMucENvbmZpZ3VyYXRpb25fQ0JSID0g Y2JyX2N0bDsNCj4+ICsgICAgICAgICAgICBicmVhazsNCj4+ICsNCj4+ICsgICAgICAgIGNhc2Ug UkNfTU9ERV9WQlI6DQo+PiArICAgICAgICAgICAgRDNEMTJfVklERU9fRU5DT0RFUl9SQVRFX0NP TlRST0xfVkJSICp2YnJfY3RsOw0KPj4gKw0KPj4gKyAgICAgICAgICAgIGN0eC0+cmMuQ29uZmln UGFyYW1zLkRhdGFTaXplID0NCj5zaXplb2YoRDNEMTJfVklERU9fRU5DT0RFUl9SQVRFX0NPTlRS T0xfVkJSKTsNCj4+ICsgICAgICAgICAgICB2YnJfY3RsID0gYXZfbWFsbG9jeihjdHgtPnJjLkNv bmZpZ1BhcmFtcy5EYXRhU2l6ZSk7DQo+PiArICAgICAgICAgICAgaWYgKCF2YnJfY3RsKQ0KPj4g KyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOw0KPj4gKw0KPj4gKyAgICAg ICAgICAgIHZicl9jdGwtPlRhcmdldEF2Z0JpdFJhdGUgICA9IHJjX2NvbmYucmNfYml0c19wZXJf c2Vjb25kICoNCj4ocmNfY29uZi5yY190YXJnZXRfcGVyY2VudGFnZSAvIDEwMC4wKTsNCj4+ICsg ICAgICAgICAgICB2YnJfY3RsLT5QZWFrQml0UmF0ZSAgICAgICAgPSByY19jb25mLnJjX2JpdHNf cGVyX3NlY29uZDsNCj4+ICsgICAgICAgICAgICB2YnJfY3RsLT5WQlZDYXBhY2l0eSAgICAgICAg PSByY19jb25mLmhyZF9idWZmZXJfc2l6ZTsNCj4+ICsgICAgICAgICAgICB2YnJfY3RsLT5Jbml0 aWFsVkJWRnVsbG5lc3MgPSByY19jb25mLmhyZF9pbml0aWFsX2J1ZmZlcl9mdWxsbmVzczsNCj4+ ICsgICAgICAgICAgICBjdHgtPnJjLkZsYWdzIHw9DQo+RDNEMTJfVklERU9fRU5DT0RFUl9SQVRF X0NPTlRST0xfRkxBR19FTkFCTEVfVkJWX1NJWkVTOw0KPj4gKw0KPj4gKyAgICAgICAgICAgIGlm IChhdmN0eC0+cW1pbiA+IDAgfHwgYXZjdHgtPnFtYXggPiAwKSB7DQo+PiArICAgICAgICAgICAg ICAgIHZicl9jdGwtPk1pblFQID0gYXZjdHgtPnFtaW47DQo+PiArICAgICAgICAgICAgICAgIHZi cl9jdGwtPk1heFFQID0gYXZjdHgtPnFtYXg7DQo+PiArICAgICAgICAgICAgICAgIGN0eC0+cmMu RmxhZ3MgfD0NCj5EM0QxMl9WSURFT19FTkNPREVSX1JBVEVfQ09OVFJPTF9GTEFHX0VOQUJMRV9R UF9SQU5HRTsNCj4+ICsgICAgICAgICAgICB9DQo+PiArDQo+PiArICAgICAgICAgICAgY3R4LT5y Yy5Db25maWdQYXJhbXMucENvbmZpZ3VyYXRpb25fVkJSID0gdmJyX2N0bDsNCj4+ICsgICAgICAg ICAgICBicmVhazsNCj4+ICsNCj4+ICsgICAgICAgIGNhc2UgUkNfTU9ERV9RVkJSOg0KPj4gKyAg ICAgICAgICAgIEQzRDEyX1ZJREVPX0VOQ09ERVJfUkFURV9DT05UUk9MX1FWQlIgKnF2YnJfY3Rs Ow0KPj4gKw0KPj4gKyAgICAgICAgICAgIGN0eC0+cmMuQ29uZmlnUGFyYW1zLkRhdGFTaXplID0N Cj5zaXplb2YoRDNEMTJfVklERU9fRU5DT0RFUl9SQVRFX0NPTlRST0xfUVZCUik7DQo+PiArICAg ICAgICAgICAgcXZicl9jdGwgPSBhdl9tYWxsb2N6KGN0eC0+cmMuQ29uZmlnUGFyYW1zLkRhdGFT aXplKTsNCj4+ICsgICAgICAgICAgICBpZiAoIXF2YnJfY3RsKQ0KPj4gKyAgICAgICAgICAgICAg ICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOw0KPj4gKw0KPj4gKyAgICAgICAgICAgIHF2YnJfY3Rs LT5UYXJnZXRBdmdCaXRSYXRlID0gcmNfY29uZi5yY19iaXRzX3Blcl9zZWNvbmQgKg0KPihyY19j b25mLnJjX3RhcmdldF9wZXJjZW50YWdlIC8gMTAwKTsNCj4NCj5UaGlzIGxvb2tzIGxpa2UgaXQg d2lsbCBhbHdheXMgYmUgemVyby4gIChTZWUgcHJldmlvdXMgY29tbWVudCB0aGF0IHRhcmdldA0K PnBlcmNlbnRhZ2Ugc2hvdWxkbid0IGJlIHRoZSBudW1iZXIgY29taW5nIGZyb20gdGhlIGNvbW1v biBsYXllci4pDQo+DQo+PiArICAgICAgICAgICAgcXZicl9jdGwtPlBlYWtCaXRSYXRlICAgICAg PSByY19jb25mLnJjX2JpdHNfcGVyX3NlY29uZDsNCj4+ICsNCj4+ICsgICAgICAgICAgICBpZiAo YXZjdHgtPnFtaW4gPiAwIHx8IGF2Y3R4LT5xbWF4ID4gMCkgew0KPj4gKyAgICAgICAgICAgICAg ICBxdmJyX2N0bC0+TWluUVAgPSBhdmN0eC0+cW1pbjsNCj4+ICsgICAgICAgICAgICAgICAgcXZi cl9jdGwtPk1heFFQID0gYXZjdHgtPnFtYXg7DQo+PiArICAgICAgICAgICAgICAgIGN0eC0+cmMu RmxhZ3MgfD0NCj5EM0QxMl9WSURFT19FTkNPREVSX1JBVEVfQ09OVFJPTF9GTEFHX0VOQUJMRV9R UF9SQU5HRTsNCj4+ICsgICAgICAgICAgICB9DQo+DQo+Rm9yZ290IHRvIHNldCBDb25zdGFudFF1 YWxpdHlUYXJnZXQgYXMgd2VsbCAoc3VzcGVjdCB0aGlzIG1vZGUgaGFzIG5vdCBiZWVuDQo+dGVz dGVkLi4uKS4NCj4NCj5Qcm9iYWJseSB3YW50IHRvIHRoaW5rIGNhcmVmdWxseSBhYm91dCBob3cg dG8gbWFwIHRoZSBxdWFsaXR5IGhlcmUsIHRvby4NCj5QcmVzdW1hYmx5IHRoZXJlIGlzIHNvbWUg cXVlcnkgdG8gZ2V0IHRoZSBwZXItY29kZWMgYm91bmRzPw0KDQpJJ2xsIHJld3JpdGUgdGhpcyBw YXJ0IGFzIHN1Z2dlc3RlZCBpbiB0aGUgb3RoZXIgbWFpbCB0aHJlYWQuIFRoYW5rcy4NCg0KPg0K Pj4gKw0KPj4gKyAgICAgICAgICAgIGN0eC0+cmMuQ29uZmlnUGFyYW1zLnBDb25maWd1cmF0aW9u X1FWQlIgPSBxdmJyX2N0bDsNCj4+ICsgICAgICAgICAgICBicmVhazsNCj4+ICsNCj4+ICsgICAg ICAgIGRlZmF1bHQ6DQo+PiArICAgICAgICAgICAgYnJlYWs7DQo+PiArICAgIH0NCj4+ICsgICAg cmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgZDNkMTJ2YV9lbmNvZGVfaW5p dF9nb3Bfc3RydWN0dXJlKEFWQ29kZWNDb250ZXh0ICphdmN0eCkNCj4+ICt7DQo+PiArICAgIEhX QmFzZUVuY29kZUNvbnRleHQgKmJhc2VfY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsNCj4+ICsgICAg RDNEMTJWQUVuY29kZUNvbnRleHQgICAgICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOw0KPj4gKyAg ICB1aW50MzJfdCByZWZfbDAsIHJlZl9sMTsNCj4+ICsgICAgaW50IGVycjsNCj4+ICsgICAgSFJF U1VMVCBocjsNCj4+ICsNCj5EM0QxMl9GRUFUVVJFX0RBVEFfVklERU9fRU5DT0RFUl9DT0RFQ19Q SUNUVVJFX0NPTlRST0xfU1VQUE8NCj5SVCBzdXBwb3J0Ow0KPj4gKyAgICB1bmlvbiB7DQo+PiAr ICAgICAgICBEM0QxMl9WSURFT19FTkNPREVSX0NPREVDX1BJQ1RVUkVfQ09OVFJPTF9TVVBQT1JU X0gyNjQNCj5oMjY0Ow0KPj4gKyAgICAgICAgRDNEMTJfVklERU9fRU5DT0RFUl9DT0RFQ19QSUNU VVJFX0NPTlRST0xfU1VQUE9SVF9IRVZDDQo+aGV2YzsNCj4+ICsgICAgfSBjb2RlY19zdXBwb3J0 Ow0KPj4gKw0KPj4gKyAgICBzdXBwb3J0Lk5vZGVJbmRleCA9IDA7DQo+PiArICAgIHN1cHBvcnQu Q29kZWMgICAgID0gY3R4LT5jb2RlYy0+ZDNkMTJfY29kZWM7DQo+PiArICAgIHN1cHBvcnQuUHJv ZmlsZSAgID0gY3R4LT5wcm9maWxlLT5kM2QxMl9wcm9maWxlOw0KPj4gKw0KPj4gKyAgICBzd2l0 Y2ggKGN0eC0+Y29kZWMtPmQzZDEyX2NvZGVjKSB7DQo+PiArICAgICAgICBjYXNlIEQzRDEyX1ZJ REVPX0VOQ09ERVJfQ09ERUNfSDI2NDoNCj4+ICsgICAgICAgICAgICBzdXBwb3J0LlBpY3R1cmVT dXBwb3J0LkRhdGFTaXplID0gc2l6ZW9mKGNvZGVjX3N1cHBvcnQuaDI2NCk7DQo+PiArICAgICAg ICAgICAgc3VwcG9ydC5QaWN0dXJlU3VwcG9ydC5wSDI2NFN1cHBvcnQgPSAmY29kZWNfc3VwcG9y dC5oMjY0Ow0KPj4gKyAgICAgICAgICAgIGJyZWFrOw0KPj4gKw0KPj4gKyAgICAgICAgY2FzZSBE M0QxMl9WSURFT19FTkNPREVSX0NPREVDX0hFVkM6DQo+PiArICAgICAgICAgICAgc3VwcG9ydC5Q aWN0dXJlU3VwcG9ydC5EYXRhU2l6ZSA9IHNpemVvZihjb2RlY19zdXBwb3J0LmhldmMpOw0KPj4g KyAgICAgICAgICAgIHN1cHBvcnQuUGljdHVyZVN1cHBvcnQucEhFVkNTdXBwb3J0ID0gJmNvZGVj X3N1cHBvcnQuaGV2YzsNCj4+ICsgICAgICAgICAgICBicmVhazsNCj4+ICsgICAgfQ0KPj4gKw0K Pj4gKyAgICBociA9IElEM0QxMlZpZGVvRGV2aWNlM19DaGVja0ZlYXR1cmVTdXBwb3J0KGN0eC0+ dmlkZW9fZGV2aWNlMywNCj5EM0QxMl9GRUFUVVJFX1ZJREVPX0VOQ09ERVJfQ09ERUNfUElDVFVS RV9DT05UUk9MX1NVUFBPUlQsDQo+PiArICAgICAgICAgICAgICZzdXBwb3J0LCBzaXplb2Yoc3Vw cG9ydCkpOw0KPj4gKyAgICBpZiAoRkFJTEVEKGhyKSkNCj4+ICsgICAgICAgIHJldHVybiBBVkVS Uk9SKEVJTlZBTCk7DQo+PiArDQo+PiArICAgIGlmIChzdXBwb3J0LklzU3VwcG9ydGVkKSB7DQo+ PiArICAgICAgICBzd2l0Y2ggKGN0eC0+Y29kZWMtPmQzZDEyX2NvZGVjKSB7DQo+PiArICAgICAg ICAgICAgY2FzZSBEM0QxMl9WSURFT19FTkNPREVSX0NPREVDX0gyNjQ6DQo+PiArICAgICAgICAg ICAgICAgIHJlZl9sMCA9IEZGTUlOKHN1cHBvcnQuUGljdHVyZVN1cHBvcnQucEgyNjRTdXBwb3J0 LQ0KPj5NYXhMMFJlZmVyZW5jZXNGb3JQLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdXBwb3J0LlBpY3R1cmVTdXBwb3J0LnBIMjY0U3VwcG9ydC0NCj4+TWF4TDFSZWZlcmVu Y2VzRm9yQik7DQo+PiArICAgICAgICAgICAgICAgIHJlZl9sMSA9IHN1cHBvcnQuUGljdHVyZVN1 cHBvcnQucEgyNjRTdXBwb3J0LQ0KPj5NYXhMMVJlZmVyZW5jZXNGb3JCOw0KPj4gKyAgICAgICAg ICAgICAgICBicmVhazsNCj4+ICsNCj4+ICsgICAgICAgICAgICBjYXNlIEQzRDEyX1ZJREVPX0VO Q09ERVJfQ09ERUNfSEVWQzoNCj4+ICsgICAgICAgICAgICAgICAgcmVmX2wwID0gRkZNSU4oc3Vw cG9ydC5QaWN0dXJlU3VwcG9ydC5wSEVWQ1N1cHBvcnQtDQo+Pk1heEwwUmVmZXJlbmNlc0ZvclAs DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuUGljdHVyZVN1cHBv cnQucEhFVkNTdXBwb3J0LQ0KPj5NYXhMMVJlZmVyZW5jZXNGb3JCKTsNCj4+ICsgICAgICAgICAg ICAgICAgcmVmX2wxID0gc3VwcG9ydC5QaWN0dXJlU3VwcG9ydC5wSEVWQ1N1cHBvcnQtDQo+Pk1h eEwxUmVmZXJlbmNlc0ZvckI7DQo+PiArICAgICAgICAgICAgICAgIGJyZWFrOw0KPj4gKyAgICAg ICAgfQ0KPj4gKyAgICB9IGVsc2Ugew0KPj4gKyAgICAgICAgcmVmX2wwID0gcmVmX2wxID0gMDsN Cj4+ICsgICAgfQ0KPj4gKw0KPj4gKyAgICBpZiAocmVmX2wwID4gMCAmJiByZWZfbDEgPiAwICYm IGN0eC0+Ymlfbm90X2VtcHR5KSB7DQo+PiArICAgICAgICBiYXNlX2N0eC0+cF90b19ncGIgPSAx Ow0KPj4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIkRyaXZlciBkb2Vz IG5vdCBzdXBwb3J0IFAtZnJhbWVzLCAiDQo+PiArICAgICAgICAgICAgICAgInJlcGxhY2luZyB0 aGVtIHdpdGggQi1mcmFtZXMuXG4iKTsNCj4+ICsgICAgfQ0KPj4gKw0KPj4gKyAgICBlcnIgPSBm Zl9od19iYXNlX2luaXRfZ29wX3N0cnVjdHVyZShhdmN0eCwgcmVmX2wwLCByZWZfbDEsIGN0eC0+ Y29kZWMtDQo+PmZsYWdzLCAwKTsNCj4+ICsgICAgaWYgKGVyciA8IDApDQo+PiArICAgICAgICBy ZXR1cm4gZXJyOw0KPj4gKw0KPj4gKyAgICByZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3Rh dGljIGludCBkM2QxMnZhX2NyZWF0ZV9lbmNvZGVyKEFWQ29kZWNDb250ZXh0ICphdmN0eCkNCj4+ ICt7DQo+PiArICAgIEhXQmFzZUVuY29kZUNvbnRleHQgICAgKmJhc2VfY3R4ICAgICA9IGF2Y3R4 LT5wcml2X2RhdGE7DQo+PiArICAgIEQzRDEyVkFFbmNvZGVDb250ZXh0ICAgKmN0eCAgICAgICAg ICA9IGF2Y3R4LT5wcml2X2RhdGE7DQo+PiArICAgIEFWRDNEMTJWQUZyYW1lc0NvbnRleHQgKmZy YW1lc19od2N0eCA9IGJhc2VfY3R4LT5pbnB1dF9mcmFtZXMtDQo+Pmh3Y3R4Ow0KPj4gKyAgICBI UkVTVUxUIGhyOw0KPj4gKw0KPj4gKyAgICBEM0QxMl9WSURFT19FTkNPREVSX0RFU0MgZGVzYyA9 IHsNCj4+ICsgICAgICAgIC5Ob2RlTWFzayAgICAgICAgICAgICAgICAgICAgID0gMCwNCj4+ICsg ICAgICAgIC5GbGFncyAgICAgICAgICAgICAgICAgICAgICAgID0gRDNEMTJfVklERU9fRU5DT0RF Ul9GTEFHX05PTkUsDQo+PiArICAgICAgICAuRW5jb2RlQ29kZWMgICAgICAgICAgICAgICAgICA9 IGN0eC0+Y29kZWMtPmQzZDEyX2NvZGVjLA0KPj4gKyAgICAgICAgLkVuY29kZVByb2ZpbGUgICAg ICAgICAgICAgICAgPSBjdHgtPnByb2ZpbGUtPmQzZDEyX3Byb2ZpbGUsDQo+PiArICAgICAgICAu SW5wdXRGb3JtYXQgICAgICAgICAgICAgICAgICA9IGZyYW1lc19od2N0eC0+Zm9ybWF0LA0KPj4g KyAgICAgICAgLkNvZGVjQ29uZmlndXJhdGlvbiAgICAgICAgICAgPSBjdHgtPmNvZGVjX2NvbmYs DQo+PiArICAgICAgICAuTWF4TW90aW9uRXN0aW1hdGlvblByZWNpc2lvbiA9DQo+RDNEMTJfVklE RU9fRU5DT0RFUl9NT1RJT05fRVNUSU1BVElPTl9QUkVDSVNJT05fTU9ERV9NQVhJTVUNCj5NLA0K Pg0KPldoZXJlIGRpZCB0aGlzIGNvbWUgZnJvbT8gIFNob3VsZCBpdCBiZSBjb25maWd1cmFibGU/ DQoNClRoaXMgaXMgaGFyZGNvZGVkIGZvciBub3cuIE1heWJlIHdlIGNvdWxkIGFkZCBhIGZlYXR1 cmUgYWZ0ZXJ3YXJkIHRvIG1ha2UgaXQgY29uZmlndXJhYmxlLg0KDQo+DQo+PiArICAgIH07DQo+ PiArDQo+PiArICAgIGhyID0gSUQzRDEyVmlkZW9EZXZpY2UzX0NyZWF0ZVZpZGVvRW5jb2Rlcihj dHgtPnZpZGVvX2RldmljZTMsDQo+JmRlc2MsICZJSURfSUQzRDEyVmlkZW9FbmNvZGVyLA0KPj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKiop JmN0eC0+ZW5jb2Rlcik7DQo+PiArICAgIGlmIChGQUlMRUQoaHIpKSB7DQo+PiArICAgICAgICBh dl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBjcmVhdGUgZW5jb2Rlci5cbiIp Ow0KPj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsNCj4+ICsgICAgfQ0KPj4gKw0K Pj4gKyAgICByZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBkM2QxMnZhX2Ny ZWF0ZV9lbmNvZGVyX2hlYXAoQVZDb2RlY0NvbnRleHQqIGF2Y3R4KQ0KPj4gK3sNCj4+ICsgICAg RDNEMTJWQUVuY29kZUNvbnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7DQo+PiArICAgIEhS RVNVTFQgaHI7DQo+PiArDQo+PiArICAgIEQzRDEyX1ZJREVPX0VOQ09ERVJfSEVBUF9ERVNDIGRl c2MgPSB7DQo+PiArICAgICAgICAuTm9kZU1hc2sgICAgICAgICAgICAgPSAwLA0KPj4gKyAgICAg ICAgLkZsYWdzICAgICAgICAgICAgICAgID0gRDNEMTJfVklERU9fRU5DT0RFUl9GTEFHX05PTkUs DQo+PiArICAgICAgICAuRW5jb2RlQ29kZWMgICAgICAgICAgPSBjdHgtPmNvZGVjLT5kM2QxMl9j b2RlYywNCj4+ICsgICAgICAgIC5FbmNvZGVQcm9maWxlICAgICAgICA9IGN0eC0+cHJvZmlsZS0+ ZDNkMTJfcHJvZmlsZSwNCj4+ICsgICAgICAgIC5FbmNvZGVMZXZlbCAgICAgICAgICA9IGN0eC0+ bGV2ZWwsDQo+PiArICAgICAgICAuUmVzb2x1dGlvbnNMaXN0Q291bnQgPSAxLA0KPj4gKyAgICAg ICAgLnBSZXNvbHV0aW9uTGlzdCAgICAgID0gJmN0eC0+cmVzb2x1dGlvbiwNCj4+ICsgICAgfTsN Cj4+ICsNCj4+ICsgICAgaHIgPSBJRDNEMTJWaWRlb0RldmljZTNfQ3JlYXRlVmlkZW9FbmNvZGVy SGVhcChjdHgtPnZpZGVvX2RldmljZTMsDQo+JmRlc2MsDQo+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJklJRF9JRDNEMTJWaWRlb0VuY29kZXJI ZWFwLCAodm9pZCAqKikmY3R4LQ0KPj5lbmNvZGVyX2hlYXApOw0KPj4gKyAgICBpZiAoRkFJTEVE KGhyKSkgew0KPj4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQg dG8gY3JlYXRlIGVuY29kZXIgaGVhcC5cbiIpOw0KPj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1Io RUlOVkFMKTsNCj4+ICsgICAgfQ0KPj4gKw0KPj4gKyAgICByZXR1cm4gMDsNCj4+ICt9DQo+PiAr DQo+PiArc3RhdGljIHZvaWQgZDNkMTJ2YV9lbmNvZGVfZnJlZV9idWZmZXIodm9pZCAqb3BhcXVl LCB1aW50OF90ICpkYXRhKQ0KPj4gK3sNCj4+ICsgICAgSUQzRDEyUmVzb3VyY2UgKnBSZXNvdXJj ZTsNCj4+ICsNCj4+ICsgICAgcFJlc291cmNlID0gKElEM0QxMlJlc291cmNlICopZGF0YTsNCj4+ ICsgICAgRDNEMTJfT0JKRUNUX1JFTEVBU0UocFJlc291cmNlKTsNCj4+ICt9DQo+PiArDQo+PiAr c3RhdGljIEFWQnVmZmVyUmVmICpkM2QxMnZhX2VuY29kZV9hbGxvY19vdXRwdXRfYnVmZmVyKHZv aWQgKm9wYXF1ZSwNCj5zaXplX3Qgc2l6ZSkNCj4+ICt7DQo+PiArICAgIEFWQ29kZWNDb250ZXh0 ICAgICAqYXZjdHggPSBvcGFxdWU7DQo+PiArICAgIEhXQmFzZUVuY29kZUNvbnRleHQgKmJhc2Vf Y3R4ID0gYXZjdHgtPnByaXZfZGF0YTsNCj4+ICsgICAgRDNEMTJWQUVuY29kZUNvbnRleHQgICAg ICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOw0KPj4gKyAgICBJRDNEMTJSZXNvdXJjZSAqcFJlc291 cmNlID0gTlVMTDsNCj4+ICsgICAgSFJFU1VMVCBocjsNCj4+ICsgICAgQVZCdWZmZXJSZWYgKnJl ZjsNCj4+ICsgICAgRDNEMTJfSEVBUF9QUk9QRVJUSUVTIGhlYXBfcHJvcHM7DQo+PiArICAgIEQz RDEyX0hFQVBfVFlQRSBoZWFwX3R5cGUgPSBEM0QxMl9IRUFQX1RZUEVfUkVBREJBQ0s7DQo+PiAr DQo+PiArICAgIEQzRDEyX1JFU09VUkNFX0RFU0MgZGVzYyA9IHsNCj4+ICsgICAgICAgIC5EaW1l bnNpb24gICAgICAgID0gRDNEMTJfUkVTT1VSQ0VfRElNRU5TSU9OX0JVRkZFUiwNCj4+ICsgICAg ICAgIC5BbGlnbm1lbnQgICAgICAgID0gMCwNCj4+ICsgICAgICAgIC5XaWR0aCAgICAgICAgICAg ID0gRkZBTElHTigzICogYmFzZV9jdHgtPnN1cmZhY2Vfd2lkdGggKiBiYXNlX2N0eC0NCj4+c3Vy ZmFjZV9oZWlnaHQgKyAoMSA8PCAxNiksDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRDNEMTJfVEVYVFVSRV9EQVRBX1BMQUNFTUVOVF9BTElHTk1FTlQpLA0KPg0KPkNh biB3ZSBnZXQgYSBiZXR0ZXIgYm91bmQgb24gdGhpcyB0aGFuIGNvcHlpbmcgaG93IGl0IHdhcyBk b25lIGZvciBWQUFQST8NCg0KSSBmb3VuZCBpdCByZWFzb25hYmxlIHRvIGhhdmUgdGhpcyBib3Vu ZCBhcyBWQUFQSSBkb2VzLiBJIGNhbid0IHRoaW5rIG9mIGEgYmV0dGVyIGJvdW5kIGhvbmVzdGx5 Lg0KDQo+DQo+PiArICAgICAgICAuSGVpZ2h0ICAgICAgICAgICA9IDEsDQo+PiArICAgICAgICAu RGVwdGhPckFycmF5U2l6ZSA9IDEsDQo+PiArICAgICAgICAuTWlwTGV2ZWxzICAgICAgICA9IDEs DQo+PiArICAgICAgICAuRm9ybWF0ICAgICAgICAgICA9IERYR0lfRk9STUFUX1VOS05PV04sDQo+ PiArICAgICAgICAuU2FtcGxlRGVzYyAgICAgICA9IHsgLkNvdW50ID0gMSwgLlF1YWxpdHkgPSAw IH0sDQo+PiArICAgICAgICAuTGF5b3V0ICAgICAgICAgICA9IEQzRDEyX1RFWFRVUkVfTEFZT1VU X1JPV19NQUpPUiwNCj4+ICsgICAgICAgIC5GbGFncyAgICAgICAgICAgID0gRDNEMTJfUkVTT1VS Q0VfRkxBR19OT05FLA0KPj4gKyAgICB9Ow0KPj4gKw0KPj4gKyAgICBjdHgtPmh3Y3R4LT5kZXZp Y2UtPmxwVnRibC0+R2V0Q3VzdG9tSGVhcFByb3BlcnRpZXMoY3R4LT5od2N0eC0NCj4+ZGV2aWNl LCAmaGVhcF9wcm9wcywgMCwgaGVhcF90eXBlKTsNCj4+ICsNCj4+ICsgICAgaHIgPSBJRDNEMTJE ZXZpY2VfQ3JlYXRlQ29tbWl0dGVkUmVzb3VyY2UoY3R4LT5od2N0eC0+ZGV2aWNlLA0KPiZoZWFw X3Byb3BzLCBEM0QxMl9IRUFQX0ZMQUdfTk9ORSwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJmRlc2MsIEQzRDEyX1JFU09VUkNFX1NUQVRFX0NPTU1P TiwNCj5OVUxMLCAmSUlEX0lEM0QxMlJlc291cmNlLA0KPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKikmcFJlc291cmNlKTsNCj4+ICsNCj4+ ICsgICAgaWYgKEZBSUxFRChocikpIHsNCj4+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9H X0VSUk9SLCAiRmFpbGVkIHRvIGNyZWF0ZSBkM2QxMiBidWZmZXIuXG4iKTsNCj4+ICsgICAgICAg IHJldHVybiBOVUxMOw0KPj4gKyAgICB9DQo+PiArDQo+PiArICAgIHJlZiA9IGF2X2J1ZmZlcl9j cmVhdGUoKHVpbnQ4X3QgKikodWludHB0cl90KXBSZXNvdXJjZSwNCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaXplb2YocFJlc291cmNlKSwNCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAmZDNkMTJ2YV9lbmNvZGVfZnJlZV9idWZmZXIsDQo+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgYXZjdHgsIEFWX0JVRkZFUl9GTEFHX1JFQURPTkxZKTsNCj4+ICsgICAgaWYg KCFyZWYpIHsNCj4+ICsgICAgICAgIEQzRDEyX09CSkVDVF9SRUxFQVNFKHBSZXNvdXJjZSk7DQo+ PiArICAgICAgICByZXR1cm4gTlVMTDsNCj4+ICsgICAgfQ0KPj4gKw0KPj4gKyAgICByZXR1cm4g cmVmOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGQzZDEydmFfZW5jb2RlX3ByZXBhcmVf b3V0cHV0X2J1ZmZlcnMoQVZDb2RlY0NvbnRleHQNCj4qYXZjdHgpDQo+PiArew0KPj4gKyAgICBI V0Jhc2VFbmNvZGVDb250ZXh0ICpiYXNlX2N0eCAgICAgID0gYXZjdHgtPnByaXZfZGF0YTsNCj4+ ICsgICAgRDNEMTJWQUVuY29kZUNvbnRleHQgKmN0eCAgICAgICAgICA9IGF2Y3R4LT5wcml2X2Rh dGE7DQo+PiArICAgIEFWRDNEMTJWQUZyYW1lc0NvbnRleHQgKmZyYW1lc19jdHggPSBiYXNlX2N0 eC0+aW5wdXRfZnJhbWVzLQ0KPj5od2N0eDsNCj4+ICsgICAgSFJFU1VMVCBocjsNCj4+ICsNCj4+ ICsgICAgY3R4LT5yZXEuTm9kZUluZGV4ICAgICAgICAgICAgICAgPSAwOw0KPj4gKyAgICBjdHgt PnJlcS5Db2RlYyAgICAgICAgICAgICAgICAgICA9IGN0eC0+Y29kZWMtPmQzZDEyX2NvZGVjOw0K Pj4gKyAgICBjdHgtPnJlcS5Qcm9maWxlICAgICAgICAgICAgICAgICA9IGN0eC0+cHJvZmlsZS0+ ZDNkMTJfcHJvZmlsZTsNCj4+ICsgICAgY3R4LT5yZXEuSW5wdXRGb3JtYXQgICAgICAgICAgICAg PSBmcmFtZXNfY3R4LT5mb3JtYXQ7DQo+PiArICAgIGN0eC0+cmVxLlBpY3R1cmVUYXJnZXRSZXNv bHV0aW9uID0gY3R4LT5yZXNvbHV0aW9uOw0KPj4gKw0KPj4gKyAgICBociA9IElEM0QxMlZpZGVv RGV2aWNlM19DaGVja0ZlYXR1cmVTdXBwb3J0KGN0eC0+dmlkZW9fZGV2aWNlMywNCj4+ICsNCj5E M0QxMl9GRUFUVVJFX1ZJREVPX0VOQ09ERVJfUkVTT1VSQ0VfUkVRVUlSRU1FTlRTLA0KPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdHgtPnJlcSwg c2l6ZW9mKGN0eC0+cmVxKSk7DQo+PiArICAgIGlmIChGQUlMRUQoaHIpKSB7DQo+PiArICAgICAg ICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBjaGVjayBlbmNvZGVyIHJl c291cmNlDQo+cmVxdWlyZW1lbnRzIHN1cHBvcnQuXG4iKTsNCj4+ICsgICAgICAgIHJldHVybiBB VkVSUk9SKEVJTlZBTCk7DQo+PiArICAgIH0NCj4+ICsNCj4+ICsgICAgaWYgKCFjdHgtPnJlcS5J c1N1cHBvcnRlZCkgew0KPj4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJF bmNvZGVyIHJlc291cmNlIHJlcXVpcmVtZW50cw0KPnVuc3VwcG9ydGVkLlxuIik7DQo+DQo+SXQg bG9va3MgbGlrZSB0aGlzIHdvdWxkIGJlIGJlY2F1c2Ugb2YgdGhlIHJlc29sdXRpb24/DQo+DQo+ VGhlcmUgaXMgYSBFTkNPREVSX09VVFBVVF9SRVNPTFVUSU9OIGZlYXR1cmUgd2hpY2ggY291bGQg YmUgdXNlZCB0bw0KPnZlcmlmeSBpbiBhZHZhbmNlIHdoZXRoZXIgdGhlIHJlc29sdXRpb24gaXMg dXNhYmxlIChhbmQgZ2l2ZSBhIGJldHRlciBtZXNzYWdlDQo+aWYgaXQgaXNuJ3QpLg0KDQpGb3Ig cmVzb2x1dGlvbiBjaGVjayBJIGNvdWxkIGFkZCBpdCBpZiBuZWNlc3NhcnkuIEJ1dCB0aGUgbWFq b3IgcG9pbnQgdG8gaGF2ZSB0aGlzIGNoZWNrIGlzIHRvIGdldCB0aGUgcmVxLiBNYXhFbmNvZGVy T3V0cHV0TWV0YWRhdGFCdWZmZXJTaXplIGFuZCByZXEuQ29tcHJlc3NlZEJpdHN0cmVhbUJ1ZmZl ckFjY2Vzc0FsaWdubWVudCBmb3IgbGF0ZXIgdXNlLiBTbyBJIHdvdWxkIHByZWZlciB0byBrZWVw IGl0Lg0KDQo+DQo+PiArICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOw0KPj4gKyAgICB9 DQo+PiArDQo+PiArICAgIGN0eC0+b3V0cHV0X2J1ZmZlcl9wb29sID0gYXZfYnVmZmVyX3Bvb2xf aW5pdDIoc2l6ZW9mKElEM0QxMlJlc291cmNlDQo+KiksIGF2Y3R4LA0KPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkM2QxMnZhX2VuY29kZV9h bGxvY19vdXRwdXRfYnVmZmVyLCBOVUxMKTsNCj4+ICsgICAgaWYgKCFjdHgtPm91dHB1dF9idWZm ZXJfcG9vbCkNCj4+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7DQo+PiArDQo+PiAr ICAgIHJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGQzZDEydmFfZW5jb2Rl X2NyZWF0ZV9jb21tYW5kX29iamVjdHMoQVZDb2RlY0NvbnRleHQNCj4qYXZjdHgpDQo+PiArew0K Pj4gKyAgICBEM0QxMlZBRW5jb2RlQ29udGV4dCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsNCj4+ ICsgICAgSUQzRDEyQ29tbWFuZEFsbG9jYXRvciAqY29tbWFuZF9hbGxvY2F0b3IgPSBOVUxMOw0K Pj4gKyAgICBpbnQgZXJyOw0KPj4gKyAgICBIUkVTVUxUIGhyOw0KPj4gKw0KPj4gKyAgICBEM0Qx Ml9DT01NQU5EX1FVRVVFX0RFU0MgcXVldWVfZGVzYyA9IHsNCj4+ICsgICAgICAgIC5UeXBlICAg ICA9IEQzRDEyX0NPTU1BTkRfTElTVF9UWVBFX1ZJREVPX0VOQ09ERSwNCj4+ICsgICAgICAgIC5Q cmlvcml0eSA9IDAsDQo+PiArICAgICAgICAuRmxhZ3MgICAgPSBEM0QxMl9DT01NQU5EX1FVRVVF X0ZMQUdfTk9ORSwNCj4+ICsgICAgICAgIC5Ob2RlTWFzayA9IDAsDQo+PiArICAgIH07DQo+PiAr DQo+PiArICAgIGN0eC0+YWxsb2NhdG9yX3F1ZXVlID0NCj5hdl9maWZvX2FsbG9jMihEM0QxMlZB X1ZJREVPX0VOQ19BU1lOQ19ERVBUSCwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaXplb2YoQ29tbWFuZEFsbG9jYXRvciksDQo+QVZfRklGT19GTEFHX0FV VE9fR1JPVyk7DQo+PiArICAgIGlmICghY3R4LT5hbGxvY2F0b3JfcXVldWUpDQo+PiArICAgICAg ICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOw0KPj4gKw0KPj4gKyAgICBociA9IElEM0QxMkRldmlj ZV9DcmVhdGVGZW5jZShjdHgtPmh3Y3R4LT5kZXZpY2UsIDAsDQo+RDNEMTJfRkVOQ0VfRkxBR19O T05FLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSUlEX0lEM0QxMkZl bmNlLCAodm9pZCAqKikmY3R4LT5zeW5jX2N0eC5mZW5jZSk7DQo+PiArICAgIGlmIChGQUlMRUQo aHIpKSB7DQo+PiArICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0 byBjcmVhdGUgZmVuY2UoJWx4KVxuIiwgKGxvbmcpaHIpOw0KPj4gKyAgICAgICAgZXJyID0gQVZF UlJPUl9VTktOT1dOOw0KPj4gKyAgICAgICAgZ290byBmYWlsOw0KPj4gKyAgICB9DQo+PiArDQo+ PiArICAgIGN0eC0+c3luY19jdHguZXZlbnQgPSBDcmVhdGVFdmVudChOVUxMLCBGQUxTRSwgRkFM U0UsIE5VTEwpOw0KPj4gKyAgICBpZiAoIWN0eC0+c3luY19jdHguZXZlbnQpDQo+PiArICAgICAg ICBnb3RvIGZhaWw7DQo+PiArDQo+PiArICAgIGVyciA9IGQzZDEydmFfZ2V0X3ZhbGlkX2NvbW1h bmRfYWxsb2NhdG9yKGF2Y3R4LA0KPiZjb21tYW5kX2FsbG9jYXRvcik7DQo+PiArICAgIGlmIChl cnIgPCAwKQ0KPj4gKyAgICAgICAgZ290byBmYWlsOw0KPj4gKw0KPj4gKyAgICBociA9IElEM0Qx MkRldmljZV9DcmVhdGVDb21tYW5kUXVldWUoY3R4LT5od2N0eC0+ZGV2aWNlLA0KPiZxdWV1ZV9k ZXNjLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJklJRF9J RDNEMTJDb21tYW5kUXVldWUsICh2b2lkICoqKSZjdHgtDQo+PmNvbW1hbmRfcXVldWUpOw0KPj4g KyAgICBpZiAoRkFJTEVEKGhyKSkgew0KPj4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0df RVJST1IsICJGYWlsZWQgdG8gY3JlYXRlIGNvbW1hbmQNCj5xdWV1ZSglbHgpXG4iLCAobG9uZylo cik7DQo+PiArICAgICAgICBlcnIgPSBBVkVSUk9SX1VOS05PV047DQo+PiArICAgICAgICBnb3Rv IGZhaWw7DQo+PiArICAgIH0NCj4+ICsNCj4+ICsgICAgaHIgPSBJRDNEMTJEZXZpY2VfQ3JlYXRl Q29tbWFuZExpc3QoY3R4LT5od2N0eC0+ZGV2aWNlLCAwLA0KPnF1ZXVlX2Rlc2MuVHlwZSwNCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZF9hbGxvY2F0 b3IsIE5VTEwsDQo+JklJRF9JRDNEMTJDb21tYW5kTGlzdCwNCj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKiopJmN0eC0+Y29tbWFuZF9saXN0KTsNCj4+ ICsgICAgaWYgKEZBSUxFRChocikpIHsNCj4+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9H X0VSUk9SLCAiRmFpbGVkIHRvIGNyZWF0ZSBjb21tYW5kIGxpc3QoJWx4KVxuIiwNCj4obG9uZylo cik7DQo+PiArICAgICAgICBlcnIgPSBBVkVSUk9SX1VOS05PV047DQo+PiArICAgICAgICBnb3Rv IGZhaWw7DQo+PiArICAgIH0NCj4+ICsNCj4+ICsgICAgaHIgPSBJRDNEMTJWaWRlb0VuY29kZUNv bW1hbmRMaXN0Ml9DbG9zZShjdHgtPmNvbW1hbmRfbGlzdCk7DQo+PiArICAgIGlmIChGQUlMRUQo aHIpKSB7DQo+PiArICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0 byBjbG9zZSB0aGUgY29tbWFuZA0KPmxpc3QoJWx4KVxuIiwgKGxvbmcpaHIpOw0KPj4gKyAgICAg ICAgZXJyID0gQVZFUlJPUl9VTktOT1dOOw0KPj4gKyAgICAgICAgZ290byBmYWlsOw0KPj4gKyAg ICB9DQo+PiArDQo+PiArICAgIElEM0QxMkNvbW1hbmRRdWV1ZV9FeGVjdXRlQ29tbWFuZExpc3Rz KGN0eC0+Y29tbWFuZF9xdWV1ZSwNCj4xLCAoSUQzRDEyQ29tbWFuZExpc3QgKiopJmN0eC0+Y29t bWFuZF9saXN0KTsNCj4+ICsNCj4+ICsgICAgZXJyID0gZDNkMTJ2YV9zeW5jX3dpdGhfZ3B1KGF2 Y3R4KTsNCj4+ICsgICAgaWYgKGVyciA8IDApDQo+PiArICAgICAgICBnb3RvIGZhaWw7DQo+PiAr DQo+PiArICAgIGVyciA9IGQzZDEydmFfZGlzY2FyZF9jb21tYW5kX2FsbG9jYXRvcihhdmN0eCwg Y29tbWFuZF9hbGxvY2F0b3IsDQo+Y3R4LT5zeW5jX2N0eC5mZW5jZV92YWx1ZSk7DQo+PiArICAg IGlmIChlcnIgPCAwKQ0KPj4gKyAgICAgICAgZ290byBmYWlsOw0KPj4gKw0KPj4gKyAgICByZXR1 cm4gMDsNCj4+ICsNCj4+ICtmYWlsOg0KPj4gKyAgICBEM0QxMl9PQkpFQ1RfUkVMRUFTRShjb21t YW5kX2FsbG9jYXRvcik7DQo+PiArICAgIHJldHVybiBlcnI7DQo+PiArfQ0KPj4gKw0KPj4gK3N0 YXRpYyBpbnQgZDNkMTJ2YV9lbmNvZGVfY3JlYXRlX3JlY29uX2ZyYW1lcyhBVkNvZGVjQ29udGV4 dCAqYXZjdHgpDQo+PiArew0KPj4gKyAgICBIV0Jhc2VFbmNvZGVDb250ZXh0ICpiYXNlX2N0eCA9 IGF2Y3R4LT5wcml2X2RhdGE7DQo+PiArICAgIEFWRDNEMTJWQUZyYW1lc0NvbnRleHQgKmh3Y3R4 Ow0KPj4gKyAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgcmVjb25fZm9ybWF0Ow0KPj4gKyAgICBpbnQg ZXJyOw0KPj4gKw0KPj4gKyAgICBlcnIgPSBmZl9od19iYXNlX2dldF9yZWNvbl9mb3JtYXQoYXZj dHgsIE5VTEwsICZyZWNvbl9mb3JtYXQpOw0KPj4gKyAgICBpZiAoZXJyIDwgMCkNCj4+ICsgICAg ICAgIHJldHVybiBlcnI7DQo+PiArDQo+PiArICAgIGJhc2VfY3R4LT5yZWNvbl9mcmFtZXNfcmVm ID0gYXZfaHdmcmFtZV9jdHhfYWxsb2MoYmFzZV9jdHgtDQo+PmRldmljZV9yZWYpOw0KPj4gKyAg ICBpZiAoIWJhc2VfY3R4LT5yZWNvbl9mcmFtZXNfcmVmKQ0KPj4gKyAgICAgICAgcmV0dXJuIEFW RVJST1IoRU5PTUVNKTsNCj4+ICsNCj4+ICsgICAgYmFzZV9jdHgtPnJlY29uX2ZyYW1lcyA9IChB VkhXRnJhbWVzQ29udGV4dCAqKWJhc2VfY3R4LQ0KPj5yZWNvbl9mcmFtZXNfcmVmLT5kYXRhOw0K Pj4gKyAgICBod2N0eCA9IChBVkQzRDEyVkFGcmFtZXNDb250ZXh0ICopYmFzZV9jdHgtPnJlY29u X2ZyYW1lcy0+aHdjdHg7DQo+PiArDQo+PiArICAgIGJhc2VfY3R4LT5yZWNvbl9mcmFtZXMtPmZv cm1hdCAgICA9IEFWX1BJWF9GTVRfRDNEMTI7DQo+PiArICAgIGJhc2VfY3R4LT5yZWNvbl9mcmFt ZXMtPnN3X2Zvcm1hdCA9IHJlY29uX2Zvcm1hdDsNCj4+ICsgICAgYmFzZV9jdHgtPnJlY29uX2Zy YW1lcy0+d2lkdGggICAgID0gYmFzZV9jdHgtPnN1cmZhY2Vfd2lkdGg7DQo+PiArICAgIGJhc2Vf Y3R4LT5yZWNvbl9mcmFtZXMtPmhlaWdodCAgICA9IGJhc2VfY3R4LT5zdXJmYWNlX2hlaWdodDsN Cj4+ICsNCj4+ICsgICAgaHdjdHgtPmZsYWdzID0NCj5EM0QxMl9SRVNPVVJDRV9GTEFHX1ZJREVP X0VOQ09ERV9SRUZFUkVOQ0VfT05MWSB8DQo+PiArICAgICAgICAgICAgICAgICAgIEQzRDEyX1JF U09VUkNFX0ZMQUdfREVOWV9TSEFERVJfUkVTT1VSQ0U7DQo+PiArDQo+PiArICAgIGVyciA9IGF2 X2h3ZnJhbWVfY3R4X2luaXQoYmFzZV9jdHgtPnJlY29uX2ZyYW1lc19yZWYpOw0KPj4gKyAgICBp ZiAoZXJyIDwgMCkgew0KPj4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJG YWlsZWQgdG8gaW5pdGlhbGlzZSByZWNvbnN0cnVjdGVkICINCj4+ICsgICAgICAgICAgICAgICAi ZnJhbWUgY29udGV4dDogJWQuXG4iLCBlcnIpOw0KPj4gKyAgICAgICAgcmV0dXJuIGVycjsNCj4+ ICsgICAgfQ0KPj4gKw0KPj4gKyAgICByZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGlj IGNvbnN0IEhXRW5jb2RlVHlwZSBkM2QxMnZhX3R5cGUgPSB7DQo+PiArICAgIC5hbGxvYyAgPSAm ZDNkMTJ2YV9lbmNvZGVfYWxsb2MsDQo+PiArDQo+PiArICAgIC5pc3N1ZSAgPSAmZDNkMTJ2YV9l bmNvZGVfaXNzdWUsDQo+PiArDQo+PiArICAgIC5vdXRwdXQgPSAmZDNkMTJ2YV9lbmNvZGVfb3V0 cHV0LA0KPj4gKw0KPj4gKyAgICAuZnJlZSAgID0gJmQzZDEydmFfZW5jb2RlX2ZyZWUsDQo+PiAr fTsNCj4+ICsNCj4+ICtpbnQgZmZfZDNkMTJ2YV9lbmNvZGVfaW5pdChBVkNvZGVjQ29udGV4dCAq YXZjdHgpDQo+PiArew0KPj4gKyAgICBIV0Jhc2VFbmNvZGVDb250ZXh0ICpiYXNlX2N0eCA9IGF2 Y3R4LT5wcml2X2RhdGE7DQo+PiArICAgIEQzRDEyVkFFbmNvZGVDb250ZXh0ICAgICAqY3R4ID0g YXZjdHgtPnByaXZfZGF0YTsNCj4+ICsgICAgRDNEMTJfRkVBVFVSRV9EQVRBX1ZJREVPX0ZFQVRV UkVfQVJFQV9TVVBQT1JUIHN1cHBvcnQgPSB7IDAgfTsNCj4+ICsgICAgaW50IGVycjsNCj4+ICsg ICAgSFJFU1VMVCBocjsNCj4+ICsNCj4+ICsgICAgZXJyID0gZmZfaHdfYmFzZV9lbmNvZGVfaW5p dChhdmN0eCk7DQo+PiArICAgIGlmIChlcnIgPCAwKQ0KPj4gKyAgICAgICAgZ290byBmYWlsOw0K Pj4gKw0KPj4gKyAgICBiYXNlX2N0eC0+aHcgPSAmZDNkMTJ2YV90eXBlOw0KPj4gKw0KPj4gKyAg ICBjdHgtPmh3Y3R4ID0gYmFzZV9jdHgtPmRldmljZS0+aHdjdHg7DQo+PiArDQo+PiArICAgIGN0 eC0+cmVzb2x1dGlvbi5XaWR0aCAgPSBiYXNlX2N0eC0+aW5wdXRfZnJhbWVzLT53aWR0aDsNCj4+ ICsgICAgY3R4LT5yZXNvbHV0aW9uLkhlaWdodCA9IGJhc2VfY3R4LT5pbnB1dF9mcmFtZXMtPmhl aWdodDsNCj4+ICsNCj4+ICsgICAgaHIgPSBJRDNEMTJEZXZpY2VfUXVlcnlJbnRlcmZhY2UoY3R4 LT5od2N0eC0+ZGV2aWNlLA0KPiZJSURfSUQzRDEyRGV2aWNlMywgKHZvaWQgKiopJmN0eC0+ZGV2 aWNlMyk7DQo+PiArICAgIGlmIChGQUlMRUQoaHIpKSB7DQo+PiArICAgICAgICBhdl9sb2coYXZj dHgsIEFWX0xPR19FUlJPUiwgIklEM0QxMkRldmljZTMgaW50ZXJmYWNlIGlzIG5vdA0KPnN1cHBv cnRlZC5cbiIpOw0KPj4gKyAgICAgICAgZXJyID0gQVZFUlJPUl9VTktOT1dOOw0KPj4gKyAgICAg ICAgZ290byBmYWlsOw0KPj4gKyAgICB9DQo+PiArDQo+PiArICAgIGhyID0gSUQzRDEyRGV2aWNl M19RdWVyeUludGVyZmFjZShjdHgtPmRldmljZTMsDQo+JklJRF9JRDNEMTJWaWRlb0RldmljZTMs ICh2b2lkICoqKSZjdHgtPnZpZGVvX2RldmljZTMpOw0KPj4gKyAgICBpZiAoRkFJTEVEKGhyKSkg ew0KPj4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJJRDNEMTJWaWRlb0Rl dmljZTMgaW50ZXJmYWNlIGlzIG5vdA0KPnN1cHBvcnRlZC5cbiIpOw0KPj4gKyAgICAgICAgZXJy ID0gQVZFUlJPUl9VTktOT1dOOw0KPj4gKyAgICAgICAgZ290byBmYWlsOw0KPj4gKyAgICB9DQo+ PiArDQo+PiArICAgIGlmIChGQUlMRUQoSUQzRDEyVmlkZW9EZXZpY2UzX0NoZWNrRmVhdHVyZVN1 cHBvcnQoY3R4LQ0KPj52aWRlb19kZXZpY2UzLCBEM0QxMl9GRUFUVVJFX1ZJREVPX0ZFQVRVUkVf QVJFQV9TVVBQT1JULA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZzdXBwb3J0LCBzaXplb2Yoc3VwcG9ydCkpKQ0KPiYmICFzdXBwb3J0 LlZpZGVvRW5jb2RlU3VwcG9ydCkgew0KPj4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0df RVJST1IsICJEM0QxMiB2aWRlbyBkZXZpY2UgaGFzIG5vIHZpZGVvDQo+ZW5jb2RlciBzdXBwb3J0 LlxuIik7DQo+PiArICAgICAgICBlcnIgPSBBVkVSUk9SKEVJTlZBTCk7DQo+PiArICAgICAgICBn b3RvIGZhaWw7DQo+PiArICAgIH0NCj4+ICsNCj4+ICsgICAgZXJyID0gZDNkMTJ2YV9lbmNvZGVf c2V0X3Byb2ZpbGUoYXZjdHgpOw0KPj4gKyAgICBpZiAoZXJyIDwgMCkNCj4+ICsgICAgICAgIGdv dG8gZmFpbDsNCj4+ICsNCj4+ICsgICAgaWYgKGN0eC0+Y29kZWMtPmdldF9lbmNvZGVyX2NhcHMp IHsNCj4+ICsgICAgICAgIGVyciA9IGN0eC0+Y29kZWMtPmdldF9lbmNvZGVyX2NhcHMoYXZjdHgp Ow0KPj4gKyAgICAgICAgaWYgKGVyciA8IDApDQo+PiArICAgICAgICAgICAgZ290byBmYWlsOw0K Pj4gKyAgICB9DQo+PiArDQo+PiArICAgIGVyciA9IGQzZDEydmFfZW5jb2RlX2luaXRfcmF0ZV9j b250cm9sKGF2Y3R4KTsNCj4+ICsgICAgaWYgKGVyciA8IDApDQo+PiArICAgICAgICBnb3RvIGZh aWw7DQo+PiArDQo+PiArICAgIGVyciA9IGQzZDEydmFfZW5jb2RlX2luaXRfZ29wX3N0cnVjdHVy ZShhdmN0eCk7DQo+PiArICAgIGlmIChlcnIgPCAwKQ0KPj4gKyAgICAgICAgZ290byBmYWlsOw0K Pj4gKw0KPj4gKyAgICBpZiAoIShjdHgtPmNvZGVjLT5mbGFncyAmIEZMQUdfU0xJQ0VfQ09OVFJP TCkgJiYgYXZjdHgtPnNsaWNlcyA+IDApIHsNCj4+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZf TE9HX1dBUk5JTkcsICJNdWx0aXBsZSBzbGljZXMgd2VyZSByZXF1ZXN0ZWQgIg0KPj4gKyAgICAg ICAgICAgICAgICJidXQgdGhpcyBjb2RlYyBkb2VzIG5vdCBzdXBwb3J0IGNvbnRyb2xsaW5nIHNs aWNlcy5cbiIpOw0KPj4gKyAgICB9DQo+PiArDQo+PiArICAgIGVyciA9IGQzZDEydmFfZW5jb2Rl X2NyZWF0ZV9jb21tYW5kX29iamVjdHMoYXZjdHgpOw0KPj4gKyAgICBpZiAoZXJyIDwgMCkNCj4+ ICsgICAgICAgIGdvdG8gZmFpbDsNCj4+ICsNCj4+ICsgICAgZXJyID0gZDNkMTJ2YV9lbmNvZGVf Y3JlYXRlX3JlY29uX2ZyYW1lcyhhdmN0eCk7DQo+PiArICAgIGlmIChlcnIgPCAwKQ0KPj4gKyAg ICAgICAgZ290byBmYWlsOw0KPj4gKw0KPj4gKyAgICBlcnIgPSBkM2QxMnZhX2VuY29kZV9wcmVw YXJlX291dHB1dF9idWZmZXJzKGF2Y3R4KTsNCj4+ICsgICAgaWYgKGVyciA8IDApDQo+PiArICAg ICAgICBnb3RvIGZhaWw7DQo+PiArDQo+PiArICAgIGlmIChjdHgtPmNvZGVjLT5jb25maWd1cmUp IHsNCj4+ICsgICAgICAgIGVyciA9IGN0eC0+Y29kZWMtPmNvbmZpZ3VyZShhdmN0eCk7DQo+PiAr ICAgICAgICBpZiAoZXJyIDwgMCkNCj4+ICsgICAgICAgICAgICBnb3RvIGZhaWw7DQo+PiArICAg IH0NCj4+ICsNCj4+ICsgICAgaWYgKGN0eC0+Y29kZWMtPmluaXRfc2VxdWVuY2VfcGFyYW1zKSB7 DQo+PiArICAgICAgICBlcnIgPSBjdHgtPmNvZGVjLT5pbml0X3NlcXVlbmNlX3BhcmFtcyhhdmN0 eCk7DQo+PiArICAgICAgICBpZiAoZXJyIDwgMCkgew0KPj4gKyAgICAgICAgICAgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX0VSUk9SLCAiQ29kZWMgc2VxdWVuY2UgaW5pdGlhbGlzYXRpb24gIg0KPj4g KyAgICAgICAgICAgICAgICAgICAiZmFpbGVkOiAlZC5cbiIsIGVycik7DQo+PiArICAgICAgICAg ICAgZ290byBmYWlsOw0KPj4gKyAgICAgICAgfQ0KPj4gKyAgICB9DQo+PiArDQo+PiArICAgIGlm IChjdHgtPmNvZGVjLT5zZXRfbGV2ZWwpIHsNCj4+ICsgICAgICAgIGVyciA9IGN0eC0+Y29kZWMt PnNldF9sZXZlbChhdmN0eCk7DQo+PiArICAgICAgICBpZiAoZXJyIDwgMCkNCj4+ICsgICAgICAg ICAgICBnb3RvIGZhaWw7DQo+PiArICAgIH0NCj4+ICsNCj4+ICsgICAgYmFzZV9jdHgtPm91dHB1 dF9kZWxheSA9IGJhc2VfY3R4LT5iX3Blcl9wOw0KPj4gKyAgICBiYXNlX2N0eC0+ZGVjb2RlX2Rl bGF5ID0gYmFzZV9jdHgtPm1heF9iX2RlcHRoOw0KPj4gKw0KPj4gKyAgICBlcnIgPSBkM2QxMnZh X2NyZWF0ZV9lbmNvZGVyKGF2Y3R4KTsNCj4+ICsgICAgaWYgKGVyciA8IDApDQo+PiArICAgICAg ICBnb3RvIGZhaWw7DQo+PiArDQo+PiArICAgIGVyciA9IGQzZDEydmFfY3JlYXRlX2VuY29kZXJf aGVhcChhdmN0eCk7DQo+PiArICAgIGlmIChlcnIgPCAwKQ0KPj4gKyAgICAgICAgZ290byBmYWls Ow0KPj4gKw0KPj4gKyAgICBiYXNlX2N0eC0+YXN5bmNfZW5jb2RlID0gMTsNCj4+ICsgICAgYmFz ZV9jdHgtPmVuY29kZV9maWZvID0gYXZfZmlmb19hbGxvYzIoYmFzZV9jdHgtPmFzeW5jX2RlcHRo LA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yo RDNEMTJWQUVuY29kZVBpY3R1cmUgKiksIDApOw0KPj4gKyAgICBpZiAoIWJhc2VfY3R4LT5lbmNv ZGVfZmlmbykNCj4+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7DQo+PiArDQo+PiAr ICAgIHJldHVybiAwOw0KPj4gKw0KPj4gK2ZhaWw6DQo+PiArICAgIHJldHVybiBlcnI7DQo+PiAr fQ0KPj4gKw0KPj4gK2ludCBmZl9kM2QxMnZhX2VuY29kZV9jbG9zZShBVkNvZGVjQ29udGV4dCAq YXZjdHgpDQo+PiArew0KPj4gKyAgICBpbnQgbnVtX2FsbG9jYXRvciA9IDA7DQo+PiArICAgIEhX QmFzZUVuY29kZUNvbnRleHQgKmJhc2VfY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsNCj4+ICsgICAg RDNEMTJWQUVuY29kZUNvbnRleHQgICAgICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOw0KPj4gKyAg ICBIV0Jhc2VFbmNvZGVQaWN0dXJlICpwaWMsICpuZXh0Ow0KPj4gKyAgICBDb21tYW5kQWxsb2Nh dG9yIGFsbG9jYXRvcjsNCj4+ICsNCj4+ICsgICAgaWYgKCFiYXNlX2N0eC0+ZnJhbWUpDQo+PiAr ICAgICAgICByZXR1cm4gMDsNCj4+ICsNCj4+ICsgICAgZm9yIChwaWMgPSBiYXNlX2N0eC0+cGlj X3N0YXJ0OyBwaWM7IHBpYyA9IG5leHQpIHsNCj4+ICsgICAgICAgIG5leHQgPSBwaWMtPm5leHQ7 DQo+PiArICAgICAgICBkM2QxMnZhX2VuY29kZV9mcmVlKGF2Y3R4LCBwaWMpOw0KPj4gKyAgICB9 DQo+PiArDQo+PiArICAgIGlmIChjdHgtPnN5bmNfY3R4LmZlbmNlKSB7DQo+PiArICAgICAgICBk M2QxMnZhX3N5bmNfd2l0aF9ncHUoYXZjdHgpOw0KPg0KPldoYXQgZG9lcyBpdCBtZWFuIGlmIHRo aXMgaGFwcGVucz8gIElmIHNvbWVvbmUgY2xvc2VkIHRoZSBjb2RlYyB3aXRoIGZyYW1lcw0KPmlu IGZsaWdodCwgY2FuIHlvdSByZWFsbHkgY2FsbCB0aGlzIGFmdGVyIGZyZWVpbmcgdGhlIGZyYW1l cz8NCg0KVGhhbmtzIGZvciBwb2ludGluZyBvdXQgdGhhdC4gSSBmb3VuZCBpdCBub3QgbmVjZXNz YXJ5IGFueW1vcmUuIEknbGwgZGVsZXRlIHRoaXMuDQoNCj4NCj4+ICsgICAgfQ0KPj4gKw0KPj4g KyAgICBzd2l0Y2ggKGN0eC0+cmMuTW9kZSkNCj4+ICsgICAgew0KPj4gKyAgICBjYXNlIEQzRDEy X1ZJREVPX0VOQ09ERVJfUkFURV9DT05UUk9MX01PREVfQ1FQOg0KPj4gKyAgICAgICAgYXZfZnJl ZXAoJmN0eC0+cmMuQ29uZmlnUGFyYW1zLnBDb25maWd1cmF0aW9uX0NRUCk7DQo+PiArICAgICAg ICBicmVhazsNCj4+ICsgICAgY2FzZSBEM0QxMl9WSURFT19FTkNPREVSX1JBVEVfQ09OVFJPTF9N T0RFX0NCUjoNCj4+ICsgICAgICAgIGF2X2ZyZWVwKCZjdHgtPnJjLkNvbmZpZ1BhcmFtcy5wQ29u ZmlndXJhdGlvbl9DQlIpOw0KPj4gKyAgICAgICAgYnJlYWs7DQo+PiArICAgIGNhc2UgRDNEMTJf VklERU9fRU5DT0RFUl9SQVRFX0NPTlRST0xfTU9ERV9WQlI6DQo+PiArICAgICAgICBhdl9mcmVl cCgmY3R4LT5yYy5Db25maWdQYXJhbXMucENvbmZpZ3VyYXRpb25fVkJSKTsNCj4+ICsgICAgICAg IGJyZWFrOw0KPj4gKyAgICBjYXNlIEQzRDEyX1ZJREVPX0VOQ09ERVJfUkFURV9DT05UUk9MX01P REVfUVZCUjoNCj4+ICsgICAgICAgIGF2X2ZyZWVwKCZjdHgtPnJjLkNvbmZpZ1BhcmFtcy5wQ29u ZmlndXJhdGlvbl9RVkJSKTsNCj4+ICsgICAgICAgIGJyZWFrOw0KPj4gKyAgICBkZWZhdWx0Og0K Pj4gKyAgICAgICAgYnJlYWs7DQo+PiArICAgIH0NCj4NCj5Db3VsZCB5b3UgaGF2ZSBwdXQgdGhp cyBzdHJ1Y3R1cmUgaW5zaWRlIHRoZSBjb250ZXh0IHRvIGF2b2lkIHRoaXMgY2x1bXNpbmVzcz8N Cj4NCg0KRG8geW91IG1lYW4gY3V0IGl0IHRvIGFub3RoZXIgcGxhY2U/IFllcyBJIGNvdWxkIGRv IGl0LiANCg0KPj4gKw0KPj4gKyAgICBhdl9idWZmZXJfcG9vbF91bmluaXQoJmN0eC0+b3V0cHV0 X2J1ZmZlcl9wb29sKTsNCj4+ICsNCj4+ICsgICAgRDNEMTJfT0JKRUNUX1JFTEVBU0UoY3R4LT5j b21tYW5kX2xpc3QpOw0KPj4gKyAgICBEM0QxMl9PQkpFQ1RfUkVMRUFTRShjdHgtPmNvbW1hbmRf cXVldWUpOw0KPj4gKw0KPj4gKyAgICBpZiAoY3R4LT5hbGxvY2F0b3JfcXVldWUpIHsNCj4+ICsg ICAgICAgIHdoaWxlIChhdl9maWZvX3JlYWQoY3R4LT5hbGxvY2F0b3JfcXVldWUsICZhbGxvY2F0 b3IsIDEpID49IDApIHsNCj4+ICsgICAgICAgICAgICBudW1fYWxsb2NhdG9yKys7DQo+PiArICAg ICAgICAgICAgRDNEMTJfT0JKRUNUX1JFTEVBU0UoYWxsb2NhdG9yLmNvbW1hbmRfYWxsb2NhdG9y KTsNCj4+ICsgICAgICAgIH0NCj4+ICsNCj4+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9H X1ZFUkJPU0UsICJUb3RhbCBudW1iZXIgb2YgY29tbWFuZCBhbGxvY2F0b3JzDQo+cmV1c2VkOiAl ZFxuIiwgbnVtX2FsbG9jYXRvcik7DQo+PiArICAgIH0NCj4+ICsNCj4+ICsgICAgYXZfZmlmb19m cmVlcDIoJmN0eC0+YWxsb2NhdG9yX3F1ZXVlKTsNCj4+ICsgICAgYXZfZmlmb19mcmVlcDIoJmJh c2VfY3R4LT5lbmNvZGVfZmlmbyk7DQo+PiArDQo+PiArICAgIEQzRDEyX09CSkVDVF9SRUxFQVNF KGN0eC0+c3luY19jdHguZmVuY2UpOw0KPj4gKyAgICBpZiAoY3R4LT5zeW5jX2N0eC5ldmVudCkN Cj4+ICsgICAgICAgIENsb3NlSGFuZGxlKGN0eC0+c3luY19jdHguZXZlbnQpOw0KPj4gKw0KPj4g KyAgICBEM0QxMl9PQkpFQ1RfUkVMRUFTRShjdHgtPmVuY29kZXJfaGVhcCk7DQo+PiArICAgIEQz RDEyX09CSkVDVF9SRUxFQVNFKGN0eC0+ZW5jb2Rlcik7DQo+PiArICAgIEQzRDEyX09CSkVDVF9S RUxFQVNFKGN0eC0+dmlkZW9fZGV2aWNlMyk7DQo+PiArICAgIEQzRDEyX09CSkVDVF9SRUxFQVNF KGN0eC0+ZGV2aWNlMyk7DQo+PiArDQo+PiArICAgIGF2X2J1ZmZlcl91bnJlZigmYmFzZV9jdHgt PnJlY29uX2ZyYW1lc19yZWYpOw0KPj4gKw0KPj4gKyAgICBmZl9od19iYXNlX2VuY29kZV9jbG9z ZShhdmN0eCk7DQo+PiArDQo+PiArICAgIHJldHVybiAwOw0KPj4gK30NCj4+IGRpZmYgLS1naXQg YS9saWJhdmNvZGVjL2QzZDEydmFfZW5jb2RlLmggYi9saWJhdmNvZGVjL2QzZDEydmFfZW5jb2Rl LmgNCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+PiBpbmRleCAwMDAwMDAwMDAwLi4xMzdhY2Nl MDEyDQo+PiAtLS0gL2Rldi9udWxsDQo+PiArKysgYi9saWJhdmNvZGVjL2QzZDEydmFfZW5jb2Rl LmgNCj4+IEBAIC0wLDAgKzEsMjc1IEBADQo+PiArLyoNCj4+ICsgKiBEaXJlY3QzRCAxMiBIVyBh Y2NlbGVyYXRpb24gdmlkZW8gZW5jb2Rlcg0KPj4gKyAqDQo+PiArICogQ29weXJpZ2h0IChjKSAy MDI0IEludGVsIENvcnBvcmF0aW9uDQo+PiArICoNCj4+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBv ZiBGRm1wZWcuDQo+PiArICoNCj4+ICsgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQo+PiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0KPj4gKyAqIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcg0KPj4gKyAqIHZl cnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLg0KPj4gKyAqDQo+PiArICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQo+PiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCj4+ICsgKiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQo+R05V DQo+PiArICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4N Cj4+ICsgKg0KPj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCj4+ICsgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVn OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQo+PiArICogRm91bmRhdGlvbiwg SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0x MzAxDQo+VVNBDQo+PiArICovDQo+PiArDQo+PiArI2lmbmRlZiBBVkNPREVDX0QzRDEyVkFfRU5D T0RFX0gNCj4+ICsjZGVmaW5lIEFWQ09ERUNfRDNEMTJWQV9FTkNPREVfSA0KPj4gKw0KPj4gKyNp bmNsdWRlICJsaWJhdnV0aWwvZmlmby5oIg0KPj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvaHdjb250 ZXh0LmgiDQo+PiArI2luY2x1ZGUgImxpYmF2dXRpbC9od2NvbnRleHRfZDNkMTJ2YV9pbnRlcm5h bC5oIg0KPj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvaHdjb250ZXh0X2QzZDEydmEuaCINCj4+ICsj aW5jbHVkZSAiYXZjb2RlYy5oIg0KPj4gKyNpbmNsdWRlICJpbnRlcm5hbC5oIg0KPj4gKyNpbmNs dWRlICJod2NvbmZpZy5oIg0KPj4gKyNpbmNsdWRlICJod19iYXNlX2VuY29kZS5oIg0KPj4gKw0K Pj4gK3N0cnVjdCBEM0QxMlZBRW5jb2RlVHlwZTsNCj4+ICsNCj4+ICtleHRlcm4gY29uc3QgQVZD b2RlY0hXQ29uZmlnSW50ZXJuYWwgKmNvbnN0DQo+ZmZfZDNkMTJ2YV9lbmNvZGVfaHdfY29uZmln c1tdOw0KPj4gKw0KPj4gKyNkZWZpbmUgTUFYX1BBUkFNX0JVRkZFUl9TSVpFIDQwOTYNCj4+ICsj ZGVmaW5lIEQzRDEyVkFfVklERU9fRU5DX0FTWU5DX0RFUFRIIDgNCj4+ICsNCj4+ICtlbnVtDQo+ PiArew0KPj4gKyAgIEVOQ19GRUFUVVJFX05PVF9TVVBQT1JURUQgPSAwLA0KPj4gKyAgIEVOQ19G RUFUVVJFX1NVUFBPUlRFRCA9IDEsDQo+PiArICAgRU5DX0ZFQVRVUkVfUkVRVUlSRUQgPSAyLA0K Pj4gK307DQo+DQo+VGhpcyBlbnVtIGlzIG5ldmVyIHVzZWQ/DQoNCldpbGwgcmVtb3ZlLCB0aHgu DQoNCj4NCj4+ICsNCj4+ICt0eXBlZGVmIHN0cnVjdCBEM0QxMlZBRW5jb2RlUGljdHVyZSB7DQo+ PiArICAgIEhXQmFzZUVuY29kZVBpY3R1cmUgYmFzZTsNCj4+ICsNCj4+ICsgICAgaW50ICAgICAg ICAgICAgIGhlYWRlcl9zaXplOw0KPj4gKw0KPj4gKyAgICBBVkQzRDEyVkFGcmFtZSAqaW5wdXRf c3VyZmFjZTsNCj4+ICsgICAgQVZEM0QxMlZBRnJhbWUgKnJlY29uX3N1cmZhY2U7DQo+PiArDQo+ PiArICAgIEFWQnVmZmVyUmVmICAgICpvdXRwdXRfYnVmZmVyX3JlZjsNCj4+ICsgICAgSUQzRDEy UmVzb3VyY2UgKm91dHB1dF9idWZmZXI7DQo+PiArDQo+PiArICAgIElEM0QxMlJlc291cmNlICpl bmNvZGVkX21ldGFkYXRhOw0KPj4gKyAgICBJRDNEMTJSZXNvdXJjZSAqcmVzb2x2ZWRfbWV0YWRh dGE7DQo+PiArDQo+PiArICAgIEQzRDEyX1ZJREVPX0VOQ09ERVJfUElDVFVSRV9DT05UUk9MX0NP REVDX0RBVEEgcGljX2N0bDsNCj4+ICsNCj4+ICsgICAgaW50ICAgICAgICAgICAgIGZlbmNlX3Zh bHVlOw0KPj4gK30gRDNEMTJWQUVuY29kZVBpY3R1cmU7DQo+PiArDQo+PiArdHlwZWRlZiBzdHJ1 Y3QgRDNEMTJWQUVuY29kZVByb2ZpbGUgew0KPj4gKyAgICAvKioNCj4+ICsgICAgICogbGF2YyBw cm9maWxlIHZhbHVlIChBVl9QUk9GSUxFXyopLg0KPj4gKyAgICAgKi8NCj4+ICsgICAgaW50ICAg ICAgIGF2X3Byb2ZpbGU7DQo+PiArDQo+PiArICAgIC8qKg0KPj4gKyAgICAgKiBTdXBwb3J0ZWQg Yml0IGRlcHRoLg0KPj4gKyAgICAgKi8NCj4+ICsgICAgaW50ICAgICAgIGRlcHRoOw0KPj4gKw0K Pj4gKyAgICAvKioNCj4+ICsgICAgICogTnVtYmVyIG9mIGNvbXBvbmVudHMuDQo+PiArICAgICAq Lw0KPj4gKyAgICBpbnQgICAgICAgbmJfY29tcG9uZW50czsNCj4+ICsNCj4+ICsgICAgLyoqDQo+ PiArICAgICAqIENocm9tYSBzdWJzYW1wbGluZyBpbiB3aWR0aCBkaW1lbnNpb24uDQo+PiArICAg ICAqLw0KPj4gKyAgICBpbnQgICAgICAgbG9nMl9jaHJvbWFfdzsNCj4+ICsNCj4+ICsgICAgLyoq DQo+PiArICAgICAqIENocm9tYSBzdWJzYW1wbGluZyBpbiBoZWlnaHQgZGltZW5zaW9uLg0KPj4g KyAgICAgKi8NCj4+ICsgICAgaW50ICAgICAgIGxvZzJfY2hyb21hX2g7DQo+PiArDQo+PiArICAg IC8qKg0KPj4gKyAgICAgKiBEM0QxMiBwcm9maWxlIHZhbHVlLg0KPj4gKyAgICAgKi8NCj4+ICsg ICAgRDNEMTJfVklERU9fRU5DT0RFUl9QUk9GSUxFX0RFU0MgZDNkMTJfcHJvZmlsZTsNCj4+ICt9 IEQzRDEyVkFFbmNvZGVQcm9maWxlOw0KPj4gKw0KPj4gK3R5cGVkZWYgc3RydWN0IEQzRDEyVkFF bmNvZGVSQ01vZGUgew0KPj4gKyAgICBIV0Jhc2VFbmNvZGVSQ01vZGUgYmFzZTsNCj4+ICsNCj4+ ICsgICAgLyoqDQo+PiArICAgICAqIFN1cHBvcnRlZCBieSBEM0QxMiBIVy4NCj4+ICsgICAgICov DQo+PiArICAgIGludCBzdXBwb3J0ZWQ7DQo+PiArDQo+PiArICAgIC8qKg0KPj4gKyAgICAgKiBE M0QxMiBtb2RlIHZhbHVlLg0KPj4gKyAgICAgKi8NCj4+ICsgICAgRDNEMTJfVklERU9fRU5DT0RF Ul9SQVRFX0NPTlRST0xfTU9ERSBkM2QxMl9tb2RlOw0KPj4gK30gRDNEMTJWQUVuY29kZVJDTW9k ZTsNCj4+ICsNCj4+ICt0eXBlZGVmIHN0cnVjdCBEM0QxMlZBRW5jb2RlQ29udGV4dCB7DQo+PiAr ICAgIEhXQmFzZUVuY29kZUNvbnRleHQgYmFzZTsNCj4+ICsNCj4+ICsgICAgLyoqDQo+PiArICAg ICAqIENvZGVjLXNwZWNpZmljIGhvb2tzLg0KPj4gKyAgICAgKi8NCj4+ICsgICAgY29uc3Qgc3Ry dWN0IEQzRDEyVkFFbmNvZGVUeXBlICpjb2RlYzsNCj4+ICsNCj4+ICsgICAgLyoqDQo+PiArICAg ICAqIENob3NlbiBlbmNvZGluZyBwcm9maWxlIGRldGFpbHMuDQo+PiArICAgICAqLw0KPj4gKyAg ICBjb25zdCBEM0QxMlZBRW5jb2RlUHJvZmlsZSAqcHJvZmlsZTsNCj4+ICsNCj4+ICsgICAgLyoq DQo+PiArICAgICAqIENob3NlbiByYXRlIGNvbnRyb2wgbW9kZSBkZXRhaWxzLg0KPj4gKyAgICAg Ki8NCj4+ICsgICAgY29uc3QgRDNEMTJWQUVuY29kZVJDTW9kZSAqcmNfbW9kZTsNCj4+ICsNCj4+ ICsgICAgQVZEM0QxMlZBRGV2aWNlQ29udGV4dCAqaHdjdHg7DQo+PiArDQo+PiArICAgIC8qKg0K Pj4gKyAgICAgKiBJRDNEMTJEZXZpY2UzIGludGVyZmFjZS4NCj4+ICsgICAgICovDQo+PiArICAg IElEM0QxMkRldmljZTMgKmRldmljZTM7DQo+PiArDQo+PiArICAgIC8qKg0KPj4gKyAgICAgKiBJ RDNEMTJWaWRlb0RldmljZTMgaW50ZXJmYWNlLg0KPj4gKyAgICAgKi8NCj4+ICsgICAgSUQzRDEy VmlkZW9EZXZpY2UzICp2aWRlb19kZXZpY2UzOw0KPj4gKw0KPj4gKyAgICAvKioNCj4+ICsgICAg ICogUG9vbCBvZiAocmV1c2FibGUpIGJpdHN0cmVhbSBvdXRwdXQgYnVmZmVycy4NCj4+ICsgICAg ICovDQo+PiArICAgIEFWQnVmZmVyUG9vbCAgICpvdXRwdXRfYnVmZmVyX3Bvb2w7DQo+PiArDQo+ PiArICAgIC8qKg0KPj4gKyAgICAgKiBEM0QxMiB2aWRlbyBlbmNvZGVyLg0KPj4gKyAgICAgKi8N Cj4+ICsgICAgQVZCdWZmZXJSZWYgKmVuY29kZXJfcmVmOw0KPj4gKw0KPj4gKyAgICBJRDNEMTJW aWRlb0VuY29kZXIgKmVuY29kZXI7DQo+PiArDQo+PiArICAgIC8qKg0KPj4gKyAgICAgKiBEM0Qx MiB2aWRlbyBlbmNvZGVyIGhlYXAuDQo+PiArICAgICAqLw0KPj4gKyAgICBJRDNEMTJWaWRlb0Vu Y29kZXJIZWFwICplbmNvZGVyX2hlYXA7DQo+PiArDQo+PiArICAgIC8qKg0KPj4gKyAgICAgKiBB IGNhY2hlZCBxdWV1ZSBmb3IgcmV1c2luZyB0aGUgRDNEMTIgY29tbWFuZCBhbGxvY2F0b3JzLg0K Pj4gKyAgICAgKg0KPj4gKyAgICAgKiBAc2VlIGh0dHBzOi8vbGVhcm4ubWljcm9zb2Z0LmNvbS9l bi0NCj51cy93aW5kb3dzL3dpbjMyL2RpcmVjdDNkMTIvcmVjb3JkaW5nLWNvbW1hbmQtbGlzdHMt YW5kLQ0KPmJ1bmRsZXMjaWQzZDEyY29tbWFuZGFsbG9jYXRvcg0KPj4gKyAgICAgKi8NCj4+ICsg ICAgQVZGaWZvICphbGxvY2F0b3JfcXVldWU7DQo+PiArDQo+PiArICAgIC8qKg0KPj4gKyAgICAg KiBEM0QxMiBjb21tYW5kIHF1ZXVlLg0KPj4gKyAgICAgKi8NCj4+ICsgICAgSUQzRDEyQ29tbWFu ZFF1ZXVlICpjb21tYW5kX3F1ZXVlOw0KPj4gKw0KPj4gKyAgICAvKioNCj4+ICsgICAgICogRDNE MTIgdmlkZW8gZW5jb2RlIGNvbW1hbmQgbGlzdC4NCj4+ICsgICAgICovDQo+PiArICAgIElEM0Qx MlZpZGVvRW5jb2RlQ29tbWFuZExpc3QyICpjb21tYW5kX2xpc3Q7DQo+PiArDQo+PiArICAgIC8q Kg0KPj4gKyAgICAgKiBUaGUgc3luYyBjb250ZXh0IHVzZWQgdG8gc3luYyBjb21tYW5kIHF1ZXVl Lg0KPj4gKyAgICAgKi8NCj4+ICsgICAgQVZEM0QxMlZBU3luY0NvbnRleHQgc3luY19jdHg7DQo+ PiArDQo+PiArICAgIC8qKg0KPj4gKyAgICAgKiBUaGUgYmlfbm90X2VtcHR5IGZlYXR1cmUuDQo+ PiArICAgICAqLw0KPj4gKyAgICBpbnQgYmlfbm90X2VtcHR5Ow0KPj4gKw0KPj4gKyAgICAvKioN Cj4+ICsgICAgICogRDNEMTJfRkVBVFVSRSBzdHJ1Y3R1cmVzLg0KPj4gKyAgICAgKi8NCj4+ICsg ICAgRDNEMTJfRkVBVFVSRV9EQVRBX1ZJREVPX0VOQ09ERVJfUkVTT1VSQ0VfUkVRVUlSRU1FTlRT DQo+cmVxOw0KPj4gKw0KPj4gKw0KPkQzRDEyX0ZFQVRVUkVfREFUQV9WSURFT19FTkNPREVSX1JF U09MVVRJT05fU1VQUE9SVF9MSU1JVFMNCj5yZXNfbGltaXRzOw0KPj4gKw0KPj4gKyAgICAvKioN Cj4+ICsgICAgICogRDNEMTJfVklERU9fRU5DT0RFUiBzdHJ1Y3R1cmVzLg0KPj4gKyAgICAgKi8N Cj4+ICsgICAgRDNEMTJfVklERU9fRU5DT0RFUl9QSUNUVVJFX1JFU09MVVRJT05fREVTQyByZXNv bHV0aW9uOw0KPj4gKw0KPj4gKyAgICBEM0QxMl9WSURFT19FTkNPREVSX0NPREVDX0NPTkZJR1VS QVRJT04gY29kZWNfY29uZjsNCj4+ICsNCj4+ICsgICAgRDNEMTJfVklERU9fRU5DT0RFUl9SQVRF X0NPTlRST0wgcmM7DQo+PiArDQo+PiArICAgIEQzRDEyX1ZJREVPX0VOQ09ERVJfU0VRVUVOQ0Vf R09QX1NUUlVDVFVSRSBnb3A7DQo+PiArDQo+PiArICAgIEQzRDEyX1ZJREVPX0VOQ09ERVJfTEVW RUxfU0VUVElORyBsZXZlbDsNCj4+ICt9IEQzRDEyVkFFbmNvZGVDb250ZXh0Ow0KPj4gKw0KPj4g K3R5cGVkZWYgc3RydWN0IEQzRDEyVkFFbmNvZGVUeXBlIHsNCj4+ICsgICAgLyoqDQo+PiArICAg ICAqIExpc3Qgb2Ygc3VwcG9ydGVkIHByb2ZpbGVzLg0KPj4gKyAgICAgKi8NCj4+ICsgICBjb25z dCBEM0QxMlZBRW5jb2RlUHJvZmlsZSAqcHJvZmlsZXM7DQo+PiArDQo+PiArICAgIC8qKg0KPj4g KyAgICAgKiBEM0QxMiBjb2RlYyBuYW1lLg0KPj4gKyAgICAgKi8NCj4+ICsgICAgRDNEMTJfVklE RU9fRU5DT0RFUl9DT0RFQyBkM2QxMl9jb2RlYzsNCj4+ICsNCj4+ICsgICAgLyoqDQo+PiArICAg ICAqIENvZGVjIGZlYXR1cmUgZmxhZ3MuDQo+PiArICAgICAqLw0KPj4gKyAgICBpbnQgZmxhZ3M7 DQo+PiArDQo+PiArICAgIC8qKg0KPj4gKyAgICAgKiBEZWZhdWx0IHF1YWxpdHkgZm9yIHRoaXMg Y29kZWMgLSB1c2VkIGFzIHF1YW50aXNlciBvciBSQyBxdWFsaXR5DQo+PiArICAgICAqIGZhY3Rv ciBkZXBlbmRpbmcgb24gUkMgbW9kZS4NCj4+ICsgICAgICovDQo+PiArICAgIGludCBkZWZhdWx0 X3F1YWxpdHk7DQo+PiArDQo+PiArICAgIC8qKg0KPj4gKyAgICAgKiBRdWVyeSBjb2RlYyBjb25m aWd1cmF0aW9uIGFuZCBkZXRlcm1pbmUgZW5jb2RlIHBhcmFtZXRlcnMgbGlrZQ0KPj4gKyAgICAg KiBibG9jayBzaXplcyBmb3Igc3VyZmFjZSBhbGlnbm1lbnQgYW5kIHNsaWNlcy4gSWYgbm90IHNl dCwgYXNzdW1lDQo+PiArICAgICAqIHRoYXQgYWxsIGJsb2NrcyBhcmUgMTZ4MTYgYW5kIHRoYXQg c3VyZmFjZXMgc2hvdWxkIGJlIGFsaWduZWQgdG8gbWF0Y2gNCj4+ICsgICAgICogdGhpcy4NCj4+ ICsgICAgICovDQo+PiArICAgIGludCAoKmdldF9lbmNvZGVyX2NhcHMpKEFWQ29kZWNDb250ZXh0 ICphdmN0eCk7DQo+PiArDQo+PiArICAgIC8qKg0KPj4gKyAgICAgKiBQZXJmb3JtIGFueSBleHRy YSBjb2RlYy1zcGVjaWZpYyBjb25maWd1cmF0aW9uLg0KPj4gKyAgICAgKi8NCj4+ICsgICAgaW50 ICgqY29uZmlndXJlKShBVkNvZGVjQ29udGV4dCAqYXZjdHgpOw0KPj4gKw0KPj4gKyAgICAvKioN Cj4+ICsgICAgICogU2V0IGNvZGVjLXNwZWNpZmljIGxldmVsIHNldHRpbmcuDQo+PiArICAgICAq Lw0KPj4gKyAgICBpbnQgKCpzZXRfbGV2ZWwpKEFWQ29kZWNDb250ZXh0ICphdmN0eCk7DQo+PiAr DQo+PiArICAgIC8qKg0KPj4gKyAgICAgKiBUaGUgc2l6ZSBvZiBhbnkgcHJpdmF0ZSBkYXRhIHN0 cnVjdHVyZSBhc3NvY2lhdGVkIHdpdGggZWFjaA0KPj4gKyAgICAgKiBwaWN0dXJlIChjYW4gYmUg emVybyBpZiBub3QgcmVxdWlyZWQpLg0KPj4gKyAgICAgKi8NCj4+ICsgICAgc2l6ZV90IHBpY3R1 cmVfcHJpdl9kYXRhX3NpemU7DQo+PiArDQo+PiArICAgIC8qKg0KPj4gKyAgICAgKiBGaWxsIHRo ZSBjb3JyZXNwb25kaW5nIHBhcmFtZXRlcnMuDQo+PiArICAgICAqLw0KPj4gKyAgICBpbnQgKCpp bml0X3NlcXVlbmNlX3BhcmFtcykoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KTsNCj4+ICsNCj4+ICsg ICAgaW50ICgqaW5pdF9waWN0dXJlX3BhcmFtcykoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LA0KPj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0QxMlZBRW5jb2RlUGljdHVyZSAqcGlj KTsNCj4+ICsNCj4+ICsgICAgdm9pZCAoKmZyZWVfcGljdHVyZV9wYXJhbXMpKEQzRDEyVkFFbmNv ZGVQaWN0dXJlICpwaWMpOw0KPj4gKw0KPj4gKyAgICAvKioNCj4+ICsgICAgICogV3JpdGUgdGhl IHBhY2tlZCBoZWFkZXIgZGF0YSB0byB0aGUgcHJvdmlkZWQgYnVmZmVyLg0KPj4gKyAgICAgKi8N Cj4+ICsgICAgaW50ICgqd3JpdGVfc2VxdWVuY2VfaGVhZGVyKShBVkNvZGVjQ29udGV4dCAqYXZj dHgsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZGF0YSwgc2l6 ZV90ICpkYXRhX2xlbik7DQo+PiArfSBEM0QxMlZBRW5jb2RlVHlwZTsNCj4+ICsNCj4+ICtpbnQg ZmZfZDNkMTJ2YV9lbmNvZGVfaW5pdChBVkNvZGVjQ29udGV4dCAqYXZjdHgpOw0KPj4gK2ludCBm Zl9kM2QxMnZhX2VuY29kZV9jbG9zZShBVkNvZGVjQ29udGV4dCAqYXZjdHgpOw0KPj4gKw0KPj4g KyNlbmRpZiAvKiBBVkNPREVDX0QzRDEyVkFfRU5DT0RFX0ggKi8NCj4+IGRpZmYgLS1naXQgYS9s aWJhdmNvZGVjL2QzZDEydmFfZW5jb2RlX2hldmMuYw0KPmIvbGliYXZjb2RlYy9kM2QxMnZhX2Vu Y29kZV9oZXZjLmMNCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+PiBpbmRleCAwMDAwMDAwMDAw Li42NWNmMGQ0MGM3DQo+PiAtLS0gL2Rldi9udWxsDQo+PiArKysgYi9saWJhdmNvZGVjL2QzZDEy dmFfZW5jb2RlX2hldmMuYw0KPj4gQEAgLTAsMCArMSwxMDEzIEBADQo+PiArLyoNCj4+ICsgKiBE aXJlY3QzRCAxMiBIVyBhY2NlbGVyYXRpb24gdmlkZW8gZW5jb2Rlcg0KPj4gKyAqDQo+PiArICog Q29weXJpZ2h0IChjKSAyMDI0IEludGVsIENvcnBvcmF0aW9uDQo+PiArICoNCj4+ICsgKiBUaGlz IGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuDQo+PiArICoNCj4+ICsgKiBGRm1wZWcgaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQo+PiArICogbW9kaWZ5IGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0KPj4gKyAq IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlcg0KPj4gKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLg0KPj4gKyAqDQo+PiArICogRkZtcGVnIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQo+PiArICogYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCj4+ ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlDQo+R05VDQo+PiArICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4NCj4+ICsgKg0KPj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCj4+ICsgKiBMaWNlbnNlIGFs b25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQo+PiAr ICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z dG9uLCBNQSAwMjExMC0xMzAxDQo+VVNBDQo+PiArICovDQo+PiArI2luY2x1ZGUgImxpYmF2dXRp bC9vcHQuaCINCj4+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2NvbW1vbi5oIg0KPj4gKyNpbmNsdWRl ICJsaWJhdnV0aWwvcGl4ZGVzYy5oIg0KPj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvaHdjb250ZXh0 X2QzZDEydmFfaW50ZXJuYWwuaCINCj4+ICsNCj4+ICsjaW5jbHVkZSAiYXZjb2RlYy5oIg0KPj4g KyNpbmNsdWRlICJjYnMuaCINCj4+ICsjaW5jbHVkZSAiY2JzX2gyNjUuaCINCj4+ICsjaW5jbHVk ZSAiaDI2NDVkYXRhLmgiDQo+PiArI2luY2x1ZGUgImgyNjVfcHJvZmlsZV9sZXZlbC5oIg0KPj4g KyNpbmNsdWRlICJjb2RlY19pbnRlcm5hbC5oIg0KPj4gKyNpbmNsdWRlICJkM2QxMnZhX2VuY29k ZS5oIg0KPj4gKw0KPj4gK3R5cGVkZWYgc3RydWN0IEQzRDEyVkFFbmNvZGVIRVZDUGljdHVyZSB7 DQo+PiArICAgIGludCBwaWNfb3JkZXJfY250Ow0KPj4gKw0KPj4gKyAgICBpbnQ2NF90IGxhc3Rf aWRyX2ZyYW1lOw0KPj4gKw0KPj4gKyAgICBpbnQgc2xpY2VfbmFsX3VuaXQ7DQo+PiArICAgIGlu dCBzbGljZV90eXBlOw0KPj4gKyAgICBpbnQgcGljX3R5cGU7DQo+PiArfSBEM0QxMlZBRW5jb2Rl SEVWQ1BpY3R1cmU7DQo+PiArDQo+PiArdHlwZWRlZiBzdHJ1Y3QgRDNEMTJWQUVuY29kZUhFVkND b250ZXh0IHsNCj4+ICsgICAgRDNEMTJWQUVuY29kZUNvbnRleHQgY29tbW9uOw0KPj4gKw0KPj4g KyAgICAvLyBVc2VyIG9wdGlvbnMuDQo+PiArICAgIGludCBxcDsNCj4+ICsgICAgaW50IGF1ZDsN Cj4+ICsgICAgaW50IHByb2ZpbGU7DQo+PiArICAgIGludCB0aWVyOw0KPj4gKyAgICBpbnQgbGV2 ZWw7DQo+PiArICAgIGludCBzZWk7DQo+PiArDQo+PiArICAgIC8vIFdyaXRlciBzdHJ1Y3R1cmVz Lg0KPj4gKyAgICBIMjY1UmF3QVVEICAgcmF3X2F1ZDsNCj4+ICsgICAgSDI2NVJhd1ZQUyAgIHJh d192cHM7DQo+PiArICAgIEgyNjVSYXdTUFMgICByYXdfc3BzOw0KPj4gKyAgICBIMjY1UmF3UFBT ICAgcmF3X3BwczsNCj4+ICsgICAgSDI2NVJhd1NsaWNlIHJhd19zbGljZTsNCj4NCj5Tb21lIG9m IHRoZXNlIGFyZSBuZXZlciB1c2VkPw0KDQpXaWxsIHJlbW92ZS4NCg0KPg0KPj4gKw0KPj4gKyAg ICBDb2RlZEJpdHN0cmVhbUNvbnRleHQgKmNiYzsNCj4+ICsgICAgQ29kZWRCaXRzdHJlYW1GcmFn bWVudCBjdXJyZW50X2FjY2Vzc191bml0Ow0KPj4gK30gRDNEMTJWQUVuY29kZUhFVkNDb250ZXh0 Ow0KPj4gKw0KPj4gK3N0YXRpYyBjb25zdA0KPkQzRDEyX1ZJREVPX0VOQ09ERVJfQ09ERUNfQ09O RklHVVJBVElPTl9TVVBQT1JUX0hFVkMNCj5oZXZjX2NvbmZpZ19zdXBwb3J0X3NldHNbXSA9DQo+ PiArew0KPj4gKyAgICB7DQo+PiArDQo+RDNEMTJfVklERU9fRU5DT0RFUl9DT0RFQ19DT05GSUdV UkFUSU9OX1NVUFBPUlRfSEVWQ19GTEFHX04NCj5PTkUsDQo+PiArDQo+RDNEMTJfVklERU9fRU5D T0RFUl9DT0RFQ19DT05GSUdVUkFUSU9OX0hFVkNfQ1VTSVpFXzh4OCwNCj4+ICsNCj5EM0QxMl9W SURFT19FTkNPREVSX0NPREVDX0NPTkZJR1VSQVRJT05fSEVWQ19DVVNJWkVfMzJ4MzIsDQo+PiAr DQo+RDNEMTJfVklERU9fRU5DT0RFUl9DT0RFQ19DT05GSUdVUkFUSU9OX0hFVkNfVFVTSVpFXzR4 NCwNCj4+ICsNCj5EM0QxMl9WSURFT19FTkNPREVSX0NPREVDX0NPTkZJR1VSQVRJT05fSEVWQ19U VVNJWkVfMzJ4MzIsDQo+PiArICAgICAgICAzLA0KPj4gKyAgICAgICAgMywNCj4+ICsgICAgfSwN Cj4+ICsgICAgew0KPj4gKw0KPkQzRDEyX1ZJREVPX0VOQ09ERVJfQ09ERUNfQ09ORklHVVJBVElP Tl9TVVBQT1JUX0hFVkNfRkxBR19ODQo+T05FLA0KPj4gKw0KPkQzRDEyX1ZJREVPX0VOQ09ERVJf Q09ERUNfQ09ORklHVVJBVElPTl9IRVZDX0NVU0laRV84eDgsDQo+PiArDQo+RDNEMTJfVklERU9f RU5DT0RFUl9DT0RFQ19DT05GSUdVUkFUSU9OX0hFVkNfQ1VTSVpFXzMyeDMyLA0KPj4gKw0KPkQz RDEyX1ZJREVPX0VOQ09ERVJfQ09ERUNfQ09ORklHVVJBVElPTl9IRVZDX1RVU0laRV80eDQsDQo+ PiArDQo+RDNEMTJfVklERU9fRU5DT0RFUl9DT0RFQ19DT05GSUdVUkFUSU9OX0hFVkNfVFVTSVpF XzMyeDMyLA0KPj4gKyAgICAgICAgMCwNCj4+ICsgICAgICAgIDAsDQo+PiArICAgIH0sDQo+PiAr ICAgIHsNCj4+ICsNCj5EM0QxMl9WSURFT19FTkNPREVSX0NPREVDX0NPTkZJR1VSQVRJT05fU1VQ UE9SVF9IRVZDX0ZMQUdfTg0KPk9ORSwNCj4+ICsNCj5EM0QxMl9WSURFT19FTkNPREVSX0NPREVD X0NPTkZJR1VSQVRJT05fSEVWQ19DVVNJWkVfOHg4LA0KPj4gKw0KPkQzRDEyX1ZJREVPX0VOQ09E RVJfQ09ERUNfQ09ORklHVVJBVElPTl9IRVZDX0NVU0laRV8zMngzMiwNCj4+ICsNCj5EM0QxMl9W SURFT19FTkNPREVSX0NPREVDX0NPTkZJR1VSQVRJT05fSEVWQ19UVVNJWkVfNHg0LA0KPj4gKw0K PkQzRDEyX1ZJREVPX0VOQ09ERVJfQ09ERUNfQ09ORklHVVJBVElPTl9IRVZDX1RVU0laRV8zMngz MiwNCj4+ICsgICAgICAgIDIsDQo+PiArICAgICAgICAyLA0KPj4gKyAgICB9LA0KPj4gKyAgICB7 DQo+PiArDQo+RDNEMTJfVklERU9fRU5DT0RFUl9DT0RFQ19DT05GSUdVUkFUSU9OX1NVUFBPUlRf SEVWQ19GTEFHX04NCj5PTkUsDQo+PiArDQo+RDNEMTJfVklERU9fRU5DT0RFUl9DT0RFQ19DT05G SUdVUkFUSU9OX0hFVkNfQ1VTSVpFXzh4OCwNCj4+ICsNCj5EM0QxMl9WSURFT19FTkNPREVSX0NP REVDX0NPTkZJR1VSQVRJT05fSEVWQ19DVVNJWkVfNjR4NjQsDQo+PiArDQo+RDNEMTJfVklERU9f RU5DT0RFUl9DT0RFQ19DT05GSUdVUkFUSU9OX0hFVkNfVFVTSVpFXzR4NCwNCj4+ICsNCj5EM0Qx Ml9WSURFT19FTkNPREVSX0NPREVDX0NPTkZJR1VSQVRJT05fSEVWQ19UVVNJWkVfMzJ4MzIsDQo+ PiArICAgICAgICAyLA0KPj4gKyAgICAgICAgMiwNCj4+ICsgICAgfSwNCj4+ICsgICAgew0KPj4g Kw0KPkQzRDEyX1ZJREVPX0VOQ09ERVJfQ09ERUNfQ09ORklHVVJBVElPTl9TVVBQT1JUX0hFVkNf RkxBR19ODQo+T05FLA0KPj4gKw0KPkQzRDEyX1ZJREVPX0VOQ09ERVJfQ09ERUNfQ09ORklHVVJB VElPTl9IRVZDX0NVU0laRV84eDgsDQo+PiArDQo+RDNEMTJfVklERU9fRU5DT0RFUl9DT0RFQ19D T05GSUdVUkFUSU9OX0hFVkNfQ1VTSVpFXzY0eDY0LA0KPj4gKw0KPkQzRDEyX1ZJREVPX0VOQ09E RVJfQ09ERUNfQ09ORklHVVJBVElPTl9IRVZDX1RVU0laRV80eDQsDQo+PiArDQo+RDNEMTJfVklE RU9fRU5DT0RFUl9DT0RFQ19DT05GSUdVUkFUSU9OX0hFVkNfVFVTSVpFXzMyeDMyLA0KPj4gKyAg ICAgICAgNCwNCj4+ICsgICAgICAgIDQsDQo+PiArICAgIH0sDQo+PiArfTsNCj4NCj5XaGF0IGlz IHRoZSBtb3RpdmF0aW9uIGZvciBoYXJkLWNvZGVpbmcgYSBsaW1pdGVkIHNldCBvZiBwb3NzaWJs ZSBjb25maWd1cmF0aW9ucw0KPmxpa2UgdGhpcz8gIEl0IHNob3VsZCBiZSBzdHJhaWdodGZvcndh cmQgdG8gYWxsb3cgd2hhdGV2ZXIgdGhlIGVuY29kZXIgcHJlZmVycy4NCg0KU2VlIGh0dHBzOi8v bGVhcm4ubWljcm9zb2Z0LmNvbS9lbi11cy93aW5kb3dzL3dpbjMyL2FwaS9kM2QxMnZpZGVvL25z LWQzZDEydmlkZW8tZDNkMTJfZmVhdHVyZV9kYXRhX3ZpZGVvX2VuY29kZXJfY29kZWNfY29uZmln dXJhdGlvbl9zdXBwb3J0Lg0KRm9yIEhFVkMsIHRoZSBjYWxsZXIgcG9wdWxhdGVzIHRoaXMgc3Ry dWN0dXJlIHdpdGggdGhlIGRlc2lyZWQgZW5jb2RlciBjb25maWd1cmF0aW9uLiBGb3IgSC4yNjQs IHRoZSBDaGVja0ZlYXR1cmVTdXBwb3J0IGNhbGwgcG9wdWxhdGVzIHRoZSBzdHJ1Y3R1cmUgd2l0 aCB0aGUgc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb24uDQoNCkl0IHNlZW1zIGZvciBIRVZDIHdlIGhh dmUgdG8gbWFudWFsbHkgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gc3VwcG9ydC4gSSByZWZlcmVu Y2VkIG1lc2EgZDNkMTIgZHJpdmVyIHdoaWNoIGRpZCB0aGUgc2FtZSB0aGluZy4NCg0KPg0KPj4g Kw0KPj4gK3N0YXRpYyBEM0QxMl9WSURFT19FTkNPREVSX1BST0ZJTEVfSEVWQyBwcm9maWxlX21h aW4gICA9DQo+RDNEMTJfVklERU9fRU5DT0RFUl9QUk9GSUxFX0hFVkNfTUFJTjsNCj4+ICtzdGF0 aWMgRDNEMTJfVklERU9fRU5DT0RFUl9QUk9GSUxFX0hFVkMgcHJvZmlsZV9tYWluMTAgPQ0KPkQz RDEyX1ZJREVPX0VOQ09ERVJfUFJPRklMRV9IRVZDX01BSU4xMDsNCj4NCj5UaGVzZSByZWFsbHkg c2hvdWxkIGJlIGNvbnN0IHNvIHRoZXkgZ28gaW4gcm9kYXRhOyBJIHRoaW5rIGNhc3QgdGhlIGNv bnN0IGF3YXkNCj5iZWxvdyB0byBnZXQgYXJvdW5kIHRoZSBiYWRseS13cml0dGVuIEFQSS4NCg0K V2lsbCBkby4NCg0KPg0KPj4gKw0KPj4gKyNkZWZpbmUgRDNEX1BST0ZJTEVfREVTQyhuYW1lKQ0K Pnsgc2l6ZW9mKEQzRDEyX1ZJREVPX0VOQ09ERVJfUFJPRklMRV9IRVZDKSwgeyAucEhFVkNQcm9m aWxlID0gJnByb2ZpbGVfDQo+IyMgbmFtZSB9IH0NCj4+ICtzdGF0aWMgY29uc3QgRDNEMTJWQUVu Y29kZVByb2ZpbGUgZDNkMTJ2YV9lbmNvZGVfaGV2Y19wcm9maWxlc1tdID0gew0KPj4gKyAgICB7 IEFWX1BST0ZJTEVfSEVWQ19NQUlOLCAgICAgOCwgMywgMSwgMSwgRDNEX1BST0ZJTEVfREVTQyht YWluKSAgIH0sDQo+PiArICAgIHsgQVZfUFJPRklMRV9IRVZDX01BSU5fMTAsIDEwLCAzLCAxLCAx LCBEM0RfUFJPRklMRV9ERVNDKG1haW4xMCkgfSwNCj4+ICsgICAgeyBBVl9QUk9GSUxFX1VOS05P V04gfQ0KPj4gK307DQo+PiArDQo+PiArc3RhdGljIHVpbnQ4X3QNCj5kM2QxMnZhX2VuY29kZV9o ZXZjX21hcF9jdXNpemUoRDNEMTJfVklERU9fRU5DT0RFUl9DT0RFQ19DT05GSQ0KPkdVUkFUSU9O X0hFVkNfQ1VTSVpFIGN1c2l6ZSkNCj4+ICt7DQo+PiArICAgIHN3aXRjaCAoY3VzaXplKSB7DQo+ PiArICAgICAgICBjYXNlDQo+RDNEMTJfVklERU9fRU5DT0RFUl9DT0RFQ19DT05GSUdVUkFUSU9O X0hFVkNfQ1VTSVpFXzh4ODoNCj5yZXR1cm4gODsNCj4+ICsgICAgICAgIGNhc2UNCj5EM0QxMl9W SURFT19FTkNPREVSX0NPREVDX0NPTkZJR1VSQVRJT05fSEVWQ19DVVNJWkVfMTZ4MTY6DQo+cmV0 dXJuIDE2Ow0KPj4gKyAgICAgICAgY2FzZQ0KPkQzRDEyX1ZJREVPX0VOQ09ERVJfQ09ERUNfQ09O RklHVVJBVElPTl9IRVZDX0NVU0laRV8zMngzMjoNCj5yZXR1cm4gMzI7DQo+PiArICAgICAgICBj YXNlDQo+RDNEMTJfVklERU9fRU5DT0RFUl9DT0RFQ19DT05GSUdVUkFUSU9OX0hFVkNfQ1VTSVpF XzY0eDY0Og0KPnJldHVybiA2NDsNCj4+ICsgICAgICAgIGRlZmF1bHQ6IGF2X2Fzc2VydDAoMCk7 DQo+PiArICAgIH0NCj4+ICsgICAgcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB1 aW50OF90DQo+ZDNkMTJ2YV9lbmNvZGVfaGV2Y19tYXBfdHVzaXplKEQzRDEyX1ZJREVPX0VOQ09E RVJfQ09ERUNfQ09ORkkNCj5HVVJBVElPTl9IRVZDX1RVU0laRSB0dXNpemUpDQo+PiArew0KPj4g KyAgICBzd2l0Y2ggKHR1c2l6ZSkgew0KPj4gKyAgICAgICAgY2FzZQ0KPkQzRDEyX1ZJREVPX0VO Q09ERVJfQ09ERUNfQ09ORklHVVJBVElPTl9IRVZDX1RVU0laRV80eDQ6DQo+cmV0dXJuIDQ7DQo+ PiArICAgICAgICBjYXNlDQo+RDNEMTJfVklERU9fRU5DT0RFUl9DT0RFQ19DT05GSUdVUkFUSU9O X0hFVkNfVFVTSVpFXzh4ODoNCj5yZXR1cm4gODsNCj4+ICsgICAgICAgIGNhc2UNCj5EM0QxMl9W SURFT19FTkNPREVSX0NPREVDX0NPTkZJR1VSQVRJT05fSEVWQ19UVVNJWkVfMTZ4MTY6DQo+cmV0 dXJuIDE2Ow0KPj4gKyAgICAgICAgY2FzZQ0KPkQzRDEyX1ZJREVPX0VOQ09ERVJfQ09ERUNfQ09O RklHVVJBVElPTl9IRVZDX1RVU0laRV8zMngzMjoNCj5yZXR1cm4gMzI7DQo+PiArICAgICAgICBk ZWZhdWx0OiBhdl9hc3NlcnQwKDApOw0KPj4gKyAgICB9DQo+PiArICAgIHJldHVybiAwOw0KPj4g K30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGQzZDEydmFfZW5jb2RlX2hldmNfbWFwX2xldmVsKEFW Q29kZWNDb250ZXh0ICphdmN0eCwgaW50DQo+bGV2ZWwsDQo+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBEM0QxMl9WSURFT19FTkNPREVSX0xFVkVMU19IRVZDICps dmwpDQo+PiArew0KPj4gKyAgICBpbnQgc3BlY19sZXZlbDsNCj4+ICsNCj4+ICsgICAgc3BlY19s ZXZlbCA9IGxldmVsIC8gMzsNCj4NCj5TZWVtcyBzdXNjZXB0aWJsZSB0byB1bmV4cGVjdGVkIHJv dW5kaW5nPyAgSnVzdCB1c2UgdGhlIGxldmVsX2lkYyB2YWx1ZQ0KPmRpcmVjdGx5Lg0KDQpTdXJl Lg0KDQo+DQo+PiArICAgIHN3aXRjaChzcGVjX2xldmVsKQ0KPj4gKyAgICB7DQo+PiArICAgICAg ICBjYXNlIDEwOg0KPj4gKyAgICAgICAgICAgICpsdmwgPSBEM0QxMl9WSURFT19FTkNPREVSX0xF VkVMU19IRVZDXzE7DQo+PiArICAgICAgICAgICAgYnJlYWs7DQo+PiArICAgICAgICBjYXNlIDIw Og0KPj4gKyAgICAgICAgICAgICpsdmwgPSBEM0QxMl9WSURFT19FTkNPREVSX0xFVkVMU19IRVZD XzI7DQo+PiArICAgICAgICAgICAgYnJlYWs7DQo+PiArICAgICAgICBjYXNlIDIxOg0KPj4gKyAg ICAgICAgICAgICpsdmwgPSBEM0QxMl9WSURFT19FTkNPREVSX0xFVkVMU19IRVZDXzIxOw0KPj4g KyAgICAgICAgICAgIGJyZWFrOw0KPj4gKyAgICAgICAgY2FzZSAzMDoNCj4+ICsgICAgICAgICAg ICAgKmx2bCA9IEQzRDEyX1ZJREVPX0VOQ09ERVJfTEVWRUxTX0hFVkNfMzsNCj4+ICsgICAgICAg ICAgICAgYnJlYWs7DQo+PiArICAgICAgICBjYXNlIDMxOg0KPj4gKyAgICAgICAgICAgICpsdmwg PSBEM0QxMl9WSURFT19FTkNPREVSX0xFVkVMU19IRVZDXzMxOw0KPj4gKyAgICAgICAgICAgIGJy ZWFrOw0KPj4gKyAgICAgICAgY2FzZSA0MDoNCj4+ICsgICAgICAgICAgICAqbHZsID0gRDNEMTJf VklERU9fRU5DT0RFUl9MRVZFTFNfSEVWQ180Ow0KPj4gKyAgICAgICAgICAgIGJyZWFrOw0KPj4g KyAgICAgICAgY2FzZSA0MToNCj4+ICsgICAgICAgICAgICAqbHZsID0gRDNEMTJfVklERU9fRU5D T0RFUl9MRVZFTFNfSEVWQ180MTsNCj4+ICsgICAgICAgICAgICBicmVhazsNCj4+ICsgICAgICAg IGNhc2UgNTA6DQo+PiArICAgICAgICAgICAgKmx2bCA9IEQzRDEyX1ZJREVPX0VOQ09ERVJfTEVW RUxTX0hFVkNfNTsNCj4+ICsgICAgICAgICAgICBicmVhazsNCj4+ICsgICAgICAgIGNhc2UgNTE6 DQo+PiArICAgICAgICAgICAgKmx2bCA9IEQzRDEyX1ZJREVPX0VOQ09ERVJfTEVWRUxTX0hFVkNf NTE7DQo+PiArICAgICAgICAgICAgYnJlYWs7DQo+PiArICAgICAgICBjYXNlIDUyOg0KPj4gKyAg ICAgICAgICAgICpsdmwgPSBEM0QxMl9WSURFT19FTkNPREVSX0xFVkVMU19IRVZDXzUyOw0KPj4g KyAgICAgICAgICAgIGJyZWFrOw0KPj4gKyAgICAgICAgY2FzZSA2MDoNCj4+ICsgICAgICAgICAg ICAqbHZsID0gRDNEMTJfVklERU9fRU5DT0RFUl9MRVZFTFNfSEVWQ182Ow0KPj4gKyAgICAgICAg ICAgIGJyZWFrOw0KPj4gKyAgICAgICAgY2FzZSA2MToNCj4+ICsgICAgICAgICAgICAqbHZsID0g RDNEMTJfVklERU9fRU5DT0RFUl9MRVZFTFNfSEVWQ182MTsNCj4+ICsgICAgICAgICAgICBicmVh azsNCj4+ICsgICAgICAgIGNhc2UgNjI6DQo+PiArICAgICAgICAgICAgKmx2bCA9IEQzRDEyX1ZJ REVPX0VOQ09ERVJfTEVWRUxTX0hFVkNfNjI7DQo+PiArICAgICAgICAgICAgYnJlYWs7DQo+PiAr ICAgICAgICBkZWZhdWx0Og0KPj4gKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VS Uk9SLCAiSW52YWxpZCBsZXZlbCAlZC5cbiIsIGxldmVsKTsNCj4+ICsgICAgICAgICAgICByZXR1 cm4gQVZFUlJPUihFSU5WQUwpOw0KPg0KPkFueSByZWFzb24gdG8gd2FudCB0byBlbmZvcmNlIHRo aXM/ICBMZXZlbCA4LjUgc3RyZWFtcyBhcmUgYSB0aGluZywgYXMgaXMgdGhlDQo+ZnV0dXJlLg0K DQpJdCBsb29rcyBsaWtlIEQzRDEyIG9ubHkgaGFzIHRob3NlIGVudW1zIGFib3ZlLiDimLkNCg0K Pg0KPj4gKyAgICB9DQo+PiArICAgIHJldHVybiAwOw0KPj4gK30NCj4NCj5NYWtlIGEgdGFibGUs IHRoaXMgaXMgc2lsbHkgYXMgYSBmdW5jdGlvbi4NCg0KU3VyZS4gSSdsbCByZXBsYWNlIHRoZW0g d2l0aCBhIHN0cnVjdHVyZSBhcnJheSBhbmQgYSBmb3IgbG9vcC4NCg0KPg0KPj4gKw0KPj4gK3N0 YXRpYyBpbnQgZDNkMTJ2YV9lbmNvZGVfaGV2Y193cml0ZV9hY2Nlc3NfdW5pdChBVkNvZGVjQ29u dGV4dCAqYXZjdHgsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKmRhdGEsIHNpemVfdCAqZGF0YV9sZW4sDQo+PiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVkQml0c3RyZWFtRnJhZ21l bnQgKmF1KQ0KPj4gK3sNCj4+ICsgICAgRDNEMTJWQUVuY29kZUhFVkNDb250ZXh0ICpwcml2ID0g YXZjdHgtPnByaXZfZGF0YTsNCj4+ICsgICAgaW50IGVycjsNCj4+ICsNCj4+ICsgICAgZXJyID0g ZmZfY2JzX3dyaXRlX2ZyYWdtZW50X2RhdGEocHJpdi0+Y2JjLCBhdSk7DQo+PiArICAgIGlmIChl cnIgPCAwKSB7DQo+PiArICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxl ZCB0byB3cml0ZSBwYWNrZWQgaGVhZGVyLlxuIik7DQo+PiArICAgICAgICByZXR1cm4gZXJyOw0K Pj4gKyAgICB9DQo+PiArDQo+PiArICAgIGlmICgqZGF0YV9sZW4gPCA4ICogYXUtPmRhdGFfc2l6 ZSAtIGF1LT5kYXRhX2JpdF9wYWRkaW5nKSB7DQo+PiArICAgICAgICBhdl9sb2coYXZjdHgsIEFW X0xPR19FUlJPUiwgIkFjY2VzcyB1bml0IHRvbyBsYXJnZTogIg0KPj4gKyAgICAgICAgICAgICAg ICIlenUgPCAlenUuXG4iLCAqZGF0YV9sZW4sDQo+PiArICAgICAgICAgICAgICAgOCAqIGF1LT5k YXRhX3NpemUgLSBhdS0+ZGF0YV9iaXRfcGFkZGluZyk7DQo+PiArICAgICAgICByZXR1cm4gQVZF UlJPUihFTk9TUEMpOw0KPj4gKyAgICB9DQo+PiArDQo+PiArICAgIG1lbWNweShkYXRhLCBhdS0+ ZGF0YSwgYXUtPmRhdGFfc2l6ZSk7DQo+PiArICAgICpkYXRhX2xlbiA9IDggKiBhdS0+ZGF0YV9z aXplIC0gYXUtPmRhdGFfYml0X3BhZGRpbmc7DQo+PiArDQo+PiArICAgIHJldHVybiAwOw0KPj4g K30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGQzZDEydmFfZW5jb2RlX2hldmNfYWRkX25hbChBVkNv ZGVjQ29udGV4dCAqYXZjdHgsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQ29kZWRCaXRzdHJlYW1GcmFnbWVudCAqYXUsDQo+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdm9pZCAqbmFsX3VuaXQpDQo+PiArew0KPj4gKyAgICBIMjY1 UmF3TkFMVW5pdEhlYWRlciAqaGVhZGVyID0gbmFsX3VuaXQ7DQo+PiArICAgIGludCBlcnI7DQo+ PiArDQo+PiArICAgIGVyciA9IGZmX2Nic19pbnNlcnRfdW5pdF9jb250ZW50KGF1LCAtMSwNCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLT5uYWxfdW5pdF90 eXBlLCBuYWxfdW5pdCwgTlVMTCk7DQo+PiArICAgIGlmIChlcnIgPCAwKSB7DQo+PiArICAgICAg ICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBhZGQgTkFMIHVuaXQ6ICIN Cj4+ICsgICAgICAgICAgICAgICAidHlwZSA9ICVkLlxuIiwgaGVhZGVyLT5uYWxfdW5pdF90eXBl KTsNCj4+ICsgICAgICAgIHJldHVybiBlcnI7DQo+PiArICAgIH0NCj4+ICsNCj4+ICsgICAgcmV0 dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgZDNkMTJ2YV9lbmNvZGVfaGV2Y193 cml0ZV9zZXF1ZW5jZV9oZWFkZXIoQVZDb2RlY0NvbnRleHQNCj4qYXZjdHgsDQo+PiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpkYXRh LCBzaXplX3QgKmRhdGFfbGVuKQ0KPj4gK3sNCj4+ICsgICAgRDNEMTJWQUVuY29kZUhFVkNDb250 ZXh0ICpwcml2ID0gYXZjdHgtPnByaXZfZGF0YTsNCj4+ICsgICAgQ29kZWRCaXRzdHJlYW1GcmFn bWVudCAgICphdSAgID0gJnByaXYtPmN1cnJlbnRfYWNjZXNzX3VuaXQ7DQo+PiArICAgIGludCBl cnI7DQo+PiArDQo+PiArICAgIGVyciA9IGQzZDEydmFfZW5jb2RlX2hldmNfYWRkX25hbChhdmN0 eCwgYXUsICZwcml2LT5yYXdfdnBzKTsNCj4+ICsgICAgaWYgKGVyciA8IDApDQo+PiArICAgICAg ICBnb3RvIGZhaWw7DQo+PiArDQo+PiArICAgIGVyciA9IGQzZDEydmFfZW5jb2RlX2hldmNfYWRk X25hbChhdmN0eCwgYXUsICZwcml2LT5yYXdfc3BzKTsNCj4+ICsgICAgaWYgKGVyciA8IDApDQo+ PiArICAgICAgICBnb3RvIGZhaWw7DQo+PiArDQo+PiArICAgIGVyciA9IGQzZDEydmFfZW5jb2Rl X2hldmNfYWRkX25hbChhdmN0eCwgYXUsICZwcml2LT5yYXdfcHBzKTsNCj4+ICsgICAgaWYgKGVy ciA8IDApDQo+PiArICAgICAgICBnb3RvIGZhaWw7DQo+PiArDQo+PiArICAgIGVyciA9IGQzZDEy dmFfZW5jb2RlX2hldmNfd3JpdGVfYWNjZXNzX3VuaXQoYXZjdHgsIGRhdGEsIGRhdGFfbGVuLA0K PmF1KTsNCj4+ICtmYWlsOg0KPj4gKyAgICBmZl9jYnNfZnJhZ21lbnRfcmVzZXQoYXUpOw0KPj4g KyAgICByZXR1cm4gZXJyOw0KPj4gKw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGQzZDEy dmFfZW5jb2RlX2hldmNfaW5pdF9zZXF1ZW5jZV9wYXJhbXMoQVZDb2RlY0NvbnRleHQNCj4qYXZj dHgpDQo+PiArew0KPj4gKyAgICBIV0Jhc2VFbmNvZGVDb250ZXh0ICAqYmFzZV9jdHggPSBhdmN0 eC0+cHJpdl9kYXRhOw0KPj4gKyAgICBEM0QxMlZBRW5jb2RlQ29udGV4dCAgICAgKmN0eCAgPSBh dmN0eC0+cHJpdl9kYXRhOw0KPj4gKyAgICBEM0QxMlZBRW5jb2RlSEVWQ0NvbnRleHQgKnByaXYg PSBhdmN0eC0+cHJpdl9kYXRhOw0KPj4gKyAgICBBVkQzRDEyVkFGcmFtZXNDb250ZXh0ICAqaHdj dHggPSBiYXNlX2N0eC0+aW5wdXRfZnJhbWVzLT5od2N0eDsNCj4+ICsgICAgSDI2NVJhd1ZQUyAg ICAgICAgICAgICAgICp2cHMgID0gJnByaXYtPnJhd192cHM7DQo+PiArICAgIEgyNjVSYXdTUFMg ICAgICAgICAgICAgICAqc3BzICA9ICZwcml2LT5yYXdfc3BzOw0KPj4gKyAgICBIMjY1UmF3UFBT ICAgICAgICAgICAgICAgKnBwcyAgPSAmcHJpdi0+cmF3X3BwczsNCj4+ICsgICAgSDI2NVJhd1By b2ZpbGVUaWVyTGV2ZWwgICpwdGwgID0gJnZwcy0+cHJvZmlsZV90aWVyX2xldmVsOw0KPj4gKyAg ICBIMjY1UmF3VlVJICAgICAgICAgICAgICAgKnZ1aSAgPSAmc3BzLT52dWk7DQo+PiArICAgIEQz RDEyX1ZJREVPX0VOQ09ERVJfUFJPRklMRV9IRVZDIHByb2ZpbGUgPQ0KPkQzRDEyX1ZJREVPX0VO Q09ERVJfUFJPRklMRV9IRVZDX01BSU47DQo+PiArICAgIEQzRDEyX1ZJREVPX0VOQ09ERVJfTEVW RUxfVElFUl9DT05TVFJBSU5UU19IRVZDIGxldmVsID0geyAwIH07DQo+PiArICAgIGNvbnN0IEFW UGl4Rm10RGVzY3JpcHRvciAqZGVzYzsNCj4+ICsgICAgdWludDhfdCBtaW5fY3Vfc2l6ZSwgbWF4 X2N1X3NpemUsIG1pbl90dV9zaXplLCBtYXhfdHVfc2l6ZTsNCj4+ICsgICAgaW50IGNocm9tYV9m b3JtYXQsIGJpdF9kZXB0aDsNCj4+ICsgICAgSFJFU1VMVCBocjsNCj4+ICsgICAgaW50IGk7DQo+ PiArDQo+PiArICAgIEQzRDEyX0ZFQVRVUkVfREFUQV9WSURFT19FTkNPREVSX1NVUFBPUlQgc3Vw cG9ydCA9IHsNCj4+ICsgICAgICAgIC5Ob2RlSW5kZXggICAgICAgICAgICAgICAgICAgICAgICA9 IDAsDQo+PiArICAgICAgICAuQ29kZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBEM0Qx Ml9WSURFT19FTkNPREVSX0NPREVDX0hFVkMsDQo+PiArICAgICAgICAuSW5wdXRGb3JtYXQgICAg ICAgICAgICAgICAgICAgICAgPSBod2N0eC0+Zm9ybWF0LA0KPj4gKyAgICAgICAgLlJhdGVDb250 cm9sICAgICAgICAgICAgICAgICAgICAgID0gY3R4LT5yYywNCj4+ICsgICAgICAgIC5JbnRyYVJl ZnJlc2ggICAgICAgICAgICAgICAgICAgICA9DQo+RDNEMTJfVklERU9fRU5DT0RFUl9JTlRSQV9S RUZSRVNIX01PREVfTk9ORSwNCj4+ICsgICAgICAgIC5TdWJyZWdpb25GcmFtZUVuY29kaW5nICAg ICAgICAgICA9DQo+RDNEMTJfVklERU9fRU5DT0RFUl9GUkFNRV9TVUJSRUdJT05fTEFZT1VUX01P REVfRlVMTF9GUkFNRSwNCj4+ICsgICAgICAgIC5SZXNvbHV0aW9uc0xpc3RDb3VudCAgICAgICAg ICAgICA9IDEsDQo+PiArICAgICAgICAucFJlc29sdXRpb25MaXN0ICAgICAgICAgICAgICAgICAg PSAmY3R4LT5yZXNvbHV0aW9uLA0KPj4gKyAgICAgICAgLkNvZGVjR29wU2VxdWVuY2UgICAgICAg ICAgICAgICAgID0gY3R4LT5nb3AsDQo+PiArICAgICAgICAuTWF4UmVmZXJlbmNlRnJhbWVzSW5E UEIgICAgICAgICAgPSBNQVhfRFBCX1NJWkUgLSAxLA0KPj4gKyAgICAgICAgLkNvZGVjQ29uZmln dXJhdGlvbiAgICAgICAgICAgICAgID0gY3R4LT5jb2RlY19jb25mLA0KPj4gKyAgICAgICAgLlN1 Z2dlc3RlZFByb2ZpbGUuRGF0YVNpemUgICAgICAgID0NCj5zaXplb2YoRDNEMTJfVklERU9fRU5D T0RFUl9QUk9GSUxFX0hFVkMpLA0KPj4gKyAgICAgICAgLlN1Z2dlc3RlZFByb2ZpbGUucEhFVkNQ cm9maWxlICAgID0gJnByb2ZpbGUsDQo+PiArICAgICAgICAuU3VnZ2VzdGVkTGV2ZWwuRGF0YVNp emUgICAgICAgICAgPQ0KPnNpemVvZihEM0QxMl9WSURFT19FTkNPREVSX0xFVkVMX1RJRVJfQ09O U1RSQUlOVFNfSEVWQyksDQo+PiArICAgICAgICAuU3VnZ2VzdGVkTGV2ZWwucEhFVkNMZXZlbFNl dHRpbmcgPSAmbGV2ZWwsDQo+PiArICAgICAgICAucFJlc29sdXRpb25EZXBlbmRlbnRTdXBwb3J0 ICAgICAgPSAmY3R4LT5yZXNfbGltaXRzLA0KPj4gKyAgICAgfTsNCj4+ICsNCj4+ICsgICAgaHIg PSBJRDNEMTJWaWRlb0RldmljZTNfQ2hlY2tGZWF0dXJlU3VwcG9ydChjdHgtPnZpZGVvX2Rldmlj ZTMsDQo+RDNEMTJfRkVBVFVSRV9WSURFT19FTkNPREVSX1NVUFBPUlQsDQo+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN1cHBvcnQsIHNpemVvZihz dXBwb3J0KSk7DQo+PiArDQo+PiArICAgIGlmIChGQUlMRUQoaHIpKSB7DQo+PiArICAgICAgICBh dl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBjaGVjayBlbmNvZGVyDQo+c3Vw cG9ydCglbHgpLlxuIiwgKGxvbmcpaHIpOw0KPj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlO VkFMKTsNCj4+ICsgICAgfQ0KPj4gKw0KPj4gKyAgICBpZiAoIShzdXBwb3J0LlN1cHBvcnRGbGFn cyAmDQo+RDNEMTJfVklERU9fRU5DT0RFUl9TVVBQT1JUX0ZMQUdfR0VORVJBTF9TVVBQT1JUX09L KSkgew0KPj4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJEcml2ZXIgZG9l cyBub3Qgc3VwcG9ydCBzb21lIHJlcXVlc3QNCj5mZWF0dXJlcy4gJSN4XG4iLA0KPj4gKyAgICAg ICAgICAgICAgIHN1cHBvcnQuVmFsaWRhdGlvbkZsYWdzKTsNCj4+ICsgICAgICAgIHJldHVybiBB VkVSUk9SKEVJTlZBTCk7DQo+PiArICAgIH0NCj4+ICsNCj4+ICsgICAgbWVtc2V0KHZwcywgMCwg c2l6ZW9mKCp2cHMpKTsNCj4+ICsgICAgbWVtc2V0KHNwcywgMCwgc2l6ZW9mKCpzcHMpKTsNCj4+ ICsgICAgbWVtc2V0KHBwcywgMCwgc2l6ZW9mKCpwcHMpKTsNCj4+ICsNCj4+ICsgICAgZGVzYyA9 IGF2X3BpeF9mbXRfZGVzY19nZXQoYmFzZV9jdHgtPmlucHV0X2ZyYW1lcy0+c3dfZm9ybWF0KTsN Cj4+ICsgICAgYXZfYXNzZXJ0MChkZXNjKTsNCj4+ICsgICAgaWYgKGRlc2MtPm5iX2NvbXBvbmVu dHMgPT0gMSkgew0KPj4gKyAgICAgICAgY2hyb21hX2Zvcm1hdCA9IDA7DQo+PiArICAgIH0gZWxz ZSB7DQo+PiArICAgICAgICBpZiAoZGVzYy0+bG9nMl9jaHJvbWFfdyA9PSAxICYmIGRlc2MtPmxv ZzJfY2hyb21hX2ggPT0gMSkgew0KPj4gKyAgICAgICAgICAgIGNocm9tYV9mb3JtYXQgPSAxOw0K Pj4gKyAgICAgICAgfSBlbHNlIGlmIChkZXNjLT5sb2cyX2Nocm9tYV93ID09IDEgJiYgZGVzYy0+ bG9nMl9jaHJvbWFfaCA9PSAwKSB7DQo+PiArICAgICAgICAgICAgY2hyb21hX2Zvcm1hdCA9IDI7 DQo+PiArICAgICAgICB9IGVsc2UgaWYgKGRlc2MtPmxvZzJfY2hyb21hX3cgPT0gMCAmJiBkZXNj LT5sb2cyX2Nocm9tYV9oID09IDApIHsNCj4+ICsgICAgICAgICAgICBjaHJvbWFfZm9ybWF0ID0g MzsNCj4+ICsgICAgICAgIH0gZWxzZSB7DQo+PiArICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBB Vl9MT0dfRVJST1IsICJDaHJvbWEgZm9ybWF0IG9mIGlucHV0IHBpeGVsIGZvcm1hdCAiDQo+PiAr ICAgICAgICAgICAgICAgICAgICIlcyBpcyBub3Qgc3VwcG9ydGVkLlxuIiwgZGVzYy0+bmFtZSk7 DQo+PiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsNCj4+ICsgICAgICAgIH0N Cj4+ICsgICAgfQ0KPj4gKyAgICBiaXRfZGVwdGggPSBkZXNjLT5jb21wWzBdLmRlcHRoOw0KPj4g Kw0KPj4gKyAgICBtaW5fY3Vfc2l6ZSA9IGQzZDEydmFfZW5jb2RlX2hldmNfbWFwX2N1c2l6ZShj dHgtDQo+PmNvZGVjX2NvbmYucEhFVkNDb25maWctPk1pbkx1bWFDb2RpbmdVbml0U2l6ZSk7DQo+ PiArICAgIG1heF9jdV9zaXplID0gZDNkMTJ2YV9lbmNvZGVfaGV2Y19tYXBfY3VzaXplKGN0eC0N Cj4+Y29kZWNfY29uZi5wSEVWQ0NvbmZpZy0+TWF4THVtYUNvZGluZ1VuaXRTaXplKTsNCj4+ICsg ICAgbWluX3R1X3NpemUgPSBkM2QxMnZhX2VuY29kZV9oZXZjX21hcF90dXNpemUoY3R4LQ0KPj5j b2RlY19jb25mLnBIRVZDQ29uZmlnLT5NaW5MdW1hVHJhbnNmb3JtVW5pdFNpemUpOw0KPj4gKyAg ICBtYXhfdHVfc2l6ZSA9IGQzZDEydmFfZW5jb2RlX2hldmNfbWFwX3R1c2l6ZShjdHgtDQo+PmNv ZGVjX2NvbmYucEhFVkNDb25maWctPk1heEx1bWFUcmFuc2Zvcm1Vbml0U2l6ZSk7DQo+PiArDQo+ PiArICAgIC8vIFZQUw0KPj4gKw0KPj4gKyAgICB2cHMtPm5hbF91bml0X2hlYWRlciA9IChIMjY1 UmF3TkFMVW5pdEhlYWRlcikgew0KPj4gKyAgICAgICAgLm5hbF91bml0X3R5cGUgICAgICAgICA9 IEhFVkNfTkFMX1ZQUywNCj4+ICsgICAgICAgIC5udWhfbGF5ZXJfaWQgICAgICAgICAgPSAwLA0K Pj4gKyAgICAgICAgLm51aF90ZW1wb3JhbF9pZF9wbHVzMSA9IDEsDQo+PiArICAgIH07DQo+PiAr DQo+PiArICAgIHZwcy0+dnBzX3ZpZGVvX3BhcmFtZXRlcl9zZXRfaWQgPSAwOw0KPj4gKw0KPj4g KyAgICB2cHMtPnZwc19iYXNlX2xheWVyX2ludGVybmFsX2ZsYWcgID0gMTsNCj4+ICsgICAgdnBz LT52cHNfYmFzZV9sYXllcl9hdmFpbGFibGVfZmxhZyA9IDE7DQo+PiArICAgIHZwcy0+dnBzX21h eF9sYXllcnNfbWludXMxICAgICAgICAgPSAwOw0KPj4gKyAgICB2cHMtPnZwc19tYXhfc3ViX2xh eWVyc19taW51czEgICAgID0gMDsNCj4+ICsgICAgdnBzLT52cHNfdGVtcG9yYWxfaWRfbmVzdGlu Z19mbGFnICA9IDE7DQo+PiArDQo+PiArICAgIHB0bC0+Z2VuZXJhbF9wcm9maWxlX3NwYWNlID0g MDsNCj4+ICsgICAgcHRsLT5nZW5lcmFsX3Byb2ZpbGVfaWRjICAgPSBhdmN0eC0+cHJvZmlsZTsN Cj4+ICsgICAgcHRsLT5nZW5lcmFsX3RpZXJfZmxhZyAgICAgPSBwcml2LT50aWVyOw0KPj4gKw0K Pj4gKyAgICBwdGwtPmdlbmVyYWxfcHJvZmlsZV9jb21wYXRpYmlsaXR5X2ZsYWdbcHRsLT5nZW5l cmFsX3Byb2ZpbGVfaWRjXSA9IDE7DQo+PiArDQo+PiArICAgIHB0bC0+Z2VuZXJhbF9wcm9ncmVz c2l2ZV9zb3VyY2VfZmxhZyAgICA9IDE7DQo+PiArICAgIHB0bC0+Z2VuZXJhbF9pbnRlcmxhY2Vk X3NvdXJjZV9mbGFnICAgICA9IDA7DQo+PiArICAgIHB0bC0+Z2VuZXJhbF9ub25fcGFja2VkX2Nv bnN0cmFpbnRfZmxhZyA9IDE7DQo+PiArICAgIHB0bC0+Z2VuZXJhbF9mcmFtZV9vbmx5X2NvbnN0 cmFpbnRfZmxhZyA9IDE7DQo+PiArDQo+PiArICAgIHB0bC0+Z2VuZXJhbF9tYXhfMTRiaXRfY29u c3RyYWludF9mbGFnID0gYml0X2RlcHRoIDw9IDE0Ow0KPj4gKyAgICBwdGwtPmdlbmVyYWxfbWF4 XzEyYml0X2NvbnN0cmFpbnRfZmxhZyA9IGJpdF9kZXB0aCA8PSAxMjsNCj4+ICsgICAgcHRsLT5n ZW5lcmFsX21heF8xMGJpdF9jb25zdHJhaW50X2ZsYWcgPSBiaXRfZGVwdGggPD0gMTA7DQo+PiAr ICAgIHB0bC0+Z2VuZXJhbF9tYXhfOGJpdF9jb25zdHJhaW50X2ZsYWcgID0gYml0X2RlcHRoID09 ICA4Ow0KPj4gKw0KPj4gKyAgICBwdGwtPmdlbmVyYWxfbWF4XzQyMmNocm9tYV9jb25zdHJhaW50 X2ZsYWcgID0gY2hyb21hX2Zvcm1hdCA8PSAyOw0KPj4gKyAgICBwdGwtPmdlbmVyYWxfbWF4XzQy MGNocm9tYV9jb25zdHJhaW50X2ZsYWcgID0gY2hyb21hX2Zvcm1hdCA8PSAxOw0KPj4gKyAgICBw dGwtPmdlbmVyYWxfbWF4X21vbm9jaHJvbWVfY29uc3RyYWludF9mbGFnID0gY2hyb21hX2Zvcm1h dCA9PSAwOw0KPj4gKw0KPj4gKyAgICBwdGwtPmdlbmVyYWxfaW50cmFfY29uc3RyYWludF9mbGFn ID0gYmFzZV9jdHgtPmdvcF9zaXplID09IDE7DQo+PiArICAgIHB0bC0+Z2VuZXJhbF9vbmVfcGlj dHVyZV9vbmx5X2NvbnN0cmFpbnRfZmxhZyA9IDA7DQo+PiArDQo+PiArICAgIHB0bC0+Z2VuZXJh bF9sb3dlcl9iaXRfcmF0ZV9jb25zdHJhaW50X2ZsYWcgPSAxOw0KPj4gKw0KPj4gKyAgICBpZiAo YXZjdHgtPmxldmVsICE9IEZGX0xFVkVMX1VOS05PV04pIHsNCj4+ICsgICAgICAgIHB0bC0+Z2Vu ZXJhbF9sZXZlbF9pZGMgPSBhdmN0eC0+bGV2ZWw7DQo+PiArICAgIH0gZWxzZSB7DQo+PiArICAg ICAgICBjb25zdCBIMjY1TGV2ZWxEZXNjcmlwdG9yICpsZXZlbDsNCj4+ICsNCj4+ICsgICAgICAg IGxldmVsID0gZmZfaDI2NV9ndWVzc19sZXZlbChwdGwsIGF2Y3R4LT5iaXRfcmF0ZSwNCj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlX2N0eC0+c3VyZmFjZV93aWR0 aCwgYmFzZV9jdHgtPnN1cmZhY2VfaGVpZ2h0LA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDEsIDEsIDEsIChiYXNlX2N0eC0+Yl9wZXJfcCA+IDApICsgMSk7DQo+PiAr ICAgICAgICBpZiAobGV2ZWwpIHsNCj4+ICsgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xP R19WRVJCT1NFLCAiVXNpbmcgbGV2ZWwgJXMuXG4iLCBsZXZlbC0+bmFtZSk7DQo+PiArICAgICAg ICAgICAgcHRsLT5nZW5lcmFsX2xldmVsX2lkYyA9IGxldmVsLT5sZXZlbF9pZGM7DQo+PiArICAg ICAgICB9IGVsc2Ugew0KPj4gKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJP U0UsICJTdHJlYW0gd2lsbCBub3QgY29uZm9ybSB0byAiDQo+PiArICAgICAgICAgICAgICAgICAg ICJhbnkgbm9ybWFsIGxldmVsOyB1c2luZyBsZXZlbCA4LjUuXG4iKTsNCj4+ICsgICAgICAgICAg ICBwdGwtPmdlbmVyYWxfbGV2ZWxfaWRjID0gMjU1Ow0KPj4gKyAgICAgICAgICAgIC8vIFRoZSB0 aWVyIGZsYWcgbXVzdCBiZSBzZXQgaW4gbGV2ZWwgOC41Lg0KPj4gKyAgICAgICAgICAgIHB0bC0+ Z2VuZXJhbF90aWVyX2ZsYWcgPSAxOw0KPj4gKyAgICAgICAgfQ0KPj4gKyAgICAgICAgYXZjdHgt PmxldmVsID0gcHRsLT5nZW5lcmFsX2xldmVsX2lkYzsNCj4+ICsgICAgfQ0KPj4gKw0KPj4gKyAg ICB2cHMtPnZwc19zdWJfbGF5ZXJfb3JkZXJpbmdfaW5mb19wcmVzZW50X2ZsYWcgPSAwOw0KPj4g KyAgICB2cHMtPnZwc19tYXhfZGVjX3BpY19idWZmZXJpbmdfbWludXMxWzBdICAgICAgPSBNQVhf RFBCX1NJWkUgLSAxOw0KPj4gKyAgICB2cHMtPnZwc19tYXhfbnVtX3Jlb3JkZXJfcGljc1swXSAg ICAgICAgICAgICAgPSBiYXNlX2N0eC0+Yl9wZXJfcCA+IDAgPw0KPk1BWF9EUEJfU0laRSAtIDEg OiAwOw0KPg0KPj8gIFRoaXMgc2VlbXMgYmFkLCB5b3UgYXJlIHRlbGxpbmcgdGhlIGRlY29kZXIg aXQgbmVlZHMgdG8gZG8gYSBsb3Qgb2YgYnVmZmVyaW5nDQo+Zm9yIG5vIHJlYXNvbi4NCg0KSSds bCByZXNldCB0aGVtIHNhbWUgYXMgVkFBUEkuDQoNCj4NCj4+ICsgICAgdnBzLT52cHNfbWF4X2xh dGVuY3lfaW5jcmVhc2VfcGx1czFbMF0gICAgICAgID0gMDsNCj4+ICsNCj4+ICsgICAgdnBzLT52 cHNfbWF4X2xheWVyX2lkICAgICAgICAgICAgID0gMDsNCj4+ICsgICAgdnBzLT52cHNfbnVtX2xh eWVyX3NldHNfbWludXMxICAgID0gMDsNCj4+ICsgICAgdnBzLT5sYXllcl9pZF9pbmNsdWRlZF9m bGFnWzBdWzBdID0gMTsNCj4+ICsNCj4+ICsgICAgdnBzLT52cHNfdGltaW5nX2luZm9fcHJlc2Vu dF9mbGFnID0gMDsNCj4+ICsNCj4+ICsgICAgLy8gU1BTDQo+PiArDQo+PiArICAgIHNwcy0+bmFs X3VuaXRfaGVhZGVyID0gKEgyNjVSYXdOQUxVbml0SGVhZGVyKSB7DQo+PiArICAgICAgICAubmFs X3VuaXRfdHlwZSAgICAgICAgID0gSEVWQ19OQUxfU1BTLA0KPj4gKyAgICAgICAgLm51aF9sYXll cl9pZCAgICAgICAgICA9IDAsDQo+PiArICAgICAgICAubnVoX3RlbXBvcmFsX2lkX3BsdXMxID0g MSwNCj4+ICsgICAgfTsNCj4+ICsNCj4+ICsgICAgc3BzLT5zcHNfdmlkZW9fcGFyYW1ldGVyX3Nl dF9pZCA9IHZwcy0+dnBzX3ZpZGVvX3BhcmFtZXRlcl9zZXRfaWQ7DQo+PiArDQo+PiArICAgIHNw cy0+c3BzX21heF9zdWJfbGF5ZXJzX21pbnVzMSAgICA9IHZwcy0+dnBzX21heF9zdWJfbGF5ZXJz X21pbnVzMTsNCj4+ICsgICAgc3BzLT5zcHNfdGVtcG9yYWxfaWRfbmVzdGluZ19mbGFnID0gdnBz LT52cHNfdGVtcG9yYWxfaWRfbmVzdGluZ19mbGFnOw0KPj4gKw0KPj4gKyAgICBzcHMtPnByb2Zp bGVfdGllcl9sZXZlbCA9IHZwcy0+cHJvZmlsZV90aWVyX2xldmVsOw0KPj4gKw0KPj4gKyAgICBz cHMtPnNwc19zZXFfcGFyYW1ldGVyX3NldF9pZCA9IDA7DQo+PiArDQo+PiArICAgIHNwcy0+Y2hy b21hX2Zvcm1hdF9pZGMgICAgICAgICAgPSBjaHJvbWFfZm9ybWF0Ow0KPj4gKyAgICBzcHMtPnNl cGFyYXRlX2NvbG91cl9wbGFuZV9mbGFnID0gMDsNCj4+ICsNCj4+ICsgICAgYXZfYXNzZXJ0MChj dHgtPnJlc19saW1pdHMuU3VicmVnaW9uQmxvY2tQaXhlbHNTaXplICUgbWluX2N1X3NpemUgPT0g MCk7DQo+PiArDQo+PiArICAgIHNwcy0+cGljX3dpZHRoX2luX2x1bWFfc2FtcGxlcyAgPSBGRkFM SUdOKGJhc2VfY3R4LT5zdXJmYWNlX3dpZHRoLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnJlc19saW1pdHMuU3VicmVnaW9uQmxvY2tQaXhl bHNTaXplKTsNCj4+ICsgICAgc3BzLT5waWNfaGVpZ2h0X2luX2x1bWFfc2FtcGxlcyA9IEZGQUxJ R04oYmFzZV9jdHgtPnN1cmZhY2VfaGVpZ2h0LA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnJlc19saW1pdHMuU3VicmVnaW9uQmxvY2tQaXhl bHNTaXplKTsNCj4+ICsNCj4+ICsgICAgaWYgKGF2Y3R4LT53aWR0aCAgIT0gc3BzLT5waWNfd2lk dGhfaW5fbHVtYV9zYW1wbGVzIHx8DQo+PiArICAgICAgICBhdmN0eC0+aGVpZ2h0ICE9IHNwcy0+ cGljX2hlaWdodF9pbl9sdW1hX3NhbXBsZXMpIHsNCj4+ICsgICAgICAgIHNwcy0+Y29uZm9ybWFu Y2Vfd2luZG93X2ZsYWcgPSAxOw0KPj4gKyAgICAgICAgc3BzLT5jb25mX3dpbl9sZWZ0X29mZnNl dCAgID0gMDsNCj4+ICsgICAgICAgIHNwcy0+Y29uZl93aW5fcmlnaHRfb2Zmc2V0ICA9DQo+PiAr ICAgICAgICAgICAgKHNwcy0+cGljX3dpZHRoX2luX2x1bWFfc2FtcGxlcyAtIGF2Y3R4LT53aWR0 aCkgPj4gZGVzYy0NCj4+bG9nMl9jaHJvbWFfdzsNCj4+ICsgICAgICAgIHNwcy0+Y29uZl93aW5f dG9wX29mZnNldCAgICA9IDA7DQo+PiArICAgICAgICBzcHMtPmNvbmZfd2luX2JvdHRvbV9vZmZz ZXQgPQ0KPj4gKyAgICAgICAgICAgIChzcHMtPnBpY19oZWlnaHRfaW5fbHVtYV9zYW1wbGVzIC0g YXZjdHgtPmhlaWdodCkgPj4gZGVzYy0NCj4+bG9nMl9jaHJvbWFfaDsNCj4+ICsgICAgfSBlbHNl IHsNCj4+ICsgICAgICAgIHNwcy0+Y29uZm9ybWFuY2Vfd2luZG93X2ZsYWcgPSAwOw0KPj4gKyAg ICB9DQo+PiArDQo+PiArICAgIHNwcy0+Yml0X2RlcHRoX2x1bWFfbWludXM4ICAgPSBiaXRfZGVw dGggLSA4Ow0KPj4gKyAgICBzcHMtPmJpdF9kZXB0aF9jaHJvbWFfbWludXM4ID0gYml0X2RlcHRo IC0gODsNCj4+ICsNCj4+ICsgICAgc3BzLT5sb2cyX21heF9waWNfb3JkZXJfY250X2xzYl9taW51 czQgPSBjdHgtDQo+PmdvcC5wSEVWQ0dyb3VwT2ZQaWN0dXJlcy0+bG9nMl9tYXhfcGljX29yZGVy X2NudF9sc2JfbWludXM0Ow0KPj4gKw0KPj4gKyAgICBzcHMtPnNwc19zdWJfbGF5ZXJfb3JkZXJp bmdfaW5mb19wcmVzZW50X2ZsYWcgPQ0KPj4gKyAgICAgICAgdnBzLT52cHNfc3ViX2xheWVyX29y ZGVyaW5nX2luZm9fcHJlc2VudF9mbGFnOw0KPj4gKyAgICBmb3IgKGkgPSAwOyBpIDw9IHNwcy0+ c3BzX21heF9zdWJfbGF5ZXJzX21pbnVzMTsgaSsrKSB7DQo+PiArICAgICAgICBzcHMtPnNwc19t YXhfZGVjX3BpY19idWZmZXJpbmdfbWludXMxW2ldID0NCj4+ICsgICAgICAgICAgICB2cHMtPnZw c19tYXhfZGVjX3BpY19idWZmZXJpbmdfbWludXMxW2ldOw0KPj4gKyAgICAgICAgc3BzLT5zcHNf bWF4X251bV9yZW9yZGVyX3BpY3NbaV0gPQ0KPj4gKyAgICAgICAgICAgIHZwcy0+dnBzX21heF9u dW1fcmVvcmRlcl9waWNzW2ldOw0KPj4gKyAgICAgICAgc3BzLT5zcHNfbWF4X2xhdGVuY3lfaW5j cmVhc2VfcGx1czFbaV0gPQ0KPj4gKyAgICAgICAgICAgIHZwcy0+dnBzX21heF9sYXRlbmN5X2lu Y3JlYXNlX3BsdXMxW2ldOw0KPj4gKyAgICB9DQo+PiArDQo+PiArICAgIHNwcy0+bG9nMl9taW5f bHVtYV9jb2RpbmdfYmxvY2tfc2l6ZV9taW51czMgICAgICA9DQo+KHVpbnQ4X3QpKGF2X2xvZzIo bWluX2N1X3NpemUpIC0gMyk7DQo+PiArICAgIHNwcy0+bG9nMl9kaWZmX21heF9taW5fbHVtYV9j b2RpbmdfYmxvY2tfc2l6ZSAgICA9DQo+KHVpbnQ4X3QpKGF2X2xvZzIobWF4X2N1X3NpemUpIC0g YXZfbG9nMihtaW5fY3Vfc2l6ZSkpOw0KPj4gKyAgICBzcHMtPmxvZzJfbWluX2x1bWFfdHJhbnNm b3JtX2Jsb2NrX3NpemVfbWludXMyICAgPQ0KPih1aW50OF90KShhdl9sb2cyKG1pbl90dV9zaXpl KSAtIDIpOw0KPj4gKyAgICBzcHMtPmxvZzJfZGlmZl9tYXhfbWluX2x1bWFfdHJhbnNmb3JtX2Js b2NrX3NpemUgPQ0KPih1aW50OF90KShhdl9sb2cyKG1heF90dV9zaXplKSAtIGF2X2xvZzIobWlu X3R1X3NpemUpKTsNCj4+ICsNCj4+ICsgICAgc3BzLT5tYXhfdHJhbnNmb3JtX2hpZXJhcmNoeV9k ZXB0aF9pbnRlciA9IGN0eC0NCj4+Y29kZWNfY29uZi5wSEVWQ0NvbmZpZy0+bWF4X3RyYW5zZm9y bV9oaWVyYXJjaHlfZGVwdGhfaW50ZXI7DQo+PiArICAgIHNwcy0+bWF4X3RyYW5zZm9ybV9oaWVy YXJjaHlfZGVwdGhfaW50cmEgPSBjdHgtDQo+PmNvZGVjX2NvbmYucEhFVkNDb25maWctPm1heF90 cmFuc2Zvcm1faGllcmFyY2h5X2RlcHRoX2ludHJhOw0KPj4gKw0KPj4gKyAgICBzcHMtPmFtcF9l bmFibGVkX2ZsYWcgPSAhIShjdHgtPmNvZGVjX2NvbmYucEhFVkNDb25maWctDQo+PkNvbmZpZ3Vy YXRpb25GbGFncyAmDQo+PiArDQo+RDNEMTJfVklERU9fRU5DT0RFUl9DT0RFQ19DT05GSUdVUkFU SU9OX0hFVkNfRkxBR19VU0VfQVNZTUUNCj5UUklDX01PVElPTl9QQVJUSVRJT04pOw0KPj4gKyAg ICBzcHMtPnNhbXBsZV9hZGFwdGl2ZV9vZmZzZXRfZW5hYmxlZF9mbGFnID0gISEoY3R4LQ0KPj5j b2RlY19jb25mLnBIRVZDQ29uZmlnLT5Db25maWd1cmF0aW9uRmxhZ3MgJg0KPj4gKw0KPkQzRDEy X1ZJREVPX0VOQ09ERVJfQ09ERUNfQ09ORklHVVJBVElPTl9IRVZDX0ZMQUdfRU5BQkxFX1NBTw0K Pl9GSUxURVIpOw0KPj4gKyAgICBzcHMtPnNwc190ZW1wb3JhbF9tdnBfZW5hYmxlZF9mbGFnID0g MDsNCj4NCj5JcyB0aGlzIHJlYWxseSBuZXZlciBzdXBwb3J0ZWQ/ICBUaGF0IGlzIHVuZm9ydHVu YXRlLg0KDQpJdCBsb29rcyBsaWtlIHNvLg0KDQo+DQo+PiArICAgIHNwcy0+cGNtX2VuYWJsZWRf ZmxhZyA9IDA7DQo+PiArDQo+PiArICAgIHNwcy0+dnVpX3BhcmFtZXRlcnNfcHJlc2VudF9mbGFn ID0gMDsNCj4NCj5QbGVhc2Ugc2V0IHRoZSBWVUkgdmFsdWVzIGNvcnJlY3RseSwgdGhleSdyZSBh bGwga25vd24uDQoNClN1cmUuDQoNCj4NCj4+ICsNCj4+ICsgICAgLy8gdnVpIGRlZmF1bHQgcGFy YW1ldGVycw0KPj4gKyAgICB2dWktPmFzcGVjdF9yYXRpb19pZGMgICAgICAgICAgICAgICAgICAg ICAgICA9IDA7DQo+PiArICAgIHZ1aS0+dmlkZW9fZm9ybWF0ICAgICAgICAgICAgICAgICAgICAg ICAgICAgID0gNTsNCj4+ICsgICAgdnVpLT52aWRlb19mdWxsX3JhbmdlX2ZsYWcgICAgICAgICAg ICAgICAgICAgPSAwOw0KPj4gKyAgICB2dWktPmNvbG91cl9wcmltYXJpZXMgICAgICAgICAgICAg ICAgICAgICAgICA9IDI7DQo+PiArICAgIHZ1aS0+dHJhbnNmZXJfY2hhcmFjdGVyaXN0aWNzICAg ICAgICAgICAgICAgID0gMjsNCj4+ICsgICAgdnVpLT5tYXRyaXhfY29lZmZpY2llbnRzICAgICAg ICAgICAgICAgICAgICAgPSAyOw0KPj4gKyAgICB2dWktPmNocm9tYV9zYW1wbGVfbG9jX3R5cGVf dG9wX2ZpZWxkICAgICAgICA9IDA7DQo+PiArICAgIHZ1aS0+Y2hyb21hX3NhbXBsZV9sb2NfdHlw ZV9ib3R0b21fZmllbGQgICAgID0gMDsNCj4+ICsgICAgdnVpLT50aWxlc19maXhlZF9zdHJ1Y3R1 cmVfZmxhZyAgICAgICAgICAgICAgPSAwOw0KPj4gKyAgICB2dWktPm1vdGlvbl92ZWN0b3JzX292 ZXJfcGljX2JvdW5kYXJpZXNfZmxhZyA9IDE7DQo+PiArICAgIHZ1aS0+bWluX3NwYXRpYWxfc2Vn bWVudGF0aW9uX2lkYyAgICAgICAgICAgID0gMDsNCj4+ICsgICAgdnVpLT5tYXhfYnl0ZXNfcGVy X3BpY19kZW5vbSAgICAgICAgICAgICAgICAgPSAyOw0KPj4gKyAgICB2dWktPm1heF9iaXRzX3Bl cl9taW5fY3VfZGVub20gICAgICAgICAgICAgICA9IDE7DQo+PiArICAgIHZ1aS0+bG9nMl9tYXhf bXZfbGVuZ3RoX2hvcml6b250YWwgICAgICAgICAgID0gMTU7DQo+PiArICAgIHZ1aS0+bG9nMl9t YXhfbXZfbGVuZ3RoX3ZlcnRpY2FsICAgICAgICAgICAgID0gMTU7DQo+PiArDQo+PiArICAgIC8v IFBQUw0KPj4gKw0KPj4gKyAgICBwcHMtPm5hbF91bml0X2hlYWRlciA9IChIMjY1UmF3TkFMVW5p dEhlYWRlcikgew0KPj4gKyAgICAgICAgLm5hbF91bml0X3R5cGUgICAgICAgICA9IEhFVkNfTkFM X1BQUywNCj4+ICsgICAgICAgIC5udWhfbGF5ZXJfaWQgICAgICAgICAgPSAwLA0KPj4gKyAgICAg ICAgLm51aF90ZW1wb3JhbF9pZF9wbHVzMSA9IDEsDQo+PiArICAgIH07DQo+PiArDQo+PiArICAg IHBwcy0+cHBzX3BpY19wYXJhbWV0ZXJfc2V0X2lkID0gMDsNCj4+ICsgICAgcHBzLT5wcHNfc2Vx X3BhcmFtZXRlcl9zZXRfaWQgPSBzcHMtPnNwc19zZXFfcGFyYW1ldGVyX3NldF9pZDsNCj4+ICsN Cj4+ICsgICAgcHBzLT5jYWJhY19pbml0X3ByZXNlbnRfZmxhZyA9IDE7DQo+DQo+SnVzdCB3YXN0 ZXMgYSBiaXQgaW4gdGhlIHNsaWNlIGhlYWRlciwgYmVjYXVzZSB5b3UgbmV2ZXIgc2V0IGl0Lg0K DQpJIHRlc3RlZCBpdCBhbmQgdGhlcmUgYXJlIGRlY29kaW5nIGZhaWx1cmVzIGlmIGl0J3Mgbm90 IHNldC4gQ2FuIHdlIGtlZXAgaXQgZm9yIG5vdz8NCg0KPg0KPj4gKw0KPj4gKyAgICBwcHMtPm51 bV9yZWZfaWR4X2wwX2RlZmF1bHRfYWN0aXZlX21pbnVzMSA9IDA7DQo+PiArICAgIHBwcy0+bnVt X3JlZl9pZHhfbDFfZGVmYXVsdF9hY3RpdmVfbWludXMxID0gMDsNCj4+ICsNCj4+ICsgICAgcHBz LT5pbml0X3FwX21pbnVzMjYgPSAwOw0KPj4gKw0KPj4gKyAgICBwcHMtPmNvbnN0cmFpbmVkX2lu dHJhX3ByZWRfZmxhZyA9ICEhKGN0eC0+Y29kZWNfY29uZi5wSEVWQ0NvbmZpZy0NCj4+Q29uZmln dXJhdGlvbkZsYWdzICYNCj4+ICsNCj5EM0QxMl9WSURFT19FTkNPREVSX0NPREVDX0NPTkZJR1VS QVRJT05fSEVWQ19GTEFHX1VTRV9DT05TVA0KPlJBSU5FRF9JTlRSQVBSRURJQ1RJT04pOw0KPg0K PldobyBoYXMgZGVjaWRlZCB0byB1c2UgY29uc3RyYWluZWQgaW50cmE/ICBUaGlzIGlzIGEgaHVn ZSBsb3NzIGlmIHlvdSBhcmUgZm9yY2VkDQo+dG8gZW5hYmxlIGl0LCBpdCBzaG91bGQgYmUgb3B0 aW9uYWwgdG8gb25seSBiZSBzZXQgaW4gdGhlIHJhcmUgY2FzZXMgd2hlcmUgaXQgaXMNCj53YW50 ZWQuDQoNCkFjdHVhbGx5IHRoaXMgZmxhZyBpcyBuZXZlciB1c2VkLiBJJ2xsIGRlbGV0ZSB0aGlz Lg0KDQo+DQo+PiArICAgIHBwcy0+dHJhbnNmb3JtX3NraXBfZW5hYmxlZF9mbGFnID0gISEoY3R4 LT5jb2RlY19jb25mLnBIRVZDQ29uZmlnLQ0KPj5Db25maWd1cmF0aW9uRmxhZ3MgJg0KPj4gKw0K PkQzRDEyX1ZJREVPX0VOQ09ERVJfQ09ERUNfQ09ORklHVVJBVElPTl9IRVZDX0ZMQUdfRU5BQkxF X1RSQQ0KPk5TRk9STV9TS0lQUElORyk7DQo+PiArDQo+PiArICAgIC8vIGN1X3FwX2RlbHRhIGFs d2F5cyByZXF1aXJlZCB0byBiZSAxIGluDQo+aHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9E aXJlY3RYLQ0KPlNwZWNzL2Jsb2IvbWFzdGVyL2QzZC9EM0QxMlZpZGVvRW5jb2RpbmcubWQNCj4+ ICsgICAgcHBzLT5jdV9xcF9kZWx0YV9lbmFibGVkX2ZsYWcgPSAxOw0KPj4gKw0KPj4gKyAgICBw cHMtPmRpZmZfY3VfcXBfZGVsdGFfZGVwdGggICA9IDA7DQo+PiArDQo+PiArICAgIHBwcy0+cHBz X3NsaWNlX2Nocm9tYV9xcF9vZmZzZXRzX3ByZXNlbnRfZmxhZyA9IDE7DQo+PiArDQo+PiArICAg IHBwcy0+dGlsZXNfZW5hYmxlZF9mbGFnID0gMDsgLy8gbm8gdGlsaW5nIGluIEQzRDEyDQo+PiAr DQo+PiArICAgIHBwcy0+cHBzX2xvb3BfZmlsdGVyX2Fjcm9zc19zbGljZXNfZW5hYmxlZF9mbGFn ID0gIShjdHgtDQo+PmNvZGVjX2NvbmYucEhFVkNDb25maWctPkNvbmZpZ3VyYXRpb25GbGFncyAm DQo+PiArDQo+RDNEMTJfVklERU9fRU5DT0RFUl9DT0RFQ19DT05GSUdVUkFUSU9OX0hFVkNfRkxB R19ESVNBQkxFX0xPDQo+T1BfRklMVEVSX0FDUk9TU19TTElDRVMpOw0KPj4gKyAgICBwcHMtPmRl YmxvY2tpbmdfZmlsdGVyX2NvbnRyb2xfcHJlc2VudF9mbGFnID0gMTsNCj4+ICsNCj4+ICsgICAg cmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgZDNkMTJ2YV9lbmNvZGVfaGV2 Y19nZXRfZW5jb2Rlcl9jYXBzKEFWQ29kZWNDb250ZXh0DQo+KmF2Y3R4KQ0KPj4gK3sNCj4+ICsg ICAgaW50IGk7DQo+PiArICAgIEhSRVNVTFQgaHI7DQo+PiArICAgIHVpbnQ4X3QgbWluX2N1X3Np emUsIG1heF9jdV9zaXplOw0KPj4gKyAgICBIV0Jhc2VFbmNvZGVDb250ZXh0ICpiYXNlX2N0eCA9 IGF2Y3R4LT5wcml2X2RhdGE7DQo+PiArICAgIEQzRDEyVkFFbmNvZGVDb250ZXh0ICAgICAqY3R4 ID0gYXZjdHgtPnByaXZfZGF0YTsNCj4+ICsgICAgRDNEMTJfVklERU9fRU5DT0RFUl9DT0RFQ19D T05GSUdVUkFUSU9OX0hFVkMgKmNvbmZpZzsNCj4+ICsgICAgRDNEMTJfVklERU9fRU5DT0RFUl9D T0RFQ19DT05GSUdVUkFUSU9OX1NVUFBPUlRfSEVWQw0KPmhldmNfY2FwczsNCj4+ICsNCj4+ICsN Cj5EM0QxMl9GRUFUVVJFX0RBVEFfVklERU9fRU5DT0RFUl9DT0RFQ19DT05GSUdVUkFUSU9OX1NV UFBPUlQNCj5jb2RlY19jYXBzID0gew0KPj4gKyAgICAgICAgLk5vZGVJbmRleCAgICAgICAgICAg ICAgICAgICA9IDAsDQo+PiArICAgICAgICAuQ29kZWMgICAgICAgICAgICAgICAgICAgICAgID0g RDNEMTJfVklERU9fRU5DT0RFUl9DT0RFQ19IRVZDLA0KPj4gKyAgICAgICAgLlByb2ZpbGUgICAg ICAgICAgICAgICAgICAgICA9IGN0eC0+cHJvZmlsZS0+ZDNkMTJfcHJvZmlsZSwNCj4+ICsgICAg ICAgIC5Db2RlY1N1cHBvcnRMaW1pdHMuRGF0YVNpemUgPQ0KPnNpemVvZihEM0QxMl9WSURFT19F TkNPREVSX0NPREVDX0NPTkZJR1VSQVRJT05fU1VQUE9SVF9IRVZDKSwNCj4+ICsgICAgfTsNCj4+ ICsNCj4+ICsgICAgZm9yIChpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKGhldmNfY29uZmlnX3N1 cHBvcnRfc2V0cyk7IGkrKykgew0KPj4gKyAgICAgICAgaGV2Y19jYXBzID0gaGV2Y19jb25maWdf c3VwcG9ydF9zZXRzW2ldOw0KPj4gKyAgICAgICAgY29kZWNfY2Fwcy5Db2RlY1N1cHBvcnRMaW1p dHMucEhFVkNTdXBwb3J0ID0gJmhldmNfY2FwczsNCj4+ICsgICAgICAgIGhyID0gSUQzRDEyVmlk ZW9EZXZpY2UzX0NoZWNrRmVhdHVyZVN1cHBvcnQoY3R4LT52aWRlb19kZXZpY2UzLA0KPkQzRDEy X0ZFQVRVUkVfVklERU9fRU5DT0RFUl9DT0RFQ19DT05GSUdVUkFUSU9OX1NVUFBPUlQsDQo+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb2Rl Y19jYXBzLCBzaXplb2YoY29kZWNfY2FwcykpOw0KPj4gKyAgICAgICAgaWYgKFNVQ0NFRURFRCho cikgJiYgY29kZWNfY2Fwcy5Jc1N1cHBvcnRlZCkNCj4+ICsgICAgICAgICAgICBicmVhazsNCj4+ ICsgICAgfQ0KPj4gKw0KPj4gKyAgICBpZiAoaSA9PSBGRl9BUlJBWV9FTEVNUyhoZXZjX2NvbmZp Z19zdXBwb3J0X3NldHMpKSB7DQo+PiArICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJP UiwgIlVuc3VwcG9ydGVkIGNvZGVjIGNvbmZpZ3VyYXRpb25cbiIpOw0KPj4gKyAgICAgICAgcmV0 dXJuIEFWRVJST1IoRUlOVkFMKTsNCj4+ICsgICAgfQ0KPj4gKw0KPj4gKyAgICBjdHgtPmNvZGVj X2NvbmYuRGF0YVNpemUgPQ0KPnNpemVvZihEM0QxMl9WSURFT19FTkNPREVSX0NPREVDX0NPTkZJ R1VSQVRJT05fSEVWQyk7DQo+PiArICAgIGN0eC0+Y29kZWNfY29uZi5wSEVWQ0NvbmZpZyA9IGF2 X21hbGxvY3ooY3R4LT5jb2RlY19jb25mLkRhdGFTaXplKTsNCj4+ICsgICAgaWYgKCFjdHgtPmNv ZGVjX2NvbmYucEhFVkNDb25maWcpDQo+PiArICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0p Ow0KPj4gKw0KPj4gKyAgICBjb25maWcgPSBjdHgtPmNvZGVjX2NvbmYucEhFVkNDb25maWc7DQo+ PiArDQo+PiArICAgIGNvbmZpZy0+Q29uZmlndXJhdGlvbkZsYWdzICAgICAgICAgICAgICAgICAg PQ0KPkQzRDEyX1ZJREVPX0VOQ09ERVJfQ09ERUNfQ09ORklHVVJBVElPTl9IRVZDX0ZMQUdfTk9O RTsNCj4+ICsgICAgY29uZmlnLT5NaW5MdW1hQ29kaW5nVW5pdFNpemUgICAgICAgICAgICAgICA9 DQo+aGV2Y19jYXBzLk1pbkx1bWFDb2RpbmdVbml0U2l6ZTsNCj4+ICsgICAgY29uZmlnLT5NYXhM dW1hQ29kaW5nVW5pdFNpemUgICAgICAgICAgICAgICA9DQo+aGV2Y19jYXBzLk1heEx1bWFDb2Rp bmdVbml0U2l6ZTsNCj4+ICsgICAgY29uZmlnLT5NaW5MdW1hVHJhbnNmb3JtVW5pdFNpemUgICAg ICAgICAgICA9DQo+aGV2Y19jYXBzLk1pbkx1bWFUcmFuc2Zvcm1Vbml0U2l6ZTsNCj4+ICsgICAg Y29uZmlnLT5NYXhMdW1hVHJhbnNmb3JtVW5pdFNpemUgICAgICAgICAgICA9DQo+aGV2Y19jYXBz Lk1heEx1bWFUcmFuc2Zvcm1Vbml0U2l6ZTsNCj4+ICsgICAgY29uZmlnLT5tYXhfdHJhbnNmb3Jt X2hpZXJhcmNoeV9kZXB0aF9pbnRlciA9DQo+aGV2Y19jYXBzLm1heF90cmFuc2Zvcm1faGllcmFy Y2h5X2RlcHRoX2ludGVyOw0KPj4gKyAgICBjb25maWctPm1heF90cmFuc2Zvcm1faGllcmFyY2h5 X2RlcHRoX2ludHJhID0NCj5oZXZjX2NhcHMubWF4X3RyYW5zZm9ybV9oaWVyYXJjaHlfZGVwdGhf aW50cmE7DQo+PiArDQo+PiArICAgIGlmIChoZXZjX2NhcHMuU3VwcG9ydEZsYWdzICYNCj5EM0Qx Ml9WSURFT19FTkNPREVSX0NPREVDX0NPTkZJR1VSQVRJT05fU1VQUE9SVF9IRVZDX0ZMQUdfQVMN Cj5ZTUVUUklDX01PVElPTl9QQVJUSVRJT05fU1VQUE9SVCB8fA0KPj4gKyAgICAgICAgaGV2Y19j YXBzLlN1cHBvcnRGbGFncyAmDQo+RDNEMTJfVklERU9fRU5DT0RFUl9DT0RFQ19DT05GSUdVUkFU SU9OX1NVUFBPUlRfSEVWQ19GTEFHX0FTDQo+WU1FVFJJQ19NT1RJT05fUEFSVElUSU9OX1JFUVVJ UkVEKQ0KPj4gKyAgICAgICAgY29uZmlnLT5Db25maWd1cmF0aW9uRmxhZ3MgfD0NCj5EM0QxMl9W SURFT19FTkNPREVSX0NPREVDX0NPTkZJR1VSQVRJT05fSEVWQ19GTEFHX1VTRV9BU1lNRQ0KPlRS SUNfTU9USU9OX1BBUlRJVElPTjsNCj4+ICsNCj4+ICsgICAgaWYgKGhldmNfY2Fwcy5TdXBwb3J0 RmxhZ3MgJg0KPkQzRDEyX1ZJREVPX0VOQ09ERVJfQ09ERUNfQ09ORklHVVJBVElPTl9TVVBQT1JU X0hFVkNfRkxBR19TQQ0KPk9fRklMVEVSX1NVUFBPUlQpDQo+PiArICAgICAgICBjb25maWctPkNv bmZpZ3VyYXRpb25GbGFncyB8PQ0KPkQzRDEyX1ZJREVPX0VOQ09ERVJfQ09ERUNfQ09ORklHVVJB VElPTl9IRVZDX0ZMQUdfRU5BQkxFX1NBTw0KPl9GSUxURVI7DQo+PiArDQo+PiArICAgIGlmICho ZXZjX2NhcHMuU3VwcG9ydEZsYWdzICYNCj5EM0QxMl9WSURFT19FTkNPREVSX0NPREVDX0NPTkZJ R1VSQVRJT05fU1VQUE9SVF9IRVZDX0ZMQUdfREkNCj5TQUJMSU5HX0xPT1BfRklMVEVSX0FDUk9T U19TTElDRVNfU1VQUE9SVCkNCj4+ICsgICAgICAgIGNvbmZpZy0+Q29uZmlndXJhdGlvbkZsYWdz IHw9DQo+RDNEMTJfVklERU9fRU5DT0RFUl9DT0RFQ19DT05GSUdVUkFUSU9OX0hFVkNfRkxBR19E SVNBQkxFX0xPDQo+T1BfRklMVEVSX0FDUk9TU19TTElDRVM7DQo+PiArDQo+PiArICAgIGlmICho ZXZjX2NhcHMuU3VwcG9ydEZsYWdzICYNCj5EM0QxMl9WSURFT19FTkNPREVSX0NPREVDX0NPTkZJ R1VSQVRJT05fU1VQUE9SVF9IRVZDX0ZMQUdfVFINCj5BTlNGT1JNX1NLSVBfU1VQUE9SVCkNCj4+ ICsgICAgICAgIGNvbmZpZy0+Q29uZmlndXJhdGlvbkZsYWdzIHw9DQo+RDNEMTJfVklERU9fRU5D T0RFUl9DT0RFQ19DT05GSUdVUkFUSU9OX0hFVkNfRkxBR19FTkFCTEVfVFJBDQo+TlNGT1JNX1NL SVBQSU5HOw0KPj4gKw0KPj4gKyAgICBpZiAoaGV2Y19jYXBzLlN1cHBvcnRGbGFncyAmDQo+RDNE MTJfVklERU9fRU5DT0RFUl9DT0RFQ19DT05GSUdVUkFUSU9OX1NVUFBPUlRfSEVWQ19GTEFHX1Bf DQo+RlJBTUVTX0lNUExFTUVOVEVEX0FTX0xPV19ERUxBWV9CX0ZSQU1FUykNCj4+ICsgICAgICAg IGN0eC0+Ymlfbm90X2VtcHR5ID0gMTsNCj4+ICsNCj4+ICsgICAgLy8gYmxvY2sgc2l6ZXMNCj4+ ICsgICAgbWluX2N1X3NpemUgPQ0KPmQzZDEydmFfZW5jb2RlX2hldmNfbWFwX2N1c2l6ZShoZXZj X2NhcHMuTWluTHVtYUNvZGluZ1VuaXRTaXplKTsNCj4+ICsgICAgbWF4X2N1X3NpemUgPQ0KPmQz ZDEydmFfZW5jb2RlX2hldmNfbWFwX2N1c2l6ZShoZXZjX2NhcHMuTWF4THVtYUNvZGluZ1VuaXRT aXplKTsNCj4+ICsNCj4+ICsgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIlVzaW5n IENUVSBzaXplICVkeCVkLCAiDQo+PiArICAgICAgICAgICAibWluIENCIHNpemUgJWR4JWQuXG4i LCBtYXhfY3Vfc2l6ZSwgbWF4X2N1X3NpemUsDQo+PiArICAgICAgICAgICBtaW5fY3Vfc2l6ZSwg bWluX2N1X3NpemUpOw0KPj4gKw0KPj4gKyAgICBiYXNlX2N0eC0+c3VyZmFjZV93aWR0aCAgPSBG RkFMSUdOKGF2Y3R4LT53aWR0aCwgIG1pbl9jdV9zaXplKTsNCj4+ICsgICAgYmFzZV9jdHgtPnN1 cmZhY2VfaGVpZ2h0ID0gRkZBTElHTihhdmN0eC0+aGVpZ2h0LCBtaW5fY3Vfc2l6ZSk7DQo+PiAr DQo+PiArICAgIHJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGQzZDEydmFf ZW5jb2RlX2hldmNfY29uZmlndXJlKEFWQ29kZWNDb250ZXh0ICphdmN0eCkNCj4+ICt7DQo+PiAr ICAgIEhXQmFzZUVuY29kZUNvbnRleHQgICpiYXNlX2N0eCA9IGF2Y3R4LT5wcml2X2RhdGE7DQo+ PiArICAgIEQzRDEyVkFFbmNvZGVDb250ZXh0ICAgICAgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7 DQo+PiArICAgIEQzRDEyVkFFbmNvZGVIRVZDQ29udGV4dCAqcHJpdiA9IGF2Y3R4LT5wcml2X2Rh dGE7DQo+PiArICAgIGludCBmaXhlZF9xcCwgZml4ZWRfcXBfcDsNCj4+ICsgICAgaW50IGVycjsN Cj4+ICsNCj4+ICsgICAgZXJyID0gZmZfY2JzX2luaXQoJnByaXYtPmNiYywgQVZfQ09ERUNfSURf SEVWQywgYXZjdHgpOw0KPj4gKyAgICBpZiAoZXJyIDwgMCkNCj4+ICsgICAgICAgIHJldHVybiBl cnI7DQo+PiArDQo+PiArICAgIC8vIHJhdGUgY29udHJvbA0KPj4gKyAgICBpZiAoY3R4LT5yYy5N b2RlID09DQo+RDNEMTJfVklERU9fRU5DT0RFUl9SQVRFX0NPTlRST0xfTU9ERV9DUVApIHsNCj4+ ICsgICAgICAgIEQzRDEyX1ZJREVPX0VOQ09ERVJfUkFURV9DT05UUk9MX0NRUCAqY3FwX2N0bDsN Cj4+ICsgICAgICAgIGZpeGVkX3FwX3AgPSBhdl9jbGlwKGJhc2VfY3R4LT5yY19xdWFsaXR5LCAx LCA1MSk7DQo+PiArICAgICAgICBpZiAoYXZjdHgtPmlfcXVhbnRfZmFjdG9yID4gMC4wKQ0KPj4g KyAgICAgICAgICAgIGZpeGVkX3FwID0gYXZfY2xpcCgoYXZjdHgtPmlfcXVhbnRfZmFjdG9yICog Zml4ZWRfcXBfcCArDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmN0eC0+ aV9xdWFudF9vZmZzZXQpICsgMC41LCAxLCA1MSk7DQo+PiArICAgICAgICBlbHNlDQo+PiArICAg ICAgICAgICAgZml4ZWRfcXAgPSBmaXhlZF9xcF9wOw0KPj4gKw0KPj4gKyAgICAgICAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfREVCVUcsICJVc2luZyBmaXhlZCBRUCA9ICVkLlxuIiwgZml4ZWRfcXAp Ow0KPj4gKw0KPj4gKyAgICAgICAgY3R4LT5yYy5Db25maWdQYXJhbXMuRGF0YVNpemUgPQ0KPnNp emVvZihEM0QxMl9WSURFT19FTkNPREVSX1JBVEVfQ09OVFJPTF9DUVApOw0KPj4gKyAgICAgICAg Y3FwX2N0bCA9IGF2X21hbGxvY3ooY3R4LT5yYy5Db25maWdQYXJhbXMuRGF0YVNpemUpOw0KPj4g KyAgICAgICAgaWYgKCFjcXBfY3RsKQ0KPj4gKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVO T01FTSk7DQo+PiArDQo+PiArICAgICAgICBjcXBfY3RsLT5Db25zdGFudFFQX0Z1bGxJbnRyYWNv ZGVkRnJhbWUgICAgICAgICAgICAgICAgICA9IGZpeGVkX3FwOw0KPj4gKyAgICAgICAgY3FwX2N0 bC0+Q29uc3RhbnRRUF9JbnRlclByZWRpY3RlZEZyYW1lX0JpRGlyZWN0aW9uYWxSZWYgPSBmaXhl ZF9xcDsNCj4+ICsgICAgICAgIGNxcF9jdGwtPkNvbnN0YW50UVBfSW50ZXJQcmVkaWN0ZWRGcmFt ZV9QcmV2UmVmT25seSAgICAgID0gZml4ZWRfcXA7DQo+DQo+SXQgd291bGQgYmUgZWFzeSB0byBh bGxvdyB0aGUgZXhwZWN0ZWQgdmFyaWF0aW9uIGhlcmU/ICAoWW91IHNldCBkZWZhdWx0IGZhY3Rv cnMNCj5iZWxvdyBmb3IgaXQsIGV2ZW4uKQ0KDQpEbyB5b3UgbWVhbiBzZXR0aW5nIHRoZSBxcF9p LCBxcF9iIGFuZCBxYl9wPyBJIGNhbiBkbyB0aGF0IGluIG5leHQgdmVyc2lvbi4NCg0KPg0KPj4g Kw0KPj4gKyAgICAgICAgY3R4LT5yYy5Db25maWdQYXJhbXMucENvbmZpZ3VyYXRpb25fQ1FQID0g Y3FwX2N0bDsNCj4+ICsgICAgfQ0KPj4gKw0KPj4gKyAgICAvLyBHT1ANCj4+ICsgICAgY3R4LT5n b3AuRGF0YVNpemUgPQ0KPnNpemVvZihEM0QxMl9WSURFT19FTkNPREVSX1NFUVVFTkNFX0dPUF9T VFJVQ1RVUkVfSEVWQyk7DQo+PiArICAgIGN0eC0+Z29wLnBIRVZDR3JvdXBPZlBpY3R1cmVzID0g YXZfbWFsbG9jeihjdHgtPmdvcC5EYXRhU2l6ZSk7DQo+PiArICAgIGlmICghY3R4LT5nb3AucEhF VkNHcm91cE9mUGljdHVyZXMpDQo+PiArICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOw0K Pj4gKw0KPj4gKyAgICBjdHgtPmdvcC5wSEVWQ0dyb3VwT2ZQaWN0dXJlcy0+R09QTGVuZ3RoICAg ICAgPSBiYXNlX2N0eC0+Z29wX3NpemU7DQo+PiArICAgIGN0eC0+Z29wLnBIRVZDR3JvdXBPZlBp Y3R1cmVzLT5QUGljdHVyZVBlcmlvZCA9IGJhc2VfY3R4LT5iX3Blcl9wICsNCj4xOw0KPj4gKyAg ICAvLyBwb3dlciBvZiAyDQo+PiArICAgIGlmIChiYXNlX2N0eC0+Z29wX3NpemUgJiBiYXNlX2N0 eC0+Z29wX3NpemUgLSAxID09IDApDQo+PiArICAgICAgICBjdHgtPmdvcC5wSEVWQ0dyb3VwT2ZQ aWN0dXJlcy0NCj4+bG9nMl9tYXhfcGljX29yZGVyX2NudF9sc2JfbWludXM0ID0NCj4+ICsgICAg ICAgICAgICBGRk1BWChhdl9sb2cyKGJhc2VfY3R4LT5nb3Bfc2l6ZSkgLSA0LCAwKTsNCj4+ICsg ICAgZWxzZQ0KPj4gKyAgICAgICAgY3R4LT5nb3AucEhFVkNHcm91cE9mUGljdHVyZXMtDQo+Pmxv ZzJfbWF4X3BpY19vcmRlcl9jbnRfbHNiX21pbnVzNCA9DQo+PiArICAgICAgICAgICAgRkZNQVgo YXZfbG9nMihiYXNlX2N0eC0+Z29wX3NpemUpIC0gMywgMCk7DQo+PiArDQo+PiArICAgIHJldHVy biAwOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGQzZDEydmFfZW5jb2RlX2hldmNfc2V0 X2xldmVsKEFWQ29kZWNDb250ZXh0ICphdmN0eCkNCj4+ICt7DQo+PiArICAgIEQzRDEyVkFFbmNv ZGVDb250ZXh0ICAgICAgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7DQo+PiArICAgIEQzRDEyVkFF bmNvZGVIRVZDQ29udGV4dCAqcHJpdiA9IGF2Y3R4LT5wcml2X2RhdGE7DQo+PiArICAgIGludCBl cnI7DQo+PiArDQo+PiArICAgIGN0eC0+bGV2ZWwuRGF0YVNpemUgPQ0KPnNpemVvZihEM0QxMl9W SURFT19FTkNPREVSX0xFVkVMX1RJRVJfQ09OU1RSQUlOVFNfSEVWQyk7DQo+PiArICAgIGN0eC0+ bGV2ZWwucEhFVkNMZXZlbFNldHRpbmcgPSBhdl9tYWxsb2N6KGN0eC0+bGV2ZWwuRGF0YVNpemUp Ow0KPj4gKyAgICBpZiAoIWN0eC0+bGV2ZWwucEhFVkNMZXZlbFNldHRpbmcpDQo+PiArICAgICAg ICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOw0KPj4gKw0KPj4gKyAgICBlcnIgPSBkM2QxMnZhX2Vu Y29kZV9oZXZjX21hcF9sZXZlbChhdmN0eCwgYXZjdHgtPmxldmVsLA0KPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3R4LT5sZXZlbC5wSEVWQ0xldmVsU2V0dGlu Zy0+TGV2ZWwpOw0KPj4gKyAgICBpZiAoZXJyIDwgMCkNCj4+ICsgICAgICAgIHJldHVybiBlcnI7 DQo+PiArDQo+PiArICAgIGN0eC0+bGV2ZWwucEhFVkNMZXZlbFNldHRpbmctPlRpZXIgPSBwcml2 LQ0KPj5yYXdfdnBzLnByb2ZpbGVfdGllcl9sZXZlbC5nZW5lcmFsX3RpZXJfZmxhZyA9PSAwID8N Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRDEyX1ZJREVP X0VOQ09ERVJfVElFUl9IRVZDX01BSU4gOg0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRDNEMTJfVklERU9fRU5DT0RFUl9USUVSX0hFVkNfSElHSDsNCj4+ICsN Cj4+ICsgICAgcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkDQo+ZDNkMTJ2 YV9lbmNvZGVfaGV2Y19mcmVlX3BpY3R1cmVfcGFyYW1zKEQzRDEyVkFFbmNvZGVQaWN0dXJlICpw aWMpDQo+PiArew0KPj4gKyAgICBpZiAoIXBpYy0+cGljX2N0bC5wSEVWQ1BpY0RhdGEpDQo+PiAr ICAgICAgICByZXR1cm47DQo+PiArDQo+PiArICAgIGF2X2ZyZWVwKCZwaWMtPnBpY19jdGwucEhF VkNQaWNEYXRhLT5wTGlzdDBSZWZlcmVuY2VGcmFtZXMpOw0KPj4gKyAgICBhdl9mcmVlcCgmcGlj LT5waWNfY3RsLnBIRVZDUGljRGF0YS0+cExpc3QxUmVmZXJlbmNlRnJhbWVzKTsNCj4+ICsgICAg YXZfZnJlZXAoJnBpYy0+cGljX2N0bC5wSEVWQ1BpY0RhdGEtDQo+PnBSZWZlcmVuY2VGcmFtZXNS ZWNvblBpY3R1cmVEZXNjcmlwdG9ycyk7DQo+PiArICAgIGF2X2ZyZWVwKCZwaWMtPnBpY19jdGwu cEhFVkNQaWNEYXRhKTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBkM2QxMnZhX2VuY29k ZV9oZXZjX2luaXRfcGljdHVyZV9wYXJhbXMoQVZDb2RlY0NvbnRleHQNCj4qYXZjdHgsDQo+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEMTJW QUVuY29kZVBpY3R1cmUgKnBpYykNCj4+ICt7DQo+PiArICAgIEhXQmFzZUVuY29kZUNvbnRleHQg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpiYXNlX2N0eCA9IGF2Y3R4LT5wcml2X2RhdGE7 DQo+PiArICAgIEhXQmFzZUVuY29kZVBpY3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICpiYXNlX3BpYyA9DQo+KEhXQmFzZUVuY29kZVBpY3R1cmUgKilwaWM7DQo+PiArICAgIEQzRDEy VkFFbmNvZGVIRVZDUGljdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqaHBpYyA9IGJh c2VfcGljLT5wcml2X2RhdGE7DQo+PiArICAgIEhXQmFzZUVuY29kZVBpY3R1cmUgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqcHJldiA9IGJhc2VfcGljLT5wcmV2Ow0KPj4gKyAgICBE M0QxMlZBRW5jb2RlSEVWQ1BpY3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAqaHByZXYg PSBwcmV2ID8gcHJldi0NCj4+cHJpdl9kYXRhIDogTlVMTDsNCj4+ICsgICAgRDNEMTJfVklERU9f RU5DT0RFUl9SRUZFUkVOQ0VfUElDVFVSRV9ERVNDUklQVE9SX0hFVkMgKnBkDQo+PSBOVUxMOw0K Pj4gKyAgICBVSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpy ZWZfbGlzdDAgPSBOVUxMLCAqcmVmX2xpc3QxID0gTlVMTDsNCj4+ICsgICAgaW50IGksIGlkeCA9 IDA7DQo+PiArDQo+PiArICAgIHBpYy0+cGljX2N0bC5EYXRhU2l6ZSA9DQo+c2l6ZW9mKEQzRDEy X1ZJREVPX0VOQ09ERVJfUElDVFVSRV9DT05UUk9MX0NPREVDX0RBVEFfSEVWQyk7DQo+PiArICAg IHBpYy0+cGljX2N0bC5wSEVWQ1BpY0RhdGEgPSBhdl9tYWxsb2N6KHBpYy0+cGljX2N0bC5EYXRh U2l6ZSk7DQo+PiArICAgIGlmICghcGljLT5waWNfY3RsLnBIRVZDUGljRGF0YSkNCj4+ICsgICAg ICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7DQo+PiArDQo+PiArICAgIGlmIChiYXNlX3BpYy0+ dHlwZSA9PSBQSUNUVVJFX1RZUEVfSURSKSB7DQo+PiArICAgICAgICBhdl9hc3NlcnQwKGJhc2Vf cGljLT5kaXNwbGF5X29yZGVyID09IGJhc2VfcGljLT5lbmNvZGVfb3JkZXIpOw0KPj4gKw0KPj4g KyAgICAgICAgaHBpYy0+bGFzdF9pZHJfZnJhbWUgPSBiYXNlX3BpYy0+ZGlzcGxheV9vcmRlcjsN Cj4+ICsNCj4+ICsgICAgICAgIGhwaWMtPnNsaWNlX25hbF91bml0ID0gSEVWQ19OQUxfSURSX1df UkFETDsNCj4+ICsgICAgICAgIGhwaWMtPnNsaWNlX3R5cGUgICAgID0gSEVWQ19TTElDRV9JOw0K Pj4gKyAgICAgICAgaHBpYy0+cGljX3R5cGUgICAgICAgPSAwOw0KPj4gKyAgICB9IGVsc2Ugew0K Pj4gKyAgICAgICAgYXZfYXNzZXJ0MChwcmV2KTsNCj4+ICsgICAgICAgIGhwaWMtPmxhc3RfaWRy X2ZyYW1lID0gaHByZXYtPmxhc3RfaWRyX2ZyYW1lOw0KPj4gKw0KPj4gKyAgICAgICAgaWYgKGJh c2VfcGljLT50eXBlID09IFBJQ1RVUkVfVFlQRV9JKSB7DQo+PiArICAgICAgICAgICAgaHBpYy0+ c2xpY2VfbmFsX3VuaXQgPSBIRVZDX05BTF9DUkFfTlVUOw0KPj4gKyAgICAgICAgICAgIGhwaWMt PnNsaWNlX3R5cGUgICAgID0gSEVWQ19TTElDRV9JOw0KPj4gKyAgICAgICAgICAgIGhwaWMtPnBp Y190eXBlICAgICAgID0gMDsNCj4+ICsgICAgICAgIH0gZWxzZSBpZiAoYmFzZV9waWMtPnR5cGUg PT0gUElDVFVSRV9UWVBFX1ApIHsNCj4+ICsgICAgICAgICAgICBhdl9hc3NlcnQwKGJhc2VfcGlj LT5yZWZzWzBdKTsNCj4+ICsgICAgICAgICAgICBocGljLT5zbGljZV9uYWxfdW5pdCA9IEhFVkNf TkFMX1RSQUlMX1I7DQo+PiArICAgICAgICAgICAgaHBpYy0+c2xpY2VfdHlwZSAgICAgPSBIRVZD X1NMSUNFX1A7DQo+PiArICAgICAgICAgICAgaHBpYy0+cGljX3R5cGUgICAgICAgPSAxOw0KPj4g KyAgICAgICAgfSBlbHNlIHsNCj4+ICsgICAgICAgICAgICBIV0Jhc2VFbmNvZGVQaWN0dXJlICpp cmFwX3JlZjsNCj4+ICsgICAgICAgICAgICBhdl9hc3NlcnQwKGJhc2VfcGljLT5yZWZzWzBdWzBd ICYmIGJhc2VfcGljLT5yZWZzWzFdWzBdKTsNCj4+ICsgICAgICAgICAgICBmb3IgKGlyYXBfcmVm ID0gYmFzZV9waWM7IGlyYXBfcmVmOyBpcmFwX3JlZiA9IGlyYXBfcmVmLT5yZWZzWzFdWzBdKSB7 DQo+PiArICAgICAgICAgICAgICAgIGlmIChpcmFwX3JlZi0+dHlwZSA9PSBQSUNUVVJFX1RZUEVf SSkNCj4+ICsgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KPj4gKyAgICAgICAgICAgIH0NCj4+ ICsgICAgICAgICAgICBpZiAoYmFzZV9waWMtPmJfZGVwdGggPT0gYmFzZV9jdHgtPm1heF9iX2Rl cHRoKSB7DQo+PiArICAgICAgICAgICAgICAgIGhwaWMtPnNsaWNlX25hbF91bml0ID0gaXJhcF9y ZWYgPyBIRVZDX05BTF9SQVNMX04NCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA6IEhFVkNfTkFMX1RSQUlMX047DQo+PiArICAgICAgICAgICAgfSBl bHNlIHsNCj4+ICsgICAgICAgICAgICAgICAgaHBpYy0+c2xpY2VfbmFsX3VuaXQgPSBpcmFwX3Jl ZiA/IEhFVkNfTkFMX1JBU0xfUg0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDogSEVWQ19OQUxfVFJBSUxfUjsNCj4+ICsgICAgICAgICAgICB9DQo+ PiArICAgICAgICAgICAgaHBpYy0+c2xpY2VfdHlwZSA9IEhFVkNfU0xJQ0VfQjsNCj4+ICsgICAg ICAgICAgICBocGljLT5waWNfdHlwZSAgID0gMjsNCj4+ICsgICAgICAgIH0NCj4+ICsgICAgfQ0K Pg0KPkRvZXMgdGhlIHNsaWNlIHNldHVwIGFjdHVhbGx5IHdvcmsgaGVyZT8gIHNsaWNlX25hbF91 bml0IHNlZW1zIHRvIGJlIGEgd3JpdGUtDQo+b25seSB2YXJpYWJsZS4NCg0KVGhlc2UgdmFyaWFi bGVzIGFyZSBub3QgbmVjZXNzYXJ5LiBJJ2xsIHJlbW92ZSB0aGVtLg0KDQo+DQo+KFlvdSd2ZSBz ZXQgTk9OX0lEUl9LRVlfUElDVFVSRVMgYmVsb3cgLSBkb2VzIGl0IGFjdHVhbGx5IHdvcmsgd2l0 aCBvcGVuLQ0KPmdvcCBhbmQgbWFrZSBDUkEgYW5kIFJBU0wgZnJhbWVzIGNvcnJlY3RseT8pDQoN ClllcyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGFuZCBkcGIgbG9naWMgYXJlIGFscmVhZHkg YWJsZSB0byBnZW5lcmF0ZSB0aG9zZSBmcmFtZXMuDQoNCj4NCj4+ICsgICAgaHBpYy0+cGljX29y ZGVyX2NudCA9IGJhc2VfcGljLT5kaXNwbGF5X29yZGVyIC0gaHBpYy0+bGFzdF9pZHJfZnJhbWU7 DQo+PiArDQo+PiArICAgIHN3aXRjaChiYXNlX3BpYy0+dHlwZSkgew0KPj4gKyAgICAgICAgY2Fz ZSBQSUNUVVJFX1RZUEVfSURSOg0KPj4gKyAgICAgICAgICAgIHBpYy0+cGljX2N0bC5wSEVWQ1Bp Y0RhdGEtPkZyYW1lVHlwZSA9DQo+RDNEMTJfVklERU9fRU5DT0RFUl9GUkFNRV9UWVBFX0hFVkNf SURSX0ZSQU1FOw0KPj4gKyAgICAgICAgICAgIGJyZWFrOw0KPj4gKyAgICAgICAgY2FzZSBQSUNU VVJFX1RZUEVfSToNCj4+ICsgICAgICAgICAgICBwaWMtPnBpY19jdGwucEhFVkNQaWNEYXRhLT5G cmFtZVR5cGUgPQ0KPkQzRDEyX1ZJREVPX0VOQ09ERVJfRlJBTUVfVFlQRV9IRVZDX0lfRlJBTUU7 DQo+PiArICAgICAgICAgICAgYnJlYWs7DQo+PiArICAgICAgICBjYXNlIFBJQ1RVUkVfVFlQRV9Q Og0KPj4gKyAgICAgICAgICAgIHBpYy0+cGljX2N0bC5wSEVWQ1BpY0RhdGEtPkZyYW1lVHlwZSA9 DQo+RDNEMTJfVklERU9fRU5DT0RFUl9GUkFNRV9UWVBFX0hFVkNfUF9GUkFNRTsNCj4+ICsgICAg ICAgICAgICBicmVhazsNCj4+ICsgICAgICAgIGNhc2UgUElDVFVSRV9UWVBFX0I6DQo+PiArICAg ICAgICAgICAgcGljLT5waWNfY3RsLnBIRVZDUGljRGF0YS0+RnJhbWVUeXBlID0NCj5EM0QxMl9W SURFT19FTkNPREVSX0ZSQU1FX1RZUEVfSEVWQ19CX0ZSQU1FOw0KPj4gKyAgICAgICAgICAgIGJy ZWFrOw0KPj4gKyAgICAgICAgZGVmYXVsdDoNCj4+ICsgICAgICAgICAgICBhdl9hc3NlcnQwKDAg JiYgImludmFsaWQgcGljdHVyZSB0eXBlIik7DQo+PiArICAgIH0NCj4+ICsNCj4+ICsgICAgcGlj LT5waWNfY3RsLnBIRVZDUGljRGF0YS0+c2xpY2VfcGljX3BhcmFtZXRlcl9zZXRfaWQgPSAwOw0K Pj4gKyAgICBwaWMtPnBpY19jdGwucEhFVkNQaWNEYXRhLT5QaWN0dXJlT3JkZXJDb3VudE51bWJl ciAgICA9IGhwaWMtDQo+PnBpY19vcmRlcl9jbnQ7DQo+PiArDQo+PiArICAgIGlmIChiYXNlX3Bp Yy0+dHlwZSA9PSBQSUNUVVJFX1RZUEVfUCB8fCBiYXNlX3BpYy0+dHlwZSA9PQ0KPlBJQ1RVUkVf VFlQRV9CKSB7DQo+PiArICAgICAgICBwZCA9IGF2X2NhbGxvYyhNQVhfUElDVFVSRV9SRUZFUkVO Q0VTLCBzaXplb2YoKnBkKSk7DQo+PiArICAgICAgICBpZiAoIXBkKQ0KPj4gKyAgICAgICAgICAg IHJldHVybiBBVkVSUk9SKEVOT01FTSk7DQo+PiArDQo+PiArICAgICAgICByZWZfbGlzdDAgPSBh dl9jYWxsb2MoTUFYX1BJQ1RVUkVfUkVGRVJFTkNFUywgc2l6ZW9mKCpyZWZfbGlzdDApKTsNCj4+ ICsgICAgICAgIGlmICghcmVmX2xpc3QwKQ0KPj4gKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9S KEVOT01FTSk7DQo+PiArDQo+PiArICAgICAgICBwaWMtPnBpY19jdGwucEhFVkNQaWNEYXRhLT5M aXN0MFJlZmVyZW5jZUZyYW1lc0NvdW50ID0gYmFzZV9waWMtDQo+Pm5iX3JlZnNbMF07DQo+PiAr ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYmFzZV9waWMtPm5iX3JlZnNbMF07IGkrKykgew0KPj4g KyAgICAgICAgICAgIEhXQmFzZUVuY29kZVBpY3R1cmUgICAgICAqcmVmID0gYmFzZV9waWMtPnJl ZnNbMF1baV07DQo+PiArICAgICAgICAgICAgRDNEMTJWQUVuY29kZUhFVkNQaWN0dXJlICpocmVm Ow0KPj4gKw0KPj4gKyAgICAgICAgICAgIGF2X2Fzc2VydDAocmVmICYmIHJlZi0+ZW5jb2RlX29y ZGVyIDwgYmFzZV9waWMtPmVuY29kZV9vcmRlcik7DQo+PiArICAgICAgICAgICAgaHJlZiA9IHJl Zi0+cHJpdl9kYXRhOw0KPj4gKw0KPj4gKyAgICAgICAgICAgIHJlZl9saXN0MFtpXSA9IGlkeDsN Cj4+ICsgICAgICAgICAgICBwZFtpZHhdLlJlY29uc3RydWN0ZWRQaWN0dXJlUmVzb3VyY2VJbmRl eCA9IGlkeDsNCj4+ICsgICAgICAgICAgICBwZFtpZHhdLklzUmVmVXNlZEJ5Q3VycmVudFBpYyA9 IFRSVUU7DQo+PiArICAgICAgICAgICAgcGRbaWR4XS5QaWN0dXJlT3JkZXJDb3VudE51bWJlciA9 IGhyZWYtPnBpY19vcmRlcl9jbnQ7DQo+PiArICAgICAgICAgICAgaWR4Kys7DQo+PiArICAgICAg ICB9DQo+PiArICAgIH0NCj4+ICsNCj4+ICsgICAgaWYgKGJhc2VfcGljLT50eXBlID09IFBJQ1RV UkVfVFlQRV9CKSB7DQo+PiArICAgICAgICByZWZfbGlzdDEgPSBhdl9jYWxsb2MoTUFYX1BJQ1RV UkVfUkVGRVJFTkNFUywgc2l6ZW9mKCpyZWZfbGlzdDEpKTsNCj4+ICsgICAgICAgIGlmICghcmVm X2xpc3QxKQ0KPj4gKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7DQo+PiArDQo+ PiArICAgICAgICBwaWMtPnBpY19jdGwucEhFVkNQaWNEYXRhLT5MaXN0MVJlZmVyZW5jZUZyYW1l c0NvdW50ID0gYmFzZV9waWMtDQo+Pm5iX3JlZnNbMV07DQo+PiArICAgICAgICBmb3IgKGkgPSAw OyBpIDwgYmFzZV9waWMtPm5iX3JlZnNbMV07IGkrKykgew0KPj4gKyAgICAgICAgICAgIEhXQmFz ZUVuY29kZVBpY3R1cmUgICAgICAqcmVmID0gYmFzZV9waWMtPnJlZnNbMV1baV07DQo+PiArICAg ICAgICAgICAgRDNEMTJWQUVuY29kZUhFVkNQaWN0dXJlICpocmVmOw0KPj4gKw0KPj4gKyAgICAg ICAgICAgIGF2X2Fzc2VydDAocmVmICYmIHJlZi0+ZW5jb2RlX29yZGVyIDwgYmFzZV9waWMtPmVu Y29kZV9vcmRlcik7DQo+PiArICAgICAgICAgICAgaHJlZiA9IHJlZi0+cHJpdl9kYXRhOw0KPj4g Kw0KPj4gKyAgICAgICAgICAgIHJlZl9saXN0MVtpXSA9IGlkeDsNCj4+ICsgICAgICAgICAgICBw ZFtpZHhdLlJlY29uc3RydWN0ZWRQaWN0dXJlUmVzb3VyY2VJbmRleCA9IGlkeDsNCj4+ICsgICAg ICAgICAgICBwZFtpZHhdLklzUmVmVXNlZEJ5Q3VycmVudFBpYyA9IFRSVUU7DQo+PiArICAgICAg ICAgICAgcGRbaWR4XS5QaWN0dXJlT3JkZXJDb3VudE51bWJlciA9IGhyZWYtPnBpY19vcmRlcl9j bnQ7DQo+PiArICAgICAgICAgICAgaWR4Kys7DQo+PiArICAgICAgICB9DQo+PiArICAgIH0NCj4+ ICsNCj4+ICsgICAgcGljLT5waWNfY3RsLnBIRVZDUGljRGF0YS0+cExpc3QwUmVmZXJlbmNlRnJh bWVzID0gcmVmX2xpc3QwOw0KPj4gKyAgICBwaWMtPnBpY19jdGwucEhFVkNQaWNEYXRhLT5wTGlz dDFSZWZlcmVuY2VGcmFtZXMgPSByZWZfbGlzdDE7DQo+PiArICAgIHBpYy0+cGljX2N0bC5wSEVW Q1BpY0RhdGEtDQo+PlJlZmVyZW5jZUZyYW1lc1JlY29uUGljdHVyZURlc2NyaXB0b3JzQ291bnQg PSBpZHg7DQo+PiArICAgIHBpYy0+cGljX2N0bC5wSEVWQ1BpY0RhdGEtPnBSZWZlcmVuY2VGcmFt ZXNSZWNvblBpY3R1cmVEZXNjcmlwdG9ycyA9DQo+cGQ7DQo+PiArDQo+PiArICAgIHJldHVybiAw Ow0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgY29uc3QgRDNEMTJWQUVuY29kZVR5cGUgZDNkMTJ2 YV9lbmNvZGVfdHlwZV9oZXZjID0gew0KPj4gKyAgICAucHJvZmlsZXMgICAgICAgICAgICAgICA9 IGQzZDEydmFfZW5jb2RlX2hldmNfcHJvZmlsZXMsDQo+PiArDQo+PiArICAgIC5kM2QxMl9jb2Rl YyAgICAgICAgICAgID0gRDNEMTJfVklERU9fRU5DT0RFUl9DT0RFQ19IRVZDLA0KPj4gKw0KPj4g KyAgICAuZmxhZ3MgICAgICAgICAgICAgICAgICA9IEZMQUdfQl9QSUNUVVJFUyB8DQo+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRkxBR19CX1BJQ1RVUkVfUkVGRVJFTkNFUyB8DQo+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkxBR19OT05fSURSX0tFWV9QSUNUVVJF UywNCj4+ICsNCj4+ICsgICAgLmRlZmF1bHRfcXVhbGl0eSAgICAgICAgPSAyNSwNCj4+ICsNCj4+ ICsgICAgLmdldF9lbmNvZGVyX2NhcHMgICAgICAgPSAmZDNkMTJ2YV9lbmNvZGVfaGV2Y19nZXRf ZW5jb2Rlcl9jYXBzLA0KPj4gKw0KPj4gKyAgICAuY29uZmlndXJlICAgICAgICAgICAgICA9ICZk M2QxMnZhX2VuY29kZV9oZXZjX2NvbmZpZ3VyZSwNCj4+ICsNCj4+ICsgICAgLnNldF9sZXZlbCAg ICAgICAgICAgICAgPSAmZDNkMTJ2YV9lbmNvZGVfaGV2Y19zZXRfbGV2ZWwsDQo+PiArDQo+PiAr ICAgIC5waWN0dXJlX3ByaXZfZGF0YV9zaXplID0gc2l6ZW9mKEQzRDEyVkFFbmNvZGVIRVZDUGlj dHVyZSksDQo+PiArDQo+PiArICAgIC5pbml0X3NlcXVlbmNlX3BhcmFtcyAgID0NCj4mZDNkMTJ2 YV9lbmNvZGVfaGV2Y19pbml0X3NlcXVlbmNlX3BhcmFtcywNCj4+ICsNCj4+ICsgICAgLmluaXRf cGljdHVyZV9wYXJhbXMgICAgPSAmZDNkMTJ2YV9lbmNvZGVfaGV2Y19pbml0X3BpY3R1cmVfcGFy YW1zLA0KPj4gKw0KPj4gKyAgICAuZnJlZV9waWN0dXJlX3BhcmFtcyAgICA9ICZkM2QxMnZhX2Vu Y29kZV9oZXZjX2ZyZWVfcGljdHVyZV9wYXJhbXMsDQo+PiArDQo+PiArICAgIC53cml0ZV9zZXF1 ZW5jZV9oZWFkZXIgID0NCj4mZDNkMTJ2YV9lbmNvZGVfaGV2Y193cml0ZV9zZXF1ZW5jZV9oZWFk ZXIsDQo+PiArfTsNCj4+ICsNCj4+ICtzdGF0aWMgaW50IGQzZDEydmFfZW5jb2RlX2hldmNfaW5p dChBVkNvZGVjQ29udGV4dCAqYXZjdHgpDQo+PiArew0KPj4gKyAgICBIV0Jhc2VFbmNvZGVDb250 ZXh0ICAqYmFzZV9jdHggPSBhdmN0eC0+cHJpdl9kYXRhOw0KPj4gKyAgICBEM0QxMlZBRW5jb2Rl Q29udGV4dCAgICAgICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOw0KPj4gKyAgICBEM0QxMlZBRW5j b2RlSEVWQ0NvbnRleHQgKnByaXYgPSBhdmN0eC0+cHJpdl9kYXRhOw0KPj4gKw0KPj4gKyAgICBj dHgtPmNvZGVjID0gJmQzZDEydmFfZW5jb2RlX3R5cGVfaGV2YzsNCj4+ICsNCj4+ICsgICAgaWYg KGF2Y3R4LT5wcm9maWxlID09IEFWX1BST0ZJTEVfVU5LTk9XTikNCj4+ICsgICAgICAgIGF2Y3R4 LT5wcm9maWxlID0gcHJpdi0+cHJvZmlsZTsNCj4+ICsgICAgaWYgKGF2Y3R4LT5sZXZlbCA9PSBG Rl9MRVZFTF9VTktOT1dOKQ0KPj4gKyAgICAgICAgYXZjdHgtPmxldmVsID0gcHJpdi0+bGV2ZWw7 DQo+PiArDQo+PiArICAgIGlmIChhdmN0eC0+bGV2ZWwgIT0gRkZfTEVWRUxfVU5LTk9XTiAmJiBh dmN0eC0+bGV2ZWwgJiB+MHhmZikgew0KPj4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0df RVJST1IsICJJbnZhbGlkIGxldmVsICVkOiBtdXN0IGZpdCAiDQo+PiArICAgICAgICAgICAgICAg ImluIDgtYml0IHVuc2lnbmVkIGludGVnZXIuXG4iLCBhdmN0eC0+bGV2ZWwpOw0KPj4gKyAgICAg ICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsNCj4+ICsgICAgfQ0KPj4gKw0KPj4gKyAgICBpZiAo cHJpdi0+cXAgPiAwKQ0KPj4gKyAgICAgICAgYmFzZV9jdHgtPmV4cGxpY2l0X3FwID0gcHJpdi0+ cXA7DQo+PiArDQo+PiArICAgIHJldHVybiBmZl9kM2QxMnZhX2VuY29kZV9pbml0KGF2Y3R4KTsN Cj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBkM2QxMnZhX2VuY29kZV9oZXZjX2Nsb3NlKEFW Q29kZWNDb250ZXh0ICphdmN0eCkNCj4+ICt7DQo+PiArICAgIEQzRDEyVkFFbmNvZGVIRVZDQ29u dGV4dCAqcHJpdiA9IGF2Y3R4LT5wcml2X2RhdGE7DQo+PiArDQo+PiArICAgIGZmX2Nic19mcmFn bWVudF9mcmVlKCZwcml2LT5jdXJyZW50X2FjY2Vzc191bml0KTsNCj4+ICsgICAgZmZfY2JzX2Ns b3NlKCZwcml2LT5jYmMpOw0KPj4gKw0KPj4gKyAgICBhdl9mcmVlcCgmcHJpdi0+Y29tbW9uLmNv ZGVjX2NvbmYucEhFVkNDb25maWcpOw0KPj4gKyAgICBhdl9mcmVlcCgmcHJpdi0+Y29tbW9uLmdv cC5wSEVWQ0dyb3VwT2ZQaWN0dXJlcyk7DQo+PiArICAgIGF2X2ZyZWVwKCZwcml2LT5jb21tb24u bGV2ZWwucEhFVkNMZXZlbFNldHRpbmcpOw0KPj4gKw0KPj4gKyAgICByZXR1cm4gZmZfZDNkMTJ2 YV9lbmNvZGVfY2xvc2UoYXZjdHgpOw0KPj4gK30NCj4+ICsNCj4+ICsjZGVmaW5lIE9GRlNFVCh4 KSBvZmZzZXRvZihEM0QxMlZBRW5jb2RlSEVWQ0NvbnRleHQsIHgpDQo+PiArI2RlZmluZSBGTEFH UyAoQVZfT1BUX0ZMQUdfVklERU9fUEFSQU0gfA0KPkFWX09QVF9GTEFHX0VOQ09ESU5HX1BBUkFN KQ0KPj4gK3N0YXRpYyBjb25zdCBBVk9wdGlvbiBkM2QxMnZhX2VuY29kZV9oZXZjX29wdGlvbnNb XSA9IHsNCj4+ICsgICAgSFdfQkFTRV9FTkNPREVfQ09NTU9OX09QVElPTlMsDQo+PiArICAgIEhX X0JBU0VfRU5DT0RFX1JDX09QVElPTlMsDQo+PiArDQo+PiArICAgIHsgInFwIiwgIkNvbnN0YW50 IFFQIChmb3IgUC1mcmFtZXM7IHNjYWxlZCBieSBxZmFjdG9yL3FvZmZzZXQgZm9yIEkvQikiLA0K Pj4gKyAgICAgIE9GRlNFVChxcCksIEFWX09QVF9UWVBFX0lOVCwgeyAuaTY0ID0gMCB9LCAwLCA1 MiwgRkxBR1MgfSwNCj4+ICsNCj4+ICsgICAgeyAicHJvZmlsZSIsICJTZXQgcHJvZmlsZSAoZ2Vu ZXJhbF9wcm9maWxlX2lkYykiLA0KPj4gKyAgICAgIE9GRlNFVChwcm9maWxlKSwgQVZfT1BUX1RZ UEVfSU5ULA0KPj4gKyAgICAgIHsgLmk2NCA9IEFWX1BST0ZJTEVfVU5LTk9XTiB9LCBBVl9QUk9G SUxFX1VOS05PV04sIDB4ZmYsIEZMQUdTLA0KPiJwcm9maWxlIiB9LA0KPj4gKw0KPj4gKyNkZWZp bmUgUFJPRklMRShuYW1lLCB2YWx1ZSkgIG5hbWUsIE5VTEwsIDAsIEFWX09QVF9UWVBFX0NPTlNU LCBcDQo+PiArICAgICAgeyAuaTY0ID0gdmFsdWUgfSwgMCwgMCwgRkxBR1MsICJwcm9maWxlIg0K Pj4gKyAgICB7IFBST0ZJTEUoIm1haW4iLCAgICAgICAgICAgICAgIEFWX1BST0ZJTEVfSEVWQ19N QUlOKSB9LA0KPj4gKyAgICB7IFBST0ZJTEUoIm1haW4xMCIsICAgICAgICAgICAgIEFWX1BST0ZJ TEVfSEVWQ19NQUlOXzEwKSB9LA0KPj4gKyAgICB7IFBST0ZJTEUoInJleHQiLCAgICAgICAgICAg ICAgIEFWX1BST0ZJTEVfSEVWQ19SRVhUKSB9LA0KPj4gKyN1bmRlZiBQUk9GSUxFDQo+PiArDQo+ PiArICAgIHsgInRpZXIiLCAiU2V0IHRpZXIgKGdlbmVyYWxfdGllcl9mbGFnKSIsDQo+PiArICAg ICAgT0ZGU0VUKHRpZXIpLCBBVl9PUFRfVFlQRV9JTlQsDQo+PiArICAgICAgeyAuaTY0ID0gMCB9 LCAwLCAxLCBGTEFHUywgInRpZXIiIH0sDQo+PiArICAgIHsgIm1haW4iLCBOVUxMLCAwLCBBVl9P UFRfVFlQRV9DT05TVCwNCj4+ICsgICAgICB7IC5pNjQgPSAwIH0sIDAsIDAsIEZMQUdTLCAidGll ciIgfSwNCj4+ICsgICAgeyAiaGlnaCIsIE5VTEwsIDAsIEFWX09QVF9UWVBFX0NPTlNULA0KPj4g KyAgICAgIHsgLmk2NCA9IDEgfSwgMCwgMCwgRkxBR1MsICJ0aWVyIiB9LA0KPj4gKw0KPj4gKyAg ICB7ICJsZXZlbCIsICJTZXQgbGV2ZWwgKGdlbmVyYWxfbGV2ZWxfaWRjKSIsDQo+PiArICAgICAg T0ZGU0VUKGxldmVsKSwgQVZfT1BUX1RZUEVfSU5ULA0KPj4gKyAgICAgIHsgLmk2NCA9IEZGX0xF VkVMX1VOS05PV04gfSwgRkZfTEVWRUxfVU5LTk9XTiwgMHhmZiwgRkxBR1MsDQo+ImxldmVsIiB9 LA0KPj4gKw0KPj4gKyNkZWZpbmUgTEVWRUwobmFtZSwgdmFsdWUpIG5hbWUsIE5VTEwsIDAsIEFW X09QVF9UWVBFX0NPTlNULCBcDQo+PiArICAgICAgeyAuaTY0ID0gdmFsdWUgfSwgMCwgMCwgRkxB R1MsICJsZXZlbCINCj4+ICsgICAgeyBMRVZFTCgiMSIsICAgIDMwKSB9LA0KPj4gKyAgICB7IExF VkVMKCIyIiwgICAgNjApIH0sDQo+PiArICAgIHsgTEVWRUwoIjIuMSIsICA2MykgfSwNCj4+ICsg ICAgeyBMRVZFTCgiMyIsICAgIDkwKSB9LA0KPj4gKyAgICB7IExFVkVMKCIzLjEiLCAgOTMpIH0s DQo+PiArICAgIHsgTEVWRUwoIjQiLCAgIDEyMCkgfSwNCj4+ICsgICAgeyBMRVZFTCgiNC4xIiwg MTIzKSB9LA0KPj4gKyAgICB7IExFVkVMKCI1IiwgICAxNTApIH0sDQo+PiArICAgIHsgTEVWRUwo IjUuMSIsIDE1MykgfSwNCj4+ICsgICAgeyBMRVZFTCgiNS4yIiwgMTU2KSB9LA0KPj4gKyAgICB7 IExFVkVMKCI2IiwgICAxODApIH0sDQo+PiArICAgIHsgTEVWRUwoIjYuMSIsIDE4MykgfSwNCj4+ ICsgICAgeyBMRVZFTCgiNi4yIiwgMTg2KSB9LA0KPj4gKyN1bmRlZiBMRVZFTA0KPj4gKw0KPj4g KyAgICB7IE5VTEwgfSwNCj4+ICt9Ow0KPj4gKw0KPj4gK3N0YXRpYyBjb25zdCBGRkNvZGVjRGVm YXVsdCBkM2QxMnZhX2VuY29kZV9oZXZjX2RlZmF1bHRzW10gPSB7DQo+PiArICAgIHsgImIiLCAg ICAgICAgICAgICAgIjAiICAgfSwNCj4+ICsgICAgeyAiYmYiLCAgICAgICAgICAgICAiMiIgICB9 LA0KPj4gKyAgICB7ICJnIiwgICAgICAgICAgICAgICIxMjAiIH0sDQo+PiArICAgIHsgImlfcWZh Y3RvciIsICAgICAgIjEiICAgfSwNCj4+ICsgICAgeyAiaV9xb2Zmc2V0IiwgICAgICAiMCIgICB9 LA0KPj4gKyAgICB7ICJiX3FmYWN0b3IiLCAgICAgICI2LzUiIH0sDQo+PiArICAgIHsgImJfcW9m ZnNldCIsICAgICAgIjAiICAgfSwNCj4+ICsgICAgeyAicW1pbiIsICAgICAgICAgICAiLTEiICB9 LA0KPj4gKyAgICB7ICJxbWF4IiwgICAgICAgICAgICItMSIgIH0sDQo+PiArICAgIHsgTlVMTCB9 LA0KPj4gK307DQo+PiArDQo+PiArc3RhdGljIGNvbnN0IEFWQ2xhc3MgZDNkMTJ2YV9lbmNvZGVf aGV2Y19jbGFzcyA9IHsNCj4+ICsgICAgLmNsYXNzX25hbWUgPSAiaGV2Y19kM2QxMnZhIiwNCj4+ ICsgICAgLml0ZW1fbmFtZSAgPSBhdl9kZWZhdWx0X2l0ZW1fbmFtZSwNCj4+ICsgICAgLm9wdGlv biAgICAgPSBkM2QxMnZhX2VuY29kZV9oZXZjX29wdGlvbnMsDQo+PiArICAgIC52ZXJzaW9uICAg ID0gTElCQVZVVElMX1ZFUlNJT05fSU5ULA0KPj4gK307DQo+PiArDQo+PiArY29uc3QgRkZDb2Rl YyBmZl9oZXZjX2QzZDEydmFfZW5jb2RlciA9IHsNCj4+ICsgICAgLnAubmFtZSAgICAgICAgID0g ImhldmNfZDNkMTJ2YSIsDQo+PiArICAgIENPREVDX0xPTkdfTkFNRSgiRDNEMTJWQSBoZXZjIGVu Y29kZXIiKSwNCj4+ICsgICAgLnAudHlwZSAgICAgICAgID0gQVZNRURJQV9UWVBFX1ZJREVPLA0K Pj4gKyAgICAucC5pZCAgICAgICAgICAgPSBBVl9DT0RFQ19JRF9IRVZDLA0KPj4gKyAgICAucHJp dl9kYXRhX3NpemUgPSBzaXplb2YoRDNEMTJWQUVuY29kZUhFVkNDb250ZXh0KSwNCj4+ICsgICAg LmluaXQgICAgICAgICAgID0gJmQzZDEydmFfZW5jb2RlX2hldmNfaW5pdCwNCj4+ICsgICAgRkZf Q09ERUNfUkVDRUlWRV9QQUNLRVRfQ0IoJmZmX2h3X2Jhc2VfZW5jb2RlX3JlY2VpdmVfcGFja2V0 KSwNCj4+ICsgICAgLmNsb3NlICAgICAgICAgID0gJmQzZDEydmFfZW5jb2RlX2hldmNfY2xvc2Us DQo+PiArICAgIC5wLnByaXZfY2xhc3MgICA9ICZkM2QxMnZhX2VuY29kZV9oZXZjX2NsYXNzLA0K Pj4gKyAgICAucC5jYXBhYmlsaXRpZXMgPSBBVl9DT0RFQ19DQVBfREVMQVkgfCBBVl9DT0RFQ19D QVBfSEFSRFdBUkUgfA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICBBVl9DT0RFQ19DQVBfRFIx IHwNCj5BVl9DT0RFQ19DQVBfRU5DT0RFUl9SRU9SREVSRURfT1BBUVVFLA0KPj4gKyAgICAuY2Fw c19pbnRlcm5hbCAgPSBGRl9DT0RFQ19DQVBfTk9UX0lOSVRfVEhSRUFEU0FGRSB8DQo+PiArICAg ICAgICAgICAgICAgICAgICAgIEZGX0NPREVDX0NBUF9JTklUX0NMRUFOVVAsDQo+PiArICAgIC5k ZWZhdWx0cyAgICAgICA9IGQzZDEydmFfZW5jb2RlX2hldmNfZGVmYXVsdHMsDQo+PiArICAgIC5w LnBpeF9mbXRzID0gKGNvbnN0IGVudW0gQVZQaXhlbEZvcm1hdFtdKSB7DQo+PiArICAgICAgICBB Vl9QSVhfRk1UX0QzRDEyLA0KPj4gKyAgICAgICAgQVZfUElYX0ZNVF9OT05FLA0KPj4gKyAgICB9 LA0KPj4gKyAgICAuaHdfY29uZmlncyAgICAgPSBmZl9kM2QxMnZhX2VuY29kZV9od19jb25maWdz LA0KPj4gKyAgICAucC53cmFwcGVyX25hbWUgPSAiZDNkMTJ2YSIsDQo+PiArfTsNCj4+IGRpZmYg LS1naXQgYS9saWJhdmNvZGVjL2h3X2Jhc2VfZW5jb2RlLmggYi9saWJhdmNvZGVjL2h3X2Jhc2Vf ZW5jb2RlLmgNCj4+IGluZGV4IGUwMTMzZDY1ZjAuLmEwZDE2NTVlNGUgMTAwNjQ0DQo+PiAtLS0g YS9saWJhdmNvZGVjL2h3X2Jhc2VfZW5jb2RlLmgNCj4+ICsrKyBiL2xpYmF2Y29kZWMvaHdfYmFz ZV9lbmNvZGUuaA0KPj4gQEAgLTE0OSw3ICsxNDksNyBAQCB0eXBlZGVmIHN0cnVjdCBIV0Jhc2VF bmNvZGVQaWN0dXJlIHsNCj4+ICAgfSBIV0Jhc2VFbmNvZGVQaWN0dXJlOw0KPj4NCj4+ICAgdHlw ZWRlZiBzdHJ1Y3QgSFdFbmNvZGVUeXBlIHsNCj4+IC0gICAgSFdCYXNlRW5jb2RlUGljdHVyZSAq ICgqYWxsb2MpKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgQVZGcmFtZQ0KPipmcmFtZSk7DQo+PiAr ICAgIEhXQmFzZUVuY29kZVBpY3R1cmUgKiAoKmFsbG9jKShBVkNvZGVjQ29udGV4dCAqYXZjdHgs IGNvbnN0IEFWRnJhbWUNCj4qZnJhbWUpOw0KPg0KPkxlZnRvdmVyIHBhcnQgb2YgYW4gZWFybGll ciBwYXRjaC4NCj4NCj4+DQo+PiAgICAgICBpbnQgKCppc3N1ZSkoQVZDb2RlY0NvbnRleHQgKmF2 Y3R4LCBIV0Jhc2VFbmNvZGVQaWN0dXJlICpiYXNlX3BpYyk7DQo+Pg0KPg0KDQpBZ2FpbiwgdGhh bmsgeW91IHZlcnkgbXVjaCBmb3IgeW91ciBjYXJlZnVsIHJldmlldy4NCg0KQlJzLA0KVG9uZyAN Cg0KPl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQo+ZmZt cGVnLWRldmVsIG1haWxpbmcgbGlzdA0KPmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnDQo+aHR0cHM6 Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsDQo+DQo+VG8gdW5zdWJz Y3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsDQo+ZmZtcGVnLWRldmVsLXJlcXVlc3RA ZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4NCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QK ZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGlu Zm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1h aWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2Ny aWJlIi4K