From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id D3F6DC5DF9C for ; Mon, 24 Aug 2026 16:52:25 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 8DDE810E15F; Mon, 24 Aug 2026 16:52:25 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.b="deQAoVNd"; dkim-atps=neutral Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.14]) by gabe.freedesktop.org (Postfix) with ESMTPS id D0BBE10E15F for ; Mon, 24 Aug 2026 16:52:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1787590344; x=1819126344; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=+Ebu6AQ649WVxiWY2oDwuo17IqxjR2sd8kIOJBG47r8=; b=deQAoVNdiZTLly2btzDTkw+bahGOAyaVl9xKvbkKqVinpT0Ry0Kv6PIH +34TLM+5YDnlvd1wyrQHredK3/VimhaD139D6gbLqq1NHPxxISgwMbRBm rcYmJL9Otd3UZnbnPDfVSnuWu5ArQdOK+VHAgjowtWabetcAzCH8kQZXC 0GoHbv6FKM0cOinUKZhRd/Vq49cBQi8d1Ssmoi6NLTKcZW2gTCJyay9OL Hps+TNFvs+CWokUhErmXSWladJM+R7s8xb+eRxRoV+POp+A/JOcvejk9K Z0XRigLSUiwHF4AzhEfJNl79UYbCAtb7b/aoaiyDzqehr8s6dQEz4Zuve g==; X-CSE-ConnectionGUID: rqfTAmN4R0mZdI5PTGtEuA== X-CSE-MsgGUID: spS3KY3RTcCEluocKq+JQw== X-IronPort-AV: E=McAfee;i="6800,10657,11885"; a="88063074" X-IronPort-AV: E=Sophos;i="6.25,241,1779174000"; d="scan'208";a="88063074" Received: from fmviesa002.fm.intel.com ([10.60.135.142]) by fmvoesa108.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Aug 2026 09:52:23 -0700 X-CSE-ConnectionGUID: PEL9KErjR1q3MSM4KVXwwg== X-CSE-MsgGUID: 0pg9ER3/Sqi4VreQGRymow== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.25,241,1779174000"; d="scan'208";a="290574714" Received: from orsmsx902.amr.corp.intel.com ([10.22.229.24]) by fmviesa002.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Aug 2026 09:52:23 -0700 Received: from ORSMSX902.amr.corp.intel.com (10.22.229.24) by ORSMSX902.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.45; Mon, 24 Aug 2026 09:52:22 -0700 Received: from ORSEDG903.ED.cps.intel.com (10.7.248.13) by ORSMSX902.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.45 via Frontend Transport; Mon, 24 Aug 2026 09:52:22 -0700 Received: from PH8PR06CU001.outbound.protection.outlook.com (40.107.209.46) by edgegateway.intel.com (134.134.137.113) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.45; Mon, 24 Aug 2026 09:52:22 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=xA/KoSit8goJRfvPppEBzIFnc3xgBL80gym3MJvXcDgKf1bFUZu8xkzczJ/825eJmxkYulnr5Ye7jRAH/Zw+0iRCrIMxqZ2mZ4XKimRms3AjZ+iYFVClgM9iJcUrTGhtvm3entdBijcw5rPjAh0AsWelyrwCa0R0XGU23JJqX5w6p656HYz3bjqn/dUWoh6B4LohMRQ/J3A3Kk0GqkK2GbQPJ/qKyB4c+ZKyQ6bUKDF+htuCtchUZZv5mBky2AIJt6wpXhvgainsaJFP3V1UWPIJo+GoKvrG9vQrA+gtssIvPZCNUJbbQWzFso6I/ngF7tvlRHxgUkahwkIsRR1FAQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=+Ebu6AQ649WVxiWY2oDwuo17IqxjR2sd8kIOJBG47r8=; b=n8uMMxWOn1iSIDBahqvNnZT8DU+XhZxQtMbJI4vATAzyhkrAMq3rPrxYn+M6JUI4XKcJEiTMdR8CUJkX9qb4BnLjPnQP9PE2tAOqceqwK5CPRmWZpUgIbOeY02ZJ/Z5HdGKplhmGjUtWLiQ9Epuw+0RzJevyVIcn3C9C2LjDydsrxqw+ODWWvkqp7+PRwkmhOd0bhhS/7T71RxZf4JX05EIvppiqB8DvCXZYNHmXLhib8ERURkO4o9j/7Iq6WcIs+8KU7N5vmEqmuNdsFhAwk7HBfl+YO3kf9qzmud0KDcCsVSGMUY/bs6tZ9uJyDAtC6IidMbcOx+rEyHEMpeYaEw== 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 CY5PR11MB6320.namprd11.prod.outlook.com (2603:10b6:930:3c::9) by BL4PR11MB8797.namprd11.prod.outlook.com (2603:10b6:208:5a7::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.339.11; Mon, 24 Aug 2026 16:52:16 +0000 Received: from CY5PR11MB6320.namprd11.prod.outlook.com ([fe80::9cd7:94d5:90f:4d76]) by CY5PR11MB6320.namprd11.prod.outlook.com ([fe80::9cd7:94d5:90f:4d76%3]) with mapi id 15.21.0339.012; Mon, 24 Aug 2026 16:52:15 +0000 From: "Summers, Stuart" To: "Roper, Matthew D" CC: "intel-xe@lists.freedesktop.org" , "Sousa, Gustavo" , "Vivi, Rodrigo" , "Brost, Matthew" , "Lin, Shuicheng" , "Ceraolo Spurio, Daniele" , "Nerlige Ramappa, Umesh" , "Wajdeczko, Michal" Subject: Re: [PATCH 02/10] drm/xe: Sort xe_config_device fields Thread-Topic: [PATCH 02/10] drm/xe: Sort xe_config_device fields Thread-Index: AQHdMOfXwWQRyZgO+kSEaxVqbelfRbapABOAgARvMYA= Date: Mon, 24 Aug 2026 16:52:15 +0000 Message-ID: <1e284d68fc895f8a09167e4b3177d64037b729a0.camel@intel.com> References: <20260820210639.107524-12-stuart.summers@intel.com> <20260820210639.107524-14-stuart.summers@intel.com> <20260821210633.GE681121@mdroper-desk1.amr.corp.intel.com> In-Reply-To: <20260821210633.GE681121@mdroper-desk1.amr.corp.intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.44.4-0ubuntu2 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: CY5PR11MB6320:EE_|BL4PR11MB8797:EE_ x-ms-office365-filtering-correlation-id: 76d36845-3a6f-402b-9a43-08df02000d72 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|376014|23010399003|1800799024|366016|38070700021|6133799003|3023799007|10067099003|5023799004|11063799006|4143699003|56012099006|18002099003|22082099003; x-microsoft-antispam-message-info: DhFBVfcmVcfNifwOAuCuVFbwa4oeCMGUV3dLSTl4Y8TTe+2vo+GhJ7pJUQPh4lS3SPy8dCoyC7uiAbWa7ZATC47wQ+w+OMS/fCKYC4hX0lqi5+HJpal8okaN5SRAOFOJlaPpCVxw8+TyhblQCZ2pQ5Hg9N3tU/qzXz/5/i/fv8dEvI9X7MRvvXa6sGNWD8f1XtWNNsxpc68uKYZDqpNia3vcKsk41uMWEmh4RAd3206kqrWV5X/T87yVEVIyKsFFS0JPrTKkXQtY2nzuqKKzyJWwwBJJgtx2J9QnIwJmqXNyG4E5qn3y3KteMsPFu4wJSy/9eKpvWSUS8ToFzEtBBGqXw0bB99liI9bztMMVm/trEZ4Qx1IpWwe/XCj17kdbgZ7kEVKJ13T9eFC484exvnZSpbI4yIh0BPbdI5kcb9iXI0/MV1xDLdItX2tnuxZ3UGI4s+BK3eOSpFhtWpYQylpfdJ89BkiDMN5E8GReWmv9Ee3lkYM3T06PuB7iIKdE6FSzWFx9FW2p2CSsnabW/+Pfo8eva/AFAJPajmzpjYBlHa5OFWMp8a0torn55Sx7t/PzxJoBzLbRwsj7sr+97xObJFbfESxEtgIYQCrfi23WDoJ5UrwAW3Q9D56W93c6wmp3i3E8NUepkulRV+rA+q1CHY6gxZn311qxEDWHwNJ828C2SH5dj3Zrm4WmlfeZqPu+Wsxs1MnfBWxdSDZ+o1etwFHmE6QbUp7PEDapXRo= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CY5PR11MB6320.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(23010399003)(1800799024)(366016)(38070700021)(6133799003)(3023799007)(10067099003)(5023799004)(11063799006)(4143699003)(56012099006)(18002099003)(22082099003); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?MmYwWHFhTm4zNmI4WWFkb1BrSnZxV1R6ZVdhdjhQUVRUcWpKSGxNRTNkeFJJ?= =?utf-8?B?dHVrYWx0T25sQ0M4MzF5amVuSFRDWE11blF6Q3dRUTRsM1Z6OGRWeGNCUm9Z?= =?utf-8?B?RW40QXBPUDRBWVR0WlBxbEZvZ3hwbnMzQm13SmV5TW53VzFLWDdMcFFzaW9R?= =?utf-8?B?YkNqWm1XOS82OWVuekpRSTVqZnBDU1VnZHd4SVhIQWRYYm5QNnluV0VNV2h0?= =?utf-8?B?ZllpOXUwTVhDS2p0MFB2WUwrWVNxVTdPRWU0TVlnQ0R5L3cxV2dwYnhKN0h1?= =?utf-8?B?bHFtcmIxekFyelpZTHBJRHlBc0xhWE5kOGtmaS9jYU1PUXFpaEtnOUxJSkJz?= =?utf-8?B?bTMveXlxbFRRMjI5WVdnekYvalNIVlpEUmpXZ3k0VTJrcDZMRUEyaEt4dENZ?= =?utf-8?B?TWtnbVB2MTVtejVUWkQySWFSa2xSQms1dXc2SFhYUjV1TTNrZE5NQkM5SVNy?= =?utf-8?B?YlN0bEM2c0xWSEl3aFZTazdhS3NIYzdzTXlJbXdhcmF5aEhMZHErem5uSis3?= =?utf-8?B?elQ1RUVQeUFQRHE0NmNadGYzNjRlRDFUa1Jtb2JldWVVTVVONktpdHhCdXdG?= =?utf-8?B?YUw2b0t5SlczSlZQenM5NWY0akZGTzFxRi9VNlZ3OE8xeUYwMVFBQk1Xa0Rk?= =?utf-8?B?ZnpKS0FvUlRpbi95UStWNmZrYmk4RUNES0g5bFp5WG5QTzc5WXBDdUhOcGFG?= =?utf-8?B?QnlVQW1SdFBGQUNHalFBTTdMbGhRSnVpQzVtaWY0SlV3amdnTkFVREpkSU9E?= =?utf-8?B?bVRXRGVMbFhWSTBBdFM4dklwMDVrUzRKWHJxU2pISDBrVlJ5d1lPeE5PSmtT?= =?utf-8?B?ZlV3TkU3bG9mWDNmVzByS0t6ZUtBVzFGVDhSS3hEQmV1KytIQ1VsUkVyZ0wr?= =?utf-8?B?OGNMNi80REl3Yk5nN2hjdko0WXcvVWFMR2NxcGtacWNjVEd0OCtFNndBblBu?= =?utf-8?B?Z25yNWwzSkJNWiszSGJWUHp0clpMeEZjTGJPR1hkSytTVWpqMmNOVGdJZHBN?= =?utf-8?B?dklqdzJBSzFZM21ZbEQzcEQveUI2aUF4TUdGVGVuSlFLL1hxRVNsMEdPQjBs?= =?utf-8?B?VEQyU1JWcTdhR3g3QnR2VFFoU0hjTHhMdjFPaGpNYWVMbC9HblZLdXFLeGFh?= =?utf-8?B?c2pNV05xd0gwc20zVm5ZNFhsTnVnUnMrUThtVk9hY0VobmlORmRqRGI5ZGJx?= =?utf-8?B?cXI1a21vVzBtRldFako5eVJZcjI3dVNNeFFISnZzWWxuOWk5L0prcEtMUjNG?= =?utf-8?B?ODRNb1VpT0lVVUJCald5RkpKQ2JGVHZadlh3U0hQSndSV0pPYU9hQ3l0VHlr?= =?utf-8?B?M3J1a0VoeWRVNHFwb1VPTW5Yc1FEUU81OXNCbERiTWpNYWlTQ0VwYno3WFNi?= =?utf-8?B?ZzdVd1dSUkN4d3JxQkQrMkJoQW5nNUJPbDBmWTNpUGRDRVk2cWZ1UzJQeXA4?= =?utf-8?B?djQ5WEw3TWR5bXV3WDBXWGVEWDZZTWE5STV0VGtieDFWVjR2aW1ad2FZcm9i?= =?utf-8?B?ZlJrVkR3MS8wZTRUVDkrcUxYMEZ0bDVDem4vQ2NLakdpSmhYSTZ5aCszMzdP?= =?utf-8?B?Zk1LT2UvVkZTc2J0QTZZTTc0ZlQvSk1Ha3M0TFFtd2lmdGNuQS8zQ3BGZ2ZD?= =?utf-8?B?VFJPRGJRcHlxV3JORkExaVpqQUJOc2p1NDFwZE1NOGM2NTVtSzFLTGNIY0g5?= =?utf-8?B?MFZGVjZVTzdNNTk0bEhnWTlsYVVrekxPWFdoeHhqMHhOb29YMFJHZHlmUkZq?= =?utf-8?B?UUpadnU4WWVFaHhzTmh0QUREZDV6ZXMya0k3Wno2R282T3FTZklXOEwxbWlv?= =?utf-8?B?Z1Ezank4U1oyOWNVcGJGSlVQRURtMy90STl5cGFOdlJWL1cwSEZZcVo0ZjJw?= =?utf-8?B?ZEFhSm1rYUZhWE1hSXhSaWxMU052VUYvblZoQU9qMnhZb2pDdXJOc2JlOUdv?= =?utf-8?B?d0FzdndEMGZLcUY3UWl4ZmhpY3U2Y0JkcHkzOTd3aDBnVzFaUWFUeXJPaHFy?= =?utf-8?B?U3B2MFZhL2s1WWhNSU9VclNmNjBibGJnYUQ2KzNpSFQrUHVNajFJQVY0TEl3?= =?utf-8?B?TDFDSVE2SEFGNUs2RTBBUU5kc04wbzhSTzZ1ejlkMVJ3amk0Nms1VU1maGl3?= =?utf-8?B?SndLN2pKQ3NabHA3YTBWbnZyeldSK2doQitLdmx6bWVNT0xsU2FpaWhHa0ZK?= =?utf-8?B?b3BEaGNBbG5NMXdvVUFtYml4SFJuOFk2ai9hRW4wTGY4S2RLbHczRnZYT0tX?= =?utf-8?B?ejhYbkVxcWtjSmxsc012ejhLQTZPcEpGMVR2a0RsUEQ5Szl1ZTFBZm9aYVc0?= =?utf-8?B?SGpmZE9VUlM5T1BoVTFOMUtqWkZqQldGd0Z2cG02bm4rallnaUE1cEI4NDVI?= =?utf-8?Q?hE1sJUvwvAakK3cE=3D?= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: 4cQxHYl5xhvlO92q2Iaz2aXeMBNi+CsIDQMw9StDUOqSH/sIeGsAC9yd1FunJVVHort3Tu/LF9uA7A9FeYHjPE0PQLx8HoJ0GWSsRyeI00gJylh7oJBW9BqiysbXVXNDphNJ0gAEqD7tySnkoEHvZ49Do1Y3OWIiWV/DFHaIUVYYOWJ5/AeijN7+5Du8Jl+Eiiyi0dwN394xfylmoUz3XxXRlxrfyahn0UXe4neIyKKfsZDSE59VX2iqU9Jzan6DUot6uz1cJWDz/VLJp3feSjcL8O1bAbon/5eQcuHVw1iR8jqMWF2uoq42FS8aKKgBY98aEYyTuS0StF4Ijc+9Mw== X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CY5PR11MB6320.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 76d36845-3a6f-402b-9a43-08df02000d72 X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Aug 2026 16:52:15.8187 (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: RBw7q8/gVKOCQy1g08BzNzqZpUpAAexM6eRbuvxDfr6LC8TuUqyPRTNY/RPE50LR1asg2v9DvZKv0PImcJylM5B6hntk3Rud5EX3I27b9j4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL4PR11MB8797 X-OriginatorOrg: intel.com X-BeenThere: intel-xe@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel Xe graphics driver List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-xe-bounces@lists.freedesktop.org Sender: "Intel-xe" T24gRnJpLCAyMDI2LTA4LTIxIGF0IDE0OjA2IC0wNzAwLCBNYXR0IFJvcGVyIHdyb3RlOgo+IE9u IFRodSwgQXVnIDIwLCAyMDI2IGF0IDA5OjA2OjQxUE0gKzAwMDAsIFN0dWFydCBTdW1tZXJzIHdy b3RlOgo+ID4gQXMgd2UncmUgcGxhbm5pbmcgbW9yZSBjb25maWdmcyBlbnRyaWVzIG92ZXIgdGlt ZSwgbGV0J3MgYWRkCj4gPiBzb21lIHNvcnRpbmcgcnVsZXMgdG8gbWFrZSBzdXJlIHRoaXMgc3Rh eXMgY2xlYW4gYW5kIGVhc3kgdG8KPiA+IG1hbmFnZS4gU29ydGluZyBmaXJzdCBieSB0eXBlIGFu ZCB0aGVuIG5hbWUgZm9yIHJlYWRhYmlsaXR5Lgo+ID4gCj4gPiBTaWduZWQtb2ZmLWJ5OiBTdHVh cnQgU3VtbWVycyA8c3R1YXJ0LnN1bW1lcnNAaW50ZWwuY29tPgo+ID4gQXNzaXN0ZWQtYnk6IENv cGlsb3Q6Y2xhdWRlLXNvbm5ldC00LjYsY2xhdWRlLW9wdXMtNC43Cj4gPiBSZXZpZXdlZC1ieTog R3VzdGF2byBTb3VzYSA8Z3VzdGF2by5zb3VzYUBpbnRlbC5jb20+Cj4gPiAtLS0KPiA+IMKgZHJp dmVycy9ncHUvZHJtL3hlL3hlX2NvbmZpZ2ZzLmMgfCAxMDkyICsrKysrKysrKysrKysrKy0tLS0t LS0tLS0tCj4gPiAtLS0tCj4gPiDCoGRyaXZlcnMvZ3B1L2RybS94ZS94ZV9jb25maWdmcy5oIHzC oMKgIDI0ICstCj4gPiDCoDIgZmlsZXMgY2hhbmdlZCwgNTY0IGluc2VydGlvbnMoKyksIDU1MiBk ZWxldGlvbnMoLSkKPiA+IAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9j b25maWdmcy5jCj4gPiBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9jb25maWdmcy5jCj4gPiBpbmRl eCAwYTg1MDQzYTlkZDAuLmNiNmFiMWZjYjhjMSAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS94ZS94ZV9jb25maWdmcy5jCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfY29u ZmlnZnMuYwo+ID4gQEAgLTU4LDEwICs1OCwxMSBAQAo+ID4gwqAgKsKgwqDCoMKgwqDilILCoMKg IOKUlOKUgOKUgCAuLi4KPiA+IMKgICrCoMKgwqDCoMKgOgo+ID4gwqAgKsKgwqDCoMKgwqDilJTi lIDilIAgMDAwMDowMzowMC4wCj4gPiAtICrCoMKgwqDCoMKgwqDCoMKgIOKUnOKUgOKUgCBzdXJ2 aXZhYmlsaXR5X21vZGUKPiA+IC0gKsKgwqDCoMKgwqDCoMKgwqAg4pSc4pSA4pSAIGd0X3R5cGVz X2FsbG93ZWQKPiA+IMKgICrCoMKgwqDCoMKgwqDCoMKgIOKUnOKUgOKUgCBlbmdpbmVzX2FsbG93 ZWQKPiA+IC0gKsKgwqDCoMKgwqDCoMKgwqAg4pSU4pSA4pSAIGVuYWJsZV9wc21pCj4gPiArICrC oMKgwqDCoMKgwqDCoMKgIOKUnOKUgOKUgCBndF90eXBlc19hbGxvd2VkCj4gPiArICrCoMKgwqDC oMKgwqDCoMKgIOKUnOKUgOKUgCBlbmFibGVfbXVsdGlfcXVldWUKPiA+ICsgKsKgwqDCoMKgwqDC oMKgwqAg4pSc4pSA4pSAIGVuYWJsZV9wc21pCj4gPiArICrCoMKgwqDCoMKgwqDCoMKgIOKUlOKU gOKUgCBzdXJ2aXZhYmlsaXR5X21vZGUKPiAKPiBLaW5kIG9mIGEgc3ViamVjdGl2ZSBuaXRwaWNr LCBidXQgSSdkIGhhbmRsZSB0aGUgc3RydWN0dXJlIHNvcnRpbmcKPiBpbmRlcGVuZGVudGx5IGZy b20gdGhlIGRvYy9mdW5jdGlvbiBzb3J0aW5nLsKgIElNTywgdGhpcyB0cmVlCj4gc3RydWN0dXJl Cj4gc2hvdWxkIGVmZmVjdGl2ZWx5IGJlIHdoYXQgdGhlIHVzZXIgZXhwZWN0cyB0byBzZWUgd2hl biBydW5uaW5nICJscyAtCj4gbCIKPiBhbmQgdGhleSB3b24ndCBiZSB0aGlua2luZyBhYm91dCB3 aGF0IGRhdGF0eXBlIHdlJ3JlIHVzaW5nIGludGVybmFsbHkKPiB0bwo+IHN0b3JlIHRoZSB2YWx1 ZSAodTY0IHZzIGJvb2wgdnMgLi4uKS7CoCBTYW1lIGZvciB0aGUgZXhwYW5kZWQKPiBkZXNjcmlw dGlvbnMgYmVsb3cuLi5pZiBJIHdhbnQgdG8gZmluZCAiZW5hYmxlX2ZvbyIgZG9jdW1lbnRhdGlv biwgSQo+IHRoaW5rIGp1c3QgcHVyZSBhbHBoYWJldGljIHNvcnRpbmcgaXMgZWFzaWVzdCB0byBz ZWFyY2ggdGhyb3VnaC7CoCBJJ2QKPiBvbmx5IGluY29ycG9yYXRlIHRoZSBkYXRhdHlwZSBhcyBh IHNvcnRpbmcgZmFjdG9yIGZvciB0aGUgc3RydWN0dXJlCj4gaXRzZWxmLgoKWWVhaCB0aGF0IG1h a2VzIHNlbnNlLiBJIHdhcyB0cnlpbmcgdG8gaGF2ZSBhIGNvbnNpc3RlbnQgdmlldyBhbGwgb3Zl cgp0aGUgZmlsZSwgYnV0IG1heWJlIHRoaXMgaXMgYmVpbmcgYSBsaXR0bGUgdG9vIHN0cmljdCBh bmQgbm90IHVzZXItCmZyaWVuZGx5Li4uCgpJJ2xsIHVwZGF0ZSB0byBhbHBoYWJldGljIGluIHRo ZSBkb2N1bWVudGF0aW9uIHBhcnQuCgo+IAo+IEJUVywgc2hvdWxkIHdlIGFkZCB0aGUgY3R4X3Jl c3RvcmVfKiBlbnRyaWVzIGFuZCB0aGUgU1ItSU9WCj4gc3ViZGlyZWN0b3J5Cj4gdG8gdGhpcyB0 cmVlIHNvIHRoYXQgaXQgYWNjdXJhdGVseSByZWZsZWN0cyB3aGVyZSBldmVyeXRoaW5nIGxpc3Rz IGluCj4gdGhlIGhpZXJhcmNoeT8KClRoZSBTUklPViBzdWJkaXJlY3RvcmllcyBzaG91bGQgYWxy ZWFkeSBiZSB0aGVyZSwgYnV0IEknbGwgYWRkCmV2ZXJ5dGhpbmcgc28gd2UgaGF2ZSBhIGZ1bGwg bGlzdC4gSSBhZ3JlZSBmcm9tIGEgZG9jdW1lbnRhdGlvbgpzdGFuZHBvaW50IHRoaXMgd291bGQg YmUgYmV0dGVyLgoKVGhhbmtzLApTdHVhcnQKCj4gCj4gCj4gTWF0dAo+IAo+ID4gwqAgKgo+ID4g wqAgKiBBZnRlciBjb25maWd1cmluZyB0aGUgYXR0cmlidXRlcyBhcyBwZXIgbmV4dCBzZWN0aW9u LCB0aGUKPiA+IGRldmljZSBjYW4gYmUKPiA+IMKgICogcHJvYmVkIHdpdGg6Ogo+ID4gQEAgLTcz LDEzICs3NCw4MiBAQAo+ID4gwqAgKiBDb25maWd1cmUgQXR0cmlidXRlcwo+ID4gwqAgKiA9PT09 PT09PT09PT09PT09PT09PQo+ID4gwqAgKgo+ID4gLSAqIFN1cnZpdmFiaWxpdHkgbW9kZToKPiA+ IC0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tCj4gPiArCj4gPiArICogQ29udGV4dCByZXN0b3JlIEJC Cj4gPiArICogLS0tLS0tLS0tLS0tLS0tLS0tCj4gPiDCoCAqCj4gPiAtICogRW5hYmxlIHN1cnZp dmFiaWxpdHkgbW9kZSBvbiBzdXBwb3J0ZWQgY2FyZHMuIFRoaXMgc2V0dGluZyBvbmx5Cj4gPiB0 YWtlcwo+ID4gLSAqIGVmZmVjdCB3aGVuIHByb2JpbmcgdGhlIGRldmljZS4gRXhhbXBsZSB0byBl bmFibGUgaXQ6Ogo+ID4gKyAqIEFsbG93IHRvIGV4ZWN1dGUgYSBiYXRjaCBidWZmZXIgZHVyaW5n IGFueSBjb250ZXh0IHN3aXRjaGVzLgo+ID4gV2hlbiB0aGUKPiA+ICsgKiBHUFUgaXMgcmVzdG9y aW5nIHRoZSBjb250ZXh0LCBpdCBleGVjdXRlcyBhZGRpdGlvbmFsIGNvbW1hbmRzLgo+ID4gSXQn cyB1c2VmdWwKPiA+ICsgKiBmb3IgdGVzdGluZyBhZGRpdGlvbmFsIHdvcmthcm91bmRzIGFuZCB2 YWxpZGF0aW5nIGNlcnRhaW4gSFcKPiA+IGJlaGF2aW9yczogaXQncwo+ID4gKyAqIG5vdCBpbnRl bmRlZCBmb3Igbm9ybWFsIGV4ZWN1dGlvbiBhbmQgd2lsbCB0YWludCB0aGUga2VybmVsCj4gPiB3 aXRoIFRBSU5UX1RFU1QKPiA+ICsgKiB3aGVuIHVzZWQuCj4gPiDCoCAqCj4gPiAtICrCoMKgwqDC oMKgIyBlY2hvIDEgPgo+ID4gL3N5cy9rZXJuZWwvY29uZmlnL3hlLzAwMDA6MDM6MDAuMC9zdXJ2 aXZhYmlsaXR5X21vZGUKPiA+ICsgKiBUaGUgc3ludGF4IGFsbG93cyB0byBwYXNzIHN0cmFpZ2h0 IGluc3RydWN0aW9ucyB0byBiZSBleGVjdXRlZAo+ID4gYnkgdGhlIGVuZ2luZQo+ID4gKyAqIGlu IGEgYmF0Y2ggYnVmZmVyIG9yIHNldCBzcGVjaWZpYyByZWdpc3RlcnMuCj4gPiArICoKPiA+ICsg KiAjLiBHZW5lcmljIGluc3RydWN0aW9uOjoKPiA+ICsgKgo+ID4gKyAqwqDCoMKgwqDCoDxlbmdp bmUtY2xhc3M+IGNtZCA8aW5zdHI+IFtbZHdvcmQwXSBbZHdvcmQxXSBbLi4uXV0KPiA+ICsgKgo+ ID4gKyAqICMuIFNpbXBsZSByZWdpc3RlciBzZXR0aW5nOjoKPiA+ICsgKgo+ID4gKyAqwqDCoMKg wqDCoDxlbmdpbmUtY2xhc3M+IHJlZyA8YWRkcmVzcz4gPHZhbHVlPgo+ID4gKyAqCj4gPiArICog Q29tbWFuZHMgYXJlIHNhdmVkIHBlciBlbmdpbmUgY2xhc3M6IGFsbCBpbnN0YW5jZXMgb2YgdGhh dAo+ID4gY2xhc3Mgd2lsbCBleGVjdXRlCj4gPiArICogdGhvc2UgY29tbWFuZHMgZHVyaW5nIGNv bnRleHQgc3dpdGNoLiBUaGUgaW5zdHJ1Y3Rpb24sIGR3b3JkCj4gPiBhcmd1bWVudHMsCj4gPiAr ICogYWRkcmVzc2VzIGFuZCB2YWx1ZXMgYXJlIGluIGhleCBmb3JtYXQgbGlrZSBpbiB0aGUgZXhh bXBsZXMKPiA+IGJlbG93Lgo+ID4gKyAqCj4gPiArICogIy4gRXhlY3V0ZSBhIExSSSBjb21tYW5k IHRvIHdyaXRlIDB4REVBREJFRUYgdG8gcmVnaXN0ZXIgMHg0ZjEwCj4gPiBhZnRlciB0aGUKPiA+ ICsgKsKgwqDCoCBub3JtYWwgY29udGV4dCByZXN0b3JlOjoKPiA+ICsgKgo+ID4gKyAqwqDCoMKg wqDCoCMgZWNobyAncmNzIGNtZCAxMTAwMDAwMSA0RjEwMCBERUFEQkVFRicgXAo+ID4gKyAqwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA+Cj4gPiAvc3lzL2tlcm5lbC9jb25maWcveGUvMDAwMDow MzowMC4wL2N0eF9yZXN0b3JlX3Bvc3RfYmIKPiA+ICsgKgo+ID4gKyAqICMuIEV4ZWN1dGUgYSBM UkkgY29tbWFuZCB0byB3cml0ZSAweERFQURCRUVGIHRvIHJlZ2lzdGVyIDB4NGYxMAo+ID4gYXQg dGhlCj4gPiArICrCoMKgwqAgYmVnaW5uaW5nIG9mIHRoZSBjb250ZXh0IHJlc3RvcmU6Ogo+ID4g KyAqCj4gPiArICrCoMKgwqDCoMKgIyBlY2hvICdyY3MgY21kIDExMDAwMDAxIDRGMTAwIERFQURC RUVGJyBcCj4gPiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoD4KPiA+IC9zeXMva2VybmVs L2NvbmZpZy94ZS8wMDAwOjAzOjAwLjAvY3R4X3Jlc3RvcmVfbWlkX2JiCj4gPiArCj4gPiArICog Iy4gTG9hZCBjZXJ0YWluIHZhbHVlcyBpbiBhIGNvdXBsZSBvZiByZWdpc3RlcnMgKGl0IGNhbiBi ZSB1c2VkCj4gPiBhcyBhIHNpbXBsZXIKPiA+ICsgKsKgwqDCoCBhbHRlcm5hdGl2ZSB0byB0aGUg YGNtZGApIGFjdGlvbjo6Cj4gPiArICoKPiA+ICsgKsKgwqDCoMKgwqAjIGNhdCA+Cj4gPiAvc3lz L2tlcm5lbC9jb25maWcveGUvMDAwMDowMzowMC4wL2N0eF9yZXN0b3JlX3Bvc3RfYmIgPDxFT0YK PiA+ICsgKsKgwqDCoMKgwqByY3MgcmVnIDRGMTAwIERFQURCRUVGCj4gPiArICrCoMKgwqDCoMKg cmNzIHJlZyA0RjEwNCBGRkZGRkZGRgo+ID4gKyAqwqDCoMKgwqDCoEVPRgo+ID4gKyAqCj4gPiAr ICrCoMKgwqAgLi4gbm90ZTo6Cj4gPiArICoKPiA+ICsgKsKgwqDCoMKgwqDCoCBXaGVuIHVzaW5n IG11bHRpcGxlIGxpbmVzLCBtYWtlIHN1cmUgdG8gdXNlIGEgY29tbWFuZAo+ID4gdGhhdCBpcwo+ ID4gKyAqwqDCoMKgwqDCoMKgIGltcGxlbWVudGVkIHdpdGggYSBzaW5nbGUgd3JpdGUgc3lzY2Fs bCwgbGlrZSBIRVJFRE9DLgo+ID4gKyAqCj4gPiArICogQ3VycmVudGx5IHRoaXMgaXMgaW1wbGVt ZW50ZWQgb25seSBmb3IgcG9zdCBhbmQgbWlkIGNvbnRleHQKPiA+IHJlc3RvcmUgYW5kCj4gPiAr ICogdGhlc2UgYXR0cmlidXRlcyBjYW4gb25seSBiZSBzZXQgYmVmb3JlIGJpbmRpbmcgdG8gdGhl IGRldmljZS4KPiA+ICsgKgo+ID4gKyAqIEFsbG93ZWQgZW5naW5lczoKPiA+ICsgKiAtLS0tLS0t LS0tLS0tLS0tCj4gPiArICoKPiA+ICsgKiBBbGxvdyBvbmx5IGEgc2V0IG9mIGVuZ2luZShzKSB0 byBiZSBhdmFpbGFibGUsIGRpc2FibGluZyB0aGUKPiA+IG90aGVyIGVuZ2luZXMKPiA+ICsgKiBl dmVuIGlmIHRoZXkgYXJlIGF2YWlsYWJsZSBpbiBoYXJkd2FyZS4gVGhpcyBpcyBhcHBsaWVkIGFm dGVyCj4gPiBIVyBmdXNlcyBhcmUKPiA+ICsgKiBjb25zaWRlcmVkIG9uIGVhY2ggdGlsZS4gRXhh bXBsZXM6Cj4gPiArICoKPiA+ICsgKiBBbGxvdyBvbmx5IG9uZSByZW5kZXIgYW5kIG9uZSBjb3B5 IGVuZ2luZXMsIG5vdGhpbmcgZWxzZTo6Cj4gPiArICoKPiA+ICsgKsKgwqDCoMKgwqAjIGVjaG8g J3JjczAsYmNzMCcgPgo+ID4gL3N5cy9rZXJuZWwvY29uZmlnL3hlLzAwMDA6MDM6MDAuMC9lbmdp bmVzX2FsbG93ZWQKPiA+ICsgKgo+ID4gKyAqIEFsbG93IG9ubHkgY29tcHV0ZSBlbmdpbmVzIGFu ZCBmaXJzdCBjb3B5IGVuZ2luZTo6Cj4gPiArICoKPiA+ICsgKsKgwqDCoMKgwqAjIGVjaG8gJ2Nj cyosYmNzMCcgPgo+ID4gL3N5cy9rZXJuZWwvY29uZmlnL3hlLzAwMDA6MDM6MDAuMC9lbmdpbmVz X2FsbG93ZWQKPiA+ICsgKgo+ID4gKyAqIE5vdGUgdGhhdCB0aGUgZW5naW5lIG5hbWVzIGFyZSB0 aGUgcGVyLUdUIGhhcmR3YXJlIG5hbWVzLiBPbgo+ID4gbXVsdGktdGlsZQo+ID4gKyAqIHBsYXRm b3Jtcywgd3JpdGluZyBgYHJjczAsYmNzMGBgIHRvIHRoaXMgZmlsZSB3b3VsZCBhbGxvdyB0aGUK PiA+IGZpcnN0IHJlbmRlcgo+ID4gKyAqIGFuZCBjb3B5IGVuZ2luZXMgb24gZWFjaCB0aWxlLgo+ ID4gKyAqCj4gPiArICogVGhlIHJlcXVlc3RlZCBjb25maWd1cmF0aW9uIG1heSBub3QgYmUgc3Vw cG9ydGVkIGJ5IHRoZQo+ID4gcGxhdGZvcm0gYW5kIGRyaXZlcgo+ID4gKyAqIG1heSBmYWlsIHRv IHByb2JlLiBGb3IgZXhhbXBsZTogaWYgYXQgbGVhc3Qgb25lIGNvcHkgZW5naW5lIGlzCj4gPiBl eHBlY3RlZCB0byBiZQo+ID4gKyAqIGF2YWlsYWJsZSBmb3IgbWlncmF0aW9ucywgYnV0IGl0J3Mg ZGlzYWJsZWQuIFRoaXMgaXMgaW50ZW5kZWQKPiA+IGZvciBkZWJ1Z2dpbmcKPiA+ICsgKiBwdXJw b3NlcyBvbmx5Lgo+ID4gwqAgKgo+ID4gwqAgKiBUaGlzIGF0dHJpYnV0ZSBjYW4gb25seSBiZSBz ZXQgYmVmb3JlIGJpbmRpbmcgdG8gdGhlIGRldmljZS4KPiA+IMKgICoKPiA+IEBAIC0xMjEsMjkg KzE5MSwxNSBAQAo+ID4gwqAgKgo+ID4gwqAgKsKgwqDCoMKgwqAjIGVjaG8gJycgPgo+ID4gL3N5 cy9rZXJuZWwvY29uZmlnL3hlLzAwMDA6MDM6MDAuMC9ndF90eXBlc19hbGxvd2VkCj4gPiDCoCAq Cj4gPiAtICogQWxsb3dlZCBlbmdpbmVzOgo+ID4gLSAqIC0tLS0tLS0tLS0tLS0tLS0KPiA+IC0g Kgo+ID4gLSAqIEFsbG93IG9ubHkgYSBzZXQgb2YgZW5naW5lKHMpIHRvIGJlIGF2YWlsYWJsZSwg ZGlzYWJsaW5nIHRoZQo+ID4gb3RoZXIgZW5naW5lcwo+ID4gLSAqIGV2ZW4gaWYgdGhleSBhcmUg YXZhaWxhYmxlIGluIGhhcmR3YXJlLiBUaGlzIGlzIGFwcGxpZWQgYWZ0ZXIKPiA+IEhXIGZ1c2Vz IGFyZQo+ID4gLSAqIGNvbnNpZGVyZWQgb24gZWFjaCB0aWxlLiBFeGFtcGxlczoKPiA+IC0gKgo+ ID4gLSAqIEFsbG93IG9ubHkgb25lIHJlbmRlciBhbmQgb25lIGNvcHkgZW5naW5lcywgbm90aGlu ZyBlbHNlOjoKPiA+IC0gKgo+ID4gLSAqwqDCoMKgwqDCoCMgZWNobyAncmNzMCxiY3MwJyA+Cj4g PiAvc3lzL2tlcm5lbC9jb25maWcveGUvMDAwMDowMzowMC4wL2VuZ2luZXNfYWxsb3dlZAo+ID4g LSAqCj4gPiAtICogQWxsb3cgb25seSBjb21wdXRlIGVuZ2luZXMgYW5kIGZpcnN0IGNvcHkgZW5n aW5lOjoKPiA+IC0gKgo+ID4gLSAqwqDCoMKgwqDCoCMgZWNobyAnY2NzKixiY3MwJyA+Cj4gPiAv c3lzL2tlcm5lbC9jb25maWcveGUvMDAwMDowMzowMC4wL2VuZ2luZXNfYWxsb3dlZAo+ID4gKyAq IEVuYWJsZSBtdWx0aS1xdWV1ZQo+ID4gKyAqIC0tLS0tLS0tLS0tLS0tLS0tLQo+ID4gwqAgKgo+ ID4gLSAqIE5vdGUgdGhhdCB0aGUgZW5naW5lIG5hbWVzIGFyZSB0aGUgcGVyLUdUIGhhcmR3YXJl IG5hbWVzLiBPbgo+ID4gbXVsdGktdGlsZQo+ID4gLSAqIHBsYXRmb3Jtcywgd3JpdGluZyBgYHJj czAsYmNzMGBgIHRvIHRoaXMgZmlsZSB3b3VsZCBhbGxvdyB0aGUKPiA+IGZpcnN0IHJlbmRlcgo+ ID4gLSAqIGFuZCBjb3B5IGVuZ2luZXMgb24gZWFjaCB0aWxlLgo+ID4gKyAqIE11bHRpLXF1ZXVl IHN1cHBvcnQgb24gdGhlIGRldmljZSBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgd2hlcmUKPiA+IHRo ZQo+ID4gKyAqIGhhcmR3YXJlIHN1cHBvcnRzIGl0LiBXcml0aW5nIDAgZm9yY2UtZGlzYWJsZXMg bXVsdGktcXVldWUKPiA+IHN1cHBvcnQ6Cj4gPiArICogbXVsdGktcXVldWUgZXhlYy1xdWV1ZSBn cm91cCBjcmVhdGlvbiB2aWEgaW9jdGwgaXMgcmVmdXNlZCwgYW5kCj4gPiB0aGUKPiA+ICsgKiBH dUMgZmVhdHVyZSBpcyBkaXNhYmxlZDo6Cj4gPiDCoCAqCj4gPiAtICogVGhlIHJlcXVlc3RlZCBj b25maWd1cmF0aW9uIG1heSBub3QgYmUgc3VwcG9ydGVkIGJ5IHRoZQo+ID4gcGxhdGZvcm0gYW5k IGRyaXZlcgo+ID4gLSAqIG1heSBmYWlsIHRvIHByb2JlLiBGb3IgZXhhbXBsZTogaWYgYXQgbGVh c3Qgb25lIGNvcHkgZW5naW5lIGlzCj4gPiBleHBlY3RlZCB0byBiZQo+ID4gLSAqIGF2YWlsYWJs ZSBmb3IgbWlncmF0aW9ucywgYnV0IGl0J3MgZGlzYWJsZWQuIFRoaXMgaXMgaW50ZW5kZWQKPiA+ IGZvciBkZWJ1Z2dpbmcKPiA+IC0gKiBwdXJwb3NlcyBvbmx5Lgo+ID4gKyAqwqDCoMKgwqDCoCMg ZWNobyAwID4KPiA+IC9zeXMva2VybmVsL2NvbmZpZy94ZS8wMDAwOjAzOjAwLjAvZW5hYmxlX211 bHRpX3F1ZXVlCj4gPiDCoCAqCj4gPiDCoCAqIFRoaXMgYXR0cmlidXRlIGNhbiBvbmx5IGJlIHNl dCBiZWZvcmUgYmluZGluZyB0byB0aGUgZGV2aWNlLgo+ID4gwqAgKgo+ID4gQEAgLTE1OSw1NyAr MjE1LDE1IEBACj4gPiDCoCAqCj4gPiDCoCAqIFRoaXMgYXR0cmlidXRlIGNhbiBvbmx5IGJlIHNl dCBiZWZvcmUgYmluZGluZyB0byB0aGUgZGV2aWNlLgo+ID4gwqAgKgo+ID4gLSAqIENvbnRleHQg cmVzdG9yZSBCQgo+ID4gLSAqIC0tLS0tLS0tLS0tLS0tLS0tLQo+ID4gLSAqCj4gPiAtICogQWxs b3cgdG8gZXhlY3V0ZSBhIGJhdGNoIGJ1ZmZlciBkdXJpbmcgYW55IGNvbnRleHQgc3dpdGNoZXMu Cj4gPiBXaGVuIHRoZQo+ID4gLSAqIEdQVSBpcyByZXN0b3JpbmcgdGhlIGNvbnRleHQsIGl0IGV4 ZWN1dGVzIGFkZGl0aW9uYWwgY29tbWFuZHMuCj4gPiBJdCdzIHVzZWZ1bAo+ID4gLSAqIGZvciB0 ZXN0aW5nIGFkZGl0aW9uYWwgd29ya2Fyb3VuZHMgYW5kIHZhbGlkYXRpbmcgY2VydGFpbiBIVwo+ ID4gYmVoYXZpb3JzOiBpdCdzCj4gPiAtICogbm90IGludGVuZGVkIGZvciBub3JtYWwgZXhlY3V0 aW9uIGFuZCB3aWxsIHRhaW50IHRoZSBrZXJuZWwKPiA+IHdpdGggVEFJTlRfVEVTVAo+ID4gLSAq IHdoZW4gdXNlZC4KPiA+IC0gKgo+ID4gLSAqIFRoZSBzeW50YXggYWxsb3dzIHRvIHBhc3Mgc3Ry YWlnaHQgaW5zdHJ1Y3Rpb25zIHRvIGJlIGV4ZWN1dGVkCj4gPiBieSB0aGUgZW5naW5lCj4gPiAt ICogaW4gYSBiYXRjaCBidWZmZXIgb3Igc2V0IHNwZWNpZmljIHJlZ2lzdGVycy4KPiA+IC0gKgo+ ID4gLSAqICMuIEdlbmVyaWMgaW5zdHJ1Y3Rpb246Ogo+ID4gLSAqCj4gPiAtICrCoMKgwqDCoMKg PGVuZ2luZS1jbGFzcz4gY21kIDxpbnN0cj4gW1tkd29yZDBdIFtkd29yZDFdIFsuLi5dXQo+ID4g LSAqCj4gPiAtICogIy4gU2ltcGxlIHJlZ2lzdGVyIHNldHRpbmc6Ogo+ID4gLSAqCj4gPiAtICrC oMKgwqDCoMKgPGVuZ2luZS1jbGFzcz4gcmVnIDxhZGRyZXNzPiA8dmFsdWU+Cj4gPiAtICoKPiA+ IC0gKiBDb21tYW5kcyBhcmUgc2F2ZWQgcGVyIGVuZ2luZSBjbGFzczogYWxsIGluc3RhbmNlcyBv ZiB0aGF0Cj4gPiBjbGFzcyB3aWxsIGV4ZWN1dGUKPiA+IC0gKiB0aG9zZSBjb21tYW5kcyBkdXJp bmcgY29udGV4dCBzd2l0Y2guIFRoZSBpbnN0cnVjdGlvbiwgZHdvcmQKPiA+IGFyZ3VtZW50cywK PiA+IC0gKiBhZGRyZXNzZXMgYW5kIHZhbHVlcyBhcmUgaW4gaGV4IGZvcm1hdCBsaWtlIGluIHRo ZSBleGFtcGxlcwo+ID4gYmVsb3cuCj4gPiAtICoKPiA+IC0gKiAjLiBFeGVjdXRlIGEgTFJJIGNv bW1hbmQgdG8gd3JpdGUgMHhERUFEQkVFRiB0byByZWdpc3RlciAweDRmMTAKPiA+IGFmdGVyIHRo ZQo+ID4gLSAqwqDCoMKgIG5vcm1hbCBjb250ZXh0IHJlc3RvcmU6Ogo+ID4gLSAqCj4gPiAtICrC oMKgwqDCoMKgIyBlY2hvICdyY3MgY21kIDExMDAwMDAxIDRGMTAwIERFQURCRUVGJyBcCj4gPiAt ICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoD4KPiA+IC9zeXMva2VybmVsL2NvbmZpZy94ZS8w MDAwOjAzOjAwLjAvY3R4X3Jlc3RvcmVfcG9zdF9iYgo+ID4gLSAqCj4gPiAtICogIy4gRXhlY3V0 ZSBhIExSSSBjb21tYW5kIHRvIHdyaXRlIDB4REVBREJFRUYgdG8gcmVnaXN0ZXIgMHg0ZjEwCj4g PiBhdCB0aGUKPiA+IC0gKsKgwqDCoCBiZWdpbm5pbmcgb2YgdGhlIGNvbnRleHQgcmVzdG9yZTo6 Cj4gPiAtICoKPiA+IC0gKsKgwqDCoMKgwqAjIGVjaG8gJ3JjcyBjbWQgMTEwMDAwMDEgNEYxMDAg REVBREJFRUYnIFwKPiA+IC0gKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgPgo+ID4gL3N5cy9r ZXJuZWwvY29uZmlnL3hlLzAwMDA6MDM6MDAuMC9jdHhfcmVzdG9yZV9taWRfYmIKPiA+IC0KPiA+ IC0gKiAjLiBMb2FkIGNlcnRhaW4gdmFsdWVzIGluIGEgY291cGxlIG9mIHJlZ2lzdGVycyAoaXQg Y2FuIGJlIHVzZWQKPiA+IGFzIGEgc2ltcGxlcgo+ID4gLSAqwqDCoMKgIGFsdGVybmF0aXZlIHRv IHRoZSBgY21kYCkgYWN0aW9uOjoKPiA+IC0gKgo+ID4gLSAqwqDCoMKgwqDCoCMgY2F0ID4KPiA+ IC9zeXMva2VybmVsL2NvbmZpZy94ZS8wMDAwOjAzOjAwLjAvY3R4X3Jlc3RvcmVfcG9zdF9iYiA8 PEVPRgo+ID4gLSAqwqDCoMKgwqDCoHJjcyByZWcgNEYxMDAgREVBREJFRUYKPiA+IC0gKsKgwqDC oMKgwqByY3MgcmVnIDRGMTA0IEZGRkZGRkZGCj4gPiAtICrCoMKgwqDCoMKgRU9GCj4gPiArICog U3Vydml2YWJpbGl0eSBtb2RlOgo+ID4gKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+IMKgICoK PiA+IC0gKsKgwqDCoCAuLiBub3RlOjoKPiA+ICsgKiBFbmFibGUgc3Vydml2YWJpbGl0eSBtb2Rl IG9uIHN1cHBvcnRlZCBjYXJkcy4gVGhpcyBzZXR0aW5nIG9ubHkKPiA+IHRha2VzCj4gPiArICog ZWZmZWN0IHdoZW4gcHJvYmluZyB0aGUgZGV2aWNlLiBFeGFtcGxlIHRvIGVuYWJsZSBpdDo6Cj4g PiDCoCAqCj4gPiAtICrCoMKgwqDCoMKgwqAgV2hlbiB1c2luZyBtdWx0aXBsZSBsaW5lcywgbWFr ZSBzdXJlIHRvIHVzZSBhIGNvbW1hbmQKPiA+IHRoYXQgaXMKPiA+IC0gKsKgwqDCoMKgwqDCoCBp bXBsZW1lbnRlZCB3aXRoIGEgc2luZ2xlIHdyaXRlIHN5c2NhbGwsIGxpa2UgSEVSRURPQy4KPiA+ ICsgKsKgwqDCoMKgwqAjIGVjaG8gMSA+Cj4gPiAvc3lzL2tlcm5lbC9jb25maWcveGUvMDAwMDow MzowMC4wL3N1cnZpdmFiaWxpdHlfbW9kZQo+ID4gwqAgKgo+ID4gLSAqIEN1cnJlbnRseSB0aGlz IGlzIGltcGxlbWVudGVkIG9ubHkgZm9yIHBvc3QgYW5kIG1pZCBjb250ZXh0Cj4gPiByZXN0b3Jl IGFuZAo+ID4gLSAqIHRoZXNlIGF0dHJpYnV0ZXMgY2FuIG9ubHkgYmUgc2V0IGJlZm9yZSBiaW5k aW5nIHRvIHRoZSBkZXZpY2UuCj4gPiArICogVGhpcyBhdHRyaWJ1dGUgY2FuIG9ubHkgYmUgc2V0 IGJlZm9yZSBiaW5kaW5nIHRvIHRoZSBkZXZpY2UuCj4gPiDCoCAqCj4gPiDCoCAqIE1heCBTUi1J T1YgVmlydHVhbCBGdW5jdGlvbnMKPiA+IMKgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQo+ID4gQEAgLTIzNywxOCArMjUxLDYgQEAKPiA+IMKgICoKPiA+IMKgICogVGhpcyBzZXR0aW5n IG9ubHkgdGFrZXMgZWZmZWN0IHdoZW4gcHJvYmluZyB0aGUgZGV2aWNlLgo+ID4gwqAgKgo+ID4g LSAqIEVuYWJsZSBtdWx0aS1xdWV1ZQo+ID4gLSAqIC0tLS0tLS0tLS0tLS0tLS0tLQo+ID4gLSAq Cj4gPiAtICogTXVsdGktcXVldWUgc3VwcG9ydCBvbiB0aGUgZGV2aWNlIGlzIGVuYWJsZWQgYnkg ZGVmYXVsdCB3aGVyZQo+ID4gdGhlCj4gPiAtICogaGFyZHdhcmUgc3VwcG9ydHMgaXQuIFdyaXRp bmcgMCBmb3JjZS1kaXNhYmxlcyBtdWx0aS1xdWV1ZQo+ID4gc3VwcG9ydDoKPiA+IC0gKiBtdWx0 aS1xdWV1ZSBleGVjLXF1ZXVlIGdyb3VwIGNyZWF0aW9uIHZpYSBpb2N0bCBpcyByZWZ1c2VkLCBh bmQKPiA+IHRoZQo+ID4gLSAqIEd1QyBmZWF0dXJlIGlzIGRpc2FibGVkOjoKPiA+IC0gKgo+ID4g LSAqwqDCoMKgwqDCoCMgZWNobyAwID4KPiA+IC9zeXMva2VybmVsL2NvbmZpZy94ZS8wMDAwOjAz OjAwLjAvZW5hYmxlX211bHRpX3F1ZXVlCj4gPiAtICoKPiA+IC0gKiBUaGlzIGF0dHJpYnV0ZSBj YW4gb25seSBiZSBzZXQgYmVmb3JlIGJpbmRpbmcgdG8gdGhlIGRldmljZS4KPiA+IC0gKgo+ID4g wqAgKiBSZW1vdmUgZGV2aWNlcwo+ID4gwqAgKiA9PT09PT09PT09PT09PQo+ID4gwqAgKgo+ID4g QEAgLTI2NywxNCArMjY5LDE5IEBAIHN0cnVjdCB4ZV9jb25maWdfZ3JvdXBfZGV2aWNlIHsKPiA+ IMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgY29uZmlnX2dyb3VwIGdyb3VwOwo+ID4gwqDCoMKgwqDC oMKgwqDCoHN0cnVjdCBjb25maWdfZ3JvdXAgc3Jpb3Y7Cj4gPiDCoAo+ID4gK8KgwqDCoMKgwqDC oMKgLyoKPiA+ICvCoMKgwqDCoMKgwqDCoCAqIEZpZWxkcyBzb3J0ZWQgYnkgdHlwZSAobGFyZ2Vz dCBmaXJzdCkgdGhlbiBuYW1lOiBzdHJ1Y3QKPiA+IGFycmF5cywKPiA+ICvCoMKgwqDCoMKgwqDC oCAqIHU2NCwgdTMyL3Vuc2lnbmVkIGludCwgdTgsIGJvb2wsIHN1Yi1zdHJ1Y3RzIGxhc3QuCj4g PiBXaXRoaW4gZWFjaAo+ID4gK8KgwqDCoMKgwqDCoMKgICogdHlwZSwgZW50cmllcyBhcmUgc29y dGVkIGFscGhhYmV0aWNhbGx5Lgo+ID4gK8KgwqDCoMKgwqDCoMKgICovCj4gPiDCoMKgwqDCoMKg wqDCoMKgc3RydWN0IHhlX2NvbmZpZ19kZXZpY2Ugewo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHU2NCBndF90eXBlc19hbGxvd2VkOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHU2NCBlbmdpbmVzX2FsbG93ZWQ7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgc3RydWN0IHdhX2JiCj4gPiBjdHhfcmVzdG9yZV9wb3N0X2JiW1hFX0VOR0lORV9D TEFTU19NQVhdOwo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgd2Ff YmIKPiA+IGN0eF9yZXN0b3JlX21pZF9iYltYRV9FTkdJTkVfQ0xBU1NfTUFYXTsKPiA+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBib29sIHN1cnZpdmFiaWxpdHlfbW9kZTsKPiA+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBib29sIGVuYWJsZV9wc21pOwo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCB3YV9iYgo+ID4gY3R4X3Jlc3RvcmVfcG9z dF9iYltYRV9FTkdJTkVfQ0xBU1NfTUFYXTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB1NjQgZW5naW5lc19hbGxvd2VkOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHU2NCBndF90eXBlc19hbGxvd2VkOwo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBib29sIGVuYWJsZV9tdWx0aV9xdWV1ZTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBib29sIGVuYWJsZV9wc21pOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGJvb2wgc3Vydml2YWJpbGl0eV9tb2RlOwo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBzdHJ1Y3Qgewo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgdW5zaWduZWQgaW50IG1heF92ZnM7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBib29sIGFkbWluX29ubHlfcGY7Cj4gPiBAQCAt MjkwLDExICsyOTcsMTEgQEAgc3RydWN0IHhlX2NvbmZpZ19ncm91cF9kZXZpY2Ugewo+ID4gwqB9 Owo+ID4gwqAKPiA+IMKgc3RhdGljIGNvbnN0IHN0cnVjdCB4ZV9jb25maWdfZGV2aWNlIGRldmlj ZV9kZWZhdWx0cyA9IHsKPiA+IC3CoMKgwqDCoMKgwqDCoC5ndF90eXBlc19hbGxvd2VkID0gVTY0 X01BWCwKPiA+IMKgwqDCoMKgwqDCoMKgwqAuZW5naW5lc19hbGxvd2VkID0gVTY0X01BWCwKPiA+ IC3CoMKgwqDCoMKgwqDCoC5zdXJ2aXZhYmlsaXR5X21vZGUgPSBmYWxzZSwKPiA+IC3CoMKgwqDC oMKgwqDCoC5lbmFibGVfcHNtaSA9IGZhbHNlLAo+ID4gK8KgwqDCoMKgwqDCoMKgLmd0X3R5cGVz X2FsbG93ZWQgPSBVNjRfTUFYLAo+ID4gwqDCoMKgwqDCoMKgwqDCoC5lbmFibGVfbXVsdGlfcXVl dWUgPSB0cnVlLAo+ID4gK8KgwqDCoMKgwqDCoMKgLmVuYWJsZV9wc21pID0gZmFsc2UsCj4gPiAr wqDCoMKgwqDCoMKgwqAuc3Vydml2YWJpbGl0eV9tb2RlID0gZmFsc2UsCj4gPiDCoMKgwqDCoMKg wqDCoMKgLnNyaW92ID0gewo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAubWF4 X3ZmcyA9IFhFX0RFRkFVTFRfTUFYX1ZGUywKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgLmFkbWluX29ubHlfcGYgPSBYRV9ERUZBVUxUX0FETUlOX09OTFlfUEYsCj4gPiBAQCAt MzcxLDI0NyArMzc4LDYwIEBAIHN0YXRpYyBib29sIGlzX2JvdW5kKHN0cnVjdAo+ID4geGVfY29u ZmlnX2dyb3VwX2RldmljZSAqZGV2KQo+ID4gwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4g PiDCoH0KPiA+IMKgCj4gPiAtc3RhdGljIHNzaXplX3Qgc3Vydml2YWJpbGl0eV9tb2RlX3Nob3co c3RydWN0IGNvbmZpZ19pdGVtICppdGVtLAo+ID4gY2hhciAqcGFnZSkKPiA+IC17Cj4gPiAtwqDC oMKgwqDCoMKgwqBzdHJ1Y3QgeGVfY29uZmlnX2RldmljZSAqZGV2ID0gdG9feGVfY29uZmlnX2Rl dmljZShpdGVtKTsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoHJldHVybiBzcHJpbnRmKHBhZ2Us ICIlZFxuIiwgZGV2LT5zdXJ2aXZhYmlsaXR5X21vZGUpOwo+ID4gLX0KPiA+ICtzdGF0aWMgc3Ry dWN0IHhlX2NvbmZpZ19ncm91cF9kZXZpY2UKPiA+ICpmaW5kX3hlX2NvbmZpZ19ncm91cF9kZXZp Y2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwo+ID4gwqAKPiA+IC1zdGF0aWMgc3NpemVfdCBzdXJ2 aXZhYmlsaXR5X21vZGVfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLAo+ID4gY29uc3Qg Y2hhciAqcGFnZSwgc2l6ZV90IGxlbikKPiA+ICsvKioKPiA+ICsgKiB4ZV9jb25maWdmc19nZXRf Y3R4X3Jlc3RvcmVfbWlkX2JiIC0gZ2V0IGNvbmZpZ2ZzCj4gPiBjdHhfcmVzdG9yZV9taWRfYmIg c2V0dGluZwo+ID4gKyAqIEBwZGV2OiBwY2kgZGV2aWNlCj4gPiArICogQGNsYXNzOiBodyBlbmdp bmUgY2xhc3MKPiA+ICsgKiBAY3M6IHBvaW50ZXIgdG8gdGhlIGJiIHRvIHVzZSAtIG9ubHkgdmFs aWQgZHVyaW5nIHByb2JlCj4gPiArICoKPiA+ICsgKiBSZXR1cm46IE51bWJlciBvZiBkd29yZHMg dXNlZCBpbiB0aGUgbWlkX2N0eF9yZXN0b3JlIHNldHRpbmcgaW4KPiA+IGNvbmZpZ2ZzCj4gPiAr ICovCj4gPiArdTMyIHhlX2NvbmZpZ2ZzX2dldF9jdHhfcmVzdG9yZV9taWRfYmIoc3RydWN0IHBj aV9kZXYgKnBkZXYsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZW51bSB4ZV9lbmdpbmVfY2xhc3Mg Y2xhc3MsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3QgdTMyICoqY3MpCj4gPiDCoHsKPiA+ IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9jb25maWdfZ3JvdXBfZGV2aWNlICpkZXYgPQo+ID4g dG9feGVfY29uZmlnX2dyb3VwX2RldmljZShpdGVtKTsKPiA+IC3CoMKgwqDCoMKgwqDCoGJvb2wg c3Vydml2YWJpbGl0eV9tb2RlOwo+ID4gLcKgwqDCoMKgwqDCoMKgaW50IHJldDsKPiA+ICvCoMKg wqDCoMKgwqDCoHN0cnVjdCB4ZV9jb25maWdfZ3JvdXBfZGV2aWNlICpkZXYgPQo+ID4gZmluZF94 ZV9jb25maWdfZ3JvdXBfZGV2aWNlKHBkZXYpOwo+ID4gK8KgwqDCoMKgwqDCoMKgdTMyIGxlbjsK PiA+IMKgCj4gPiAtwqDCoMKgwqDCoMKgwqByZXQgPSBrc3RydG9ib29sKHBhZ2UsICZzdXJ2aXZh YmlsaXR5X21vZGUpOwo+ID4gLcKgwqDCoMKgwqDCoMKgaWYgKHJldCkKPiA+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCFk ZXYpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gPiDCoAo+ ID4gLcKgwqDCoMKgwqDCoMKgZ3VhcmQobXV0ZXgpKCZkZXYtPmxvY2spOwo+ID4gLcKgwqDCoMKg wqDCoMKgaWYgKGlzX2JvdW5kKGRldikpCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmV0dXJuIC1FQlVTWTsKPiA+ICvCoMKgwqDCoMKgwqDCoHNjb3BlZF9ndWFyZChtdXRleCwg JmRldi0+bG9jaykgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChjcykK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKmNzID0g ZGV2LQo+ID4gPmNvbmZpZy5jdHhfcmVzdG9yZV9taWRfYmJbY2xhc3NdLmNzOwo+ID4gwqAKPiA+ IC3CoMKgwqDCoMKgwqDCoGRldi0+Y29uZmlnLnN1cnZpdmFiaWxpdHlfbW9kZSA9IHN1cnZpdmFi aWxpdHlfbW9kZTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsZW4gPSBkZXYt PmNvbmZpZy5jdHhfcmVzdG9yZV9taWRfYmJbY2xhc3NdLmxlbjsKPiA+ICvCoMKgwqDCoMKgwqDC oH0KPiA+ICvCoMKgwqDCoMKgwqDCoGNvbmZpZ19ncm91cF9wdXQoJmRldi0+Z3JvdXApOwo+ID4g wqAKPiA+IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gbGVuOwo+ID4gwqB9Cj4gPiDCoAo+ID4gLXN0 YXRpYyBzc2l6ZV90IGd0X3R5cGVzX2FsbG93ZWRfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0 ZW0sCj4gPiBjaGFyICpwYWdlKQo+ID4gKy8qKgo+ID4gKyAqIHhlX2NvbmZpZ2ZzX2dldF9jdHhf cmVzdG9yZV9wb3N0X2JiIC0gZ2V0IGNvbmZpZ2ZzCj4gPiBjdHhfcmVzdG9yZV9wb3N0X2JiIHNl dHRpbmcKPiA+ICsgKiBAcGRldjogcGNpIGRldmljZQo+ID4gKyAqIEBjbGFzczogaHcgZW5naW5l IGNsYXNzCj4gPiArICogQGNzOiBwb2ludGVyIHRvIHRoZSBiYiB0byB1c2UgLSBvbmx5IHZhbGlk IGR1cmluZyBwcm9iZQo+ID4gKyAqCj4gPiArICogUmV0dXJuOiBOdW1iZXIgb2YgZHdvcmRzIHVz ZWQgaW4gdGhlIHBvc3RfY3R4X3Jlc3RvcmUgc2V0dGluZwo+ID4gaW4gY29uZmlnZnMKPiA+ICsg Ki8KPiA+ICt1MzIgeGVfY29uZmlnZnNfZ2V0X2N0eF9yZXN0b3JlX3Bvc3RfYmIoc3RydWN0IHBj aV9kZXYgKnBkZXYsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZW51bSB4ZV9lbmdpbmVfY2xh c3MgY2xhc3MsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29uc3QgdTMyICoqY3MpCj4gPiDC oHsKPiA+IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9jb25maWdfZGV2aWNlICpkZXYgPSB0b194 ZV9jb25maWdfZGV2aWNlKGl0ZW0pOwo+ID4gLcKgwqDCoMKgwqDCoMKgY2hhciAqcCA9IHBhZ2U7 Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEFSUkFZX1NJ WkUoZ3RfdHlwZXMpOyBpKyspCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYg KGRldi0+Z3RfdHlwZXNfYWxsb3dlZCAmCj4gPiBCSVRfVUxMKGd0X3R5cGVzW2ldLnR5cGUpKQo+ ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwICs9IHNw cmludGYocCwgIiVzXG4iLCBndF90eXBlc1tpXS5uYW1lKTsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0 cnVjdCB4ZV9jb25maWdfZ3JvdXBfZGV2aWNlICpkZXYgPQo+ID4gZmluZF94ZV9jb25maWdfZ3Jv dXBfZGV2aWNlKHBkZXYpOwo+ID4gK8KgwqDCoMKgwqDCoMKgdTMyIGxlbjsKPiA+IMKgCj4gPiAt wqDCoMKgwqDCoMKgwqByZXR1cm4gcCAtIHBhZ2U7Cj4gPiAtfQo+ID4gK8KgwqDCoMKgwqDCoMKg aWYgKCFkZXYpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4g PiDCoAo+ID4gLXN0YXRpYyBzc2l6ZV90IGd0X3R5cGVzX2FsbG93ZWRfc3RvcmUoc3RydWN0IGNv bmZpZ19pdGVtICppdGVtLAo+ID4gY29uc3QgY2hhciAqcGFnZSwKPiA+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgc2l6ZV90IGxlbikKPiA+IC17Cj4gPiAtwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfY29uZmln X2dyb3VwX2RldmljZSAqZGV2ID0KPiA+IHRvX3hlX2NvbmZpZ19ncm91cF9kZXZpY2UoaXRlbSk7 Cj4gPiAtwqDCoMKgwqDCoMKgwqBjaGFyICpidWYgX19mcmVlKGtmcmVlKSA9IGtzdHJkdXAocGFn ZSwgR0ZQX0tFUk5FTCk7Cj4gPiAtwqDCoMKgwqDCoMKgwqBjaGFyICpwID0gYnVmOwo+ID4gLcKg wqDCoMKgwqDCoMKgdTY0IHR5cGVtYXNrID0gMDsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoGlm ICghYnVmKQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRU5PTUVN Owo+ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKgd2hpbGUgKHApIHsKPiA+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBjaGFyICp0eXBlbmFtZSA9IHN0cnNlcCgmcCwgIixcbiIpOwo+ID4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJvb2wgbWF0Y2hlZCA9IGZhbHNlOwo+ID4g LQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICh0eXBlbmFtZVswXSA9PSAn XDAnKQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBj b250aW51ZTsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmb3IgKHNp emVfdCBpID0gMDsgaSA8IEFSUkFZX1NJWkUoZ3RfdHlwZXMpOyBpKyspIHsKPiA+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHN0cmNtcCh0eXBlbmFt ZSwgZ3RfdHlwZXNbaV0ubmFtZSkgPT0KPiA+IDApIHsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHR5cGVtYXNrIHw9IEJJ VChndF90eXBlc1tpXS50eXBlKTsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1hdGNoZWQgPSB0cnVlOwo+ID4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg YnJlYWs7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oH0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gPiAtCj4gPiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFtYXRjaGVkKQo+ID4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsKPiA+IC3CoMKg wqDCoMKgwqDCoH0KPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoGd1YXJkKG11dGV4KSgmZGV2LT5s b2NrKTsKPiA+IC3CoMKgwqDCoMKgwqDCoGlmIChpc19ib3VuZChkZXYpKQo+ID4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUJVU1k7Cj4gPiAtCj4gPiAtwqDCoMKgwqDC oMKgwqBkZXYtPmNvbmZpZy5ndF90eXBlc19hbGxvd2VkID0gdHlwZW1hc2s7Cj4gPiAtCj4gPiAt wqDCoMKgwqDCoMKgwqByZXR1cm4gbGVuOwo+ID4gLX0KPiA+IC0KPiA+IC1zdGF0aWMgc3NpemVf dCBlbmdpbmVzX2FsbG93ZWRfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIKPiA+ ICpwYWdlKQo+ID4gLXsKPiA+IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9jb25maWdfZGV2aWNl ICpkZXYgPSB0b194ZV9jb25maWdfZGV2aWNlKGl0ZW0pOwo+ID4gLcKgwqDCoMKgwqDCoMKgY2hh ciAqcCA9IHBhZ2U7Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqBmb3IgKHNpemVfdCBpID0gMDsg aSA8IEFSUkFZX1NJWkUoZW5naW5lX2luZm8pOyBpKyspIHsKPiA+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqB1NjQgbWFzayA9IGVuZ2luZV9pbmZvW2ldLm1hc2s7Cj4gPiAtCj4gPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKChkZXYtPmVuZ2luZXNfYWxsb3dlZCAm IG1hc2spID09IG1hc2spIHsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcCArPSBzcHJpbnRmKHAsICIlcypcbiIsCj4gPiBlbmdpbmVfaW5mb1tpXS5j bHMpOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0gZWxzZSBpZiAobWFzayAm IGRldi0+ZW5naW5lc19hbGxvd2VkKSB7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHUxNiBiaXQwID0gX19mZnM2NChtYXNrKSwgYml0Owo+ID4gLQo+ ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtYXNrICY9 IGRldi0+ZW5naW5lc19hbGxvd2VkOwo+ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmb3JfZWFjaF9zZXRfYml0KGJpdCwgKGNvbnN0IHVuc2ln bmVkIGxvbmcKPiA+ICopJm1hc2ssIDY0KQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcCArPSBzcHJpbnRmKHAsICIlcyV1 XG4iLAo+ID4gZW5naW5lX2luZm9baV0uY2xzLAo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGJpdCAtIGJpdDApOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0K PiA+IC3CoMKgwqDCoMKgwqDCoH0KPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoHJldHVybiBwIC0g cGFnZTsKPiA+IC19Cj4gPiAtCj4gPiAtLyoKPiA+IC0gKiBMb29rdXAgZW5naW5lX2luZm8uIElm IEBtYXNrIGlzIG5vdCBOVUxMLCByZWR1Y2UgdGhlIG1hc2sKPiA+IGFjY29yZGluZyB0byB0aGUK PiA+IC0gKiBpbnN0YW5jZSBpbiBAcGF0dGVybi4KPiA+IC0gKgo+ID4gLSAqIEV4YW1wbGVzIG9m IGlucHV0czoKPiA+IC0gKiAtIGxvb2t1cF9lbmdpbmVfaW5mbygicmNzMCIsICZtYXNrKTogcmV0 dXJuICJyY3MiIGVudHJ5IGZyb20KPiA+IEBlbmdpbmVfaW5mbyBhbmQKPiA+IC0gKsKgwqAgbWFz ayA9PSBCSVRfVUxMKFhFX0hXX0VOR0lORV9SQ1MwKQo+ID4gLSAqIC0gbG9va3VwX2VuZ2luZV9p bmZvKCJyY3MqIiwgJm1hc2spOiByZXR1cm4gInJjcyIgZW50cnkgZnJvbQo+ID4gQGVuZ2luZV9p bmZvIGFuZAo+ID4gLSAqwqDCoCBtYXNrID09IFhFX0hXX0VOR0lORV9SQ1NfTUFTSwo+ID4gLSAq IC0gbG9va3VwX2VuZ2luZV9pbmZvKCJyY3MiLCBOVUxMKTogcmV0dXJuICJyY3MiIGVudHJ5IGZy b20KPiA+IEBlbmdpbmVfaW5mbwo+ID4gLSAqLwo+ID4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZW5n aW5lX2luZm8gKmxvb2t1cF9lbmdpbmVfaW5mbyhjb25zdCBjaGFyCj4gPiAqcGF0dGVybiwgdTY0 ICptYXNrKQo+ID4gLXsKPiA+IC3CoMKgwqDCoMKgwqDCoGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg QVJSQVlfU0laRShlbmdpbmVfaW5mbyk7IGkrKykgewo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHU4IGluc3RhbmNlOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHUxNiBiaXQ7Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFz dHJfaGFzX3ByZWZpeChwYXR0ZXJuLCBlbmdpbmVfaW5mb1tpXS5jbHMpKQo+ID4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb250aW51ZTsKPiA+IC0KPiA+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwYXR0ZXJuICs9IHN0cmxlbihlbmdpbmVf aW5mb1tpXS5jbHMpOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghbWFz aykKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0 dXJuICpwYXR0ZXJuID8gTlVMTCA6ICZlbmdpbmVfaW5mb1tpXTsKPiA+IC0KPiA+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIXN0cmNtcChwYXR0ZXJuLCAiKiIpKSB7Cj4gPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCptYXNrID0gZW5n aW5lX2luZm9baV0ubWFzazsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmV0dXJuICZlbmdpbmVfaW5mb1tpXTsKPiA+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqB9Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg aWYgKGtzdHJ0b3U4KHBhdHRlcm4sIDEwLCAmaW5zdGFuY2UpKQo+ID4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gTlVMTDsKPiA+IC0KPiA+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBiaXQgPSBfX2ZmczY0KGVuZ2luZV9pbmZvW2ld Lm1hc2spICsgaW5zdGFuY2U7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYg KGJpdCA+PSBmbHM2NChlbmdpbmVfaW5mb1tpXS5tYXNrKSkKPiA+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIE5VTEw7Cj4gPiAtCj4gPiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKm1hc2sgPSBCSVRfVUxMKGJpdCk7Cj4gPiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuICZlbmdpbmVfaW5mb1tpXTsKPiA+IC3C oMKgwqDCoMKgwqDCoH0KPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoHJldHVybiBOVUxMOwo+ID4g LX0KPiA+IC0KPiA+IC1zdGF0aWMgaW50IHBhcnNlX2VuZ2luZShjb25zdCBjaGFyICpzLCBjb25z dCBjaGFyICplbmRfY2hhcnMsIHU2NAo+ID4gKm1hc2ssCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbnN0IHN0cnVjdCBlbmdpbmVfaW5mbyAqKnBp bmZvKQo+ID4gLXsKPiA+IC3CoMKgwqDCoMKgwqDCoGNoYXIgYnVmW01BWF9FTkdJTkVfQ0xBU1Nf Q0hBUlMgKyBNQVhfRU5HSU5FX0lOU1RBTkNFX0NIQVJTCj4gPiArIDFdOwo+ID4gLcKgwqDCoMKg wqDCoMKgY29uc3Qgc3RydWN0IGVuZ2luZV9pbmZvICppbmZvOwo+ID4gLcKgwqDCoMKgwqDCoMKg c2l6ZV90IGxlbjsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoGxlbiA9IHN0cmNzcG4ocywgZW5k X2NoYXJzKTsKPiA+IC3CoMKgwqDCoMKgwqDCoGlmIChsZW4gPj0gc2l6ZW9mKGJ1ZikpCj4gPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FSU5WQUw7Cj4gPiAtCj4gPiAt wqDCoMKgwqDCoMKgwqBtZW1jcHkoYnVmLCBzLCBsZW4pOwo+ID4gLcKgwqDCoMKgwqDCoMKgYnVm W2xlbl0gPSAnXDAnOwo+ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKgaW5mbyA9IGxvb2t1cF9lbmdp bmVfaW5mbyhidWYsIG1hc2spOwo+ID4gLcKgwqDCoMKgwqDCoMKgaWYgKCFpbmZvKQo+ID4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRU5PRU5UOwo+ID4gLQo+ID4gLcKg wqDCoMKgwqDCoMKgaWYgKHBpbmZvKQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCpwaW5mbyA9IGluZm87Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqByZXR1cm4gbGVuOwo+ID4g LX0KPiA+IC0KPiA+IC1zdGF0aWMgc3NpemVfdCBlbmdpbmVzX2FsbG93ZWRfc3RvcmUoc3RydWN0 IGNvbmZpZ19pdGVtICppdGVtLAo+ID4gY29uc3QgY2hhciAqcGFnZSwKPiA+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHNpemVfdCBsZW4pCj4gPiAtewo+ID4gLcKgwqDCoMKgwqDCoMKgc3RydWN0IHhlX2NvbmZp Z19ncm91cF9kZXZpY2UgKmRldiA9Cj4gPiB0b194ZV9jb25maWdfZ3JvdXBfZGV2aWNlKGl0ZW0p Owo+ID4gLcKgwqDCoMKgwqDCoMKgc3NpemVfdCBwYXR0ZXJubGVuLCBwOwo+ID4gLcKgwqDCoMKg wqDCoMKgdTY0IG1hc2ssIHZhbCA9IDA7Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqBmb3IgKHAg PSAwOyBwIDwgbGVuOyBwICs9IHBhdHRlcm5sZW4gKyAxKSB7Cj4gPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcGF0dGVybmxlbiA9IHBhcnNlX2VuZ2luZShwYWdlICsgcCwgIixcbiIs ICZtYXNrLAo+ID4gTlVMTCk7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYg KHBhdHRlcm5sZW4gPCAwKQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqB2YWwgfD0gbWFzazsKPiA+ICvCoMKgwqDCoMKgwqDCoHNjb3BlZF9ndWFyZCht dXRleCwgJmRldi0+bG9jaykgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCpj cyA9IGRldi0+Y29uZmlnLmN0eF9yZXN0b3JlX3Bvc3RfYmJbY2xhc3NdLmNzOwo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxlbiA9IGRldi0+Y29uZmlnLmN0eF9yZXN0b3JlX3Bv c3RfYmJbY2xhc3NdLmxlbjsKPiA+IMKgwqDCoMKgwqDCoMKgwqB9Cj4gPiAtCj4gPiAtwqDCoMKg wqDCoMKgwqBndWFyZChtdXRleCkoJmRldi0+bG9jayk7Cj4gPiAtwqDCoMKgwqDCoMKgwqBpZiAo aXNfYm91bmQoZGV2KSkKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4g LUVCVVNZOwo+ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKgZGV2LT5jb25maWcuZW5naW5lc19hbGxv d2VkID0gdmFsOwo+ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKgcmV0dXJuIGxlbjsKPiA+IC19Cj4g PiAtCj4gPiAtc3RhdGljIHNzaXplX3QgZW5hYmxlX3BzbWlfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0 ZW0gKml0ZW0sIGNoYXIKPiA+ICpwYWdlKQo+ID4gLXsKPiA+IC3CoMKgwqDCoMKgwqDCoHN0cnVj dCB4ZV9jb25maWdfZGV2aWNlICpkZXYgPSB0b194ZV9jb25maWdfZGV2aWNlKGl0ZW0pOwo+ID4g LQo+ID4gLcKgwqDCoMKgwqDCoMKgcmV0dXJuIHNwcmludGYocGFnZSwgIiVkXG4iLCBkZXYtPmVu YWJsZV9wc21pKTsKPiA+IC19Cj4gPiAtCj4gPiAtc3RhdGljIHNzaXplX3QgZW5hYmxlX3BzbWlf c3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdAo+ID4gY2hhciAqcGFnZSwgc2l6 ZV90IGxlbikKPiA+IC17Cj4gPiAtwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfY29uZmlnX2dyb3Vw X2RldmljZSAqZGV2ID0KPiA+IHRvX3hlX2NvbmZpZ19ncm91cF9kZXZpY2UoaXRlbSk7Cj4gPiAt wqDCoMKgwqDCoMKgwqBib29sIHZhbDsKPiA+IC3CoMKgwqDCoMKgwqDCoGludCByZXQ7Cj4gPiAt Cj4gPiAtwqDCoMKgwqDCoMKgwqByZXQgPSBrc3RydG9ib29sKHBhZ2UsICZ2YWwpOwo+ID4gLcKg wqDCoMKgwqDCoMKgaWYgKHJldCkKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXR1cm4gcmV0Owo+ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKgZ3VhcmQobXV0ZXgpKCZkZXYtPmxv Y2spOwo+ID4gLcKgwqDCoMKgwqDCoMKgaWYgKGlzX2JvdW5kKGRldikpCj4gPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FQlVTWTsKPiA+IC0KPiA+IC3CoMKgwqDCoMKg wqDCoGRldi0+Y29uZmlnLmVuYWJsZV9wc21pID0gdmFsOwo+ID4gLQo+ID4gLcKgwqDCoMKgwqDC oMKgcmV0dXJuIGxlbjsKPiA+IC19Cj4gPiAtCj4gPiAtc3RhdGljIHNzaXplX3QgZW5hYmxlX211 bHRpX3F1ZXVlX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLAo+ID4gY2hhciAqcGFnZSkK PiA+IC17Cj4gPiAtwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfY29uZmlnX2RldmljZSAqZGV2ID0g dG9feGVfY29uZmlnX2RldmljZShpdGVtKTsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoHJldHVy biBzcHJpbnRmKHBhZ2UsICIlZFxuIiwgZGV2LT5lbmFibGVfbXVsdGlfcXVldWUpOwo+ID4gLX0K PiA+IC0KPiA+IC1zdGF0aWMgc3NpemVfdCBlbmFibGVfbXVsdGlfcXVldWVfc3RvcmUoc3RydWN0 IGNvbmZpZ19pdGVtICppdGVtLAo+ID4gY29uc3QgY2hhciAqcGFnZSwKPiA+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBzaXplX3QgbGVuKQo+ID4gLXsKPiA+IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCB4 ZV9jb25maWdfZ3JvdXBfZGV2aWNlICpkZXYgPQo+ID4gdG9feGVfY29uZmlnX2dyb3VwX2Rldmlj ZShpdGVtKTsKPiA+IC3CoMKgwqDCoMKgwqDCoGJvb2wgdmFsOwo+ID4gLcKgwqDCoMKgwqDCoMKg aW50IHJldDsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoHJldCA9IGtzdHJ0b2Jvb2wocGFnZSwg JnZhbCk7Cj4gPiAtwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqBndWFyZCht dXRleCkoJmRldi0+bG9jayk7Cj4gPiAtwqDCoMKgwqDCoMKgwqBpZiAoaXNfYm91bmQoZGV2KSkK PiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVCVVNZOwo+ID4gLQo+ ID4gLcKgwqDCoMKgwqDCoMKgZGV2LT5jb25maWcuZW5hYmxlX211bHRpX3F1ZXVlID0gdmFsOwo+ ID4gK8KgwqDCoMKgwqDCoMKgY29uZmlnX2dyb3VwX3B1dCgmZGV2LT5ncm91cCk7Cj4gPiDCoAo+ ID4gwqDCoMKgwqDCoMKgwqDCoHJldHVybiBsZW47Cj4gPiDCoH0KPiA+IEBAIC03MTgsNiArNTM4 LDkgQEAgc3RhdGljIHNzaXplX3QgcGFyc2VfaGV4KGNvbnN0IGNoYXIgKmxpbmUsIHUzMgo+ID4g KnB2YWwpCj4gPiDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHAgLSBsaW5lOwo+ID4gwqB9Cj4gPiDC oAo+ID4gK3N0YXRpYyBpbnQgcGFyc2VfZW5naW5lKGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIg KmVuZF9jaGFycywgdTY0Cj4gPiAqbWFzaywKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgY29uc3Qgc3RydWN0IGVuZ2luZV9pbmZvICoqcGluZm8pOwo+ ID4gKwo+ID4gwqAvKgo+ID4gwqAgKiBQYXJzZSBsaW5lcyB3aXRoIHRoZSBmb3JtYXQKPiA+IMKg ICoKPiA+IEBAIC04MDIsNzAgKzYyNSw0MzkgQEAgc3RhdGljIHNzaXplX3Qgd2FfYmJfc3RvcmUo c3RydWN0IHdhX2JiCj4gPiB3YV9iYltzdGF0aWMgWEVfRU5HSU5FX0NMQVNTX01BWF0sCj4gPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBjb3VudDsKPiA+IMKgCj4gPiDC oMKgwqDCoMKgwqDCoMKgZ3VhcmQobXV0ZXgpKCZkZXYtPmxvY2spOwo+ID4gLQo+ID4gKwo+ID4g K8KgwqDCoMKgwqDCoMKgaWYgKGlzX2JvdW5kKGRldikpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmV0dXJuIC1FQlVTWTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoC8qCj4g PiArwqDCoMKgwqDCoMKgwqAgKiAyLiBBbGxvY2F0ZSBhIHUzMiBhcnJheSBhbmQgc2V0IHRoZSBw b2ludGVycyB0byB0aGUKPiA+IHJpZ2h0IHBvc2l0aW9ucwo+ID4gK8KgwqDCoMKgwqDCoMKgICog YWNjb3JkaW5nIHRvIHRoZSBsZW5ndGggb2YgZWFjaCBjbGFzcycgd2FfYmIKPiA+ICvCoMKgwqDC oMKgwqDCoCAqLwo+ID4gK8KgwqDCoMKgwqDCoMKgdG1wID0ga3JlYWxsb2Mod2FfYmJbMF0uY3Ms IGNvdW50ICogc2l6ZW9mKHUzMiksCj4gPiBHRlBfS0VSTkVMKTsKPiA+ICvCoMKgwqDCoMKgwqDC oGlmICghdG1wKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRU5P TUVNOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCFjb3VudCkgewo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1lbXNldCh3YV9iYiwgMCwgc2l6ZW9mKHRtcF93YV9iYikp Owo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBsZW47Cj4gPiArwqDC oMKgwqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBmb3IgKGNsYXNzID0gMCwgY291 bnQgPSAwOyBjbGFzcyA8IFhFX0VOR0lORV9DTEFTU19NQVg7Cj4gPiArK2NsYXNzKSB7Cj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdG1wX3dhX2JiW2NsYXNzXS5jcyA9IHRtcCAr IGNvdW50Owo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvdW50ICs9IHRtcF93 YV9iYltjbGFzc10ubGVuOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRtcF93 YV9iYltjbGFzc10ubGVuID0gMDsKPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKg wqDCoMKgwqDCoC8qIDMuIFBhcnNlIHdhX2JiIGxpbmVzIGFnYWluLCB0aGlzIHRpbWUgc2F2aW5n IHRoZSB2YWx1ZXMKPiA+ICovCj4gPiArwqDCoMKgwqDCoMKgwqBjb3VudCA9IHBhcnNlX3dhX2Ji X2xpbmVzKHBhZ2UsIHRtcF93YV9iYik7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoY291bnQgPCAw KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBjb3VudDsKPiA+ICsK PiA+ICvCoMKgwqDCoMKgwqDCoG1lbWNweSh3YV9iYiwgdG1wX3dhX2JiLCBzaXplb2YodG1wX3dh X2JiKSk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gbGVuOwo+ID4gK30KPiA+ICsK PiA+ICtzdGF0aWMgc3NpemVfdCBjdHhfcmVzdG9yZV9taWRfYmJfc3RvcmUoc3RydWN0IGNvbmZp Z19pdGVtICppdGVtLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbnN0IGNoYXIgKmRhdGEs IHNpemVfdAo+ID4gc3opCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHhlX2NvbmZp Z19ncm91cF9kZXZpY2UgKmRldiA9Cj4gPiB0b194ZV9jb25maWdfZ3JvdXBfZGV2aWNlKGl0ZW0p Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHdhX2JiX3N0b3JlKGRldi0+Y29uZmln LmN0eF9yZXN0b3JlX21pZF9iYiwgZGV2LAo+ID4gZGF0YSwgc3opOwo+ID4gK30KPiA+ICsKPiA+ ICtzdGF0aWMgc3NpemVfdCBjdHhfcmVzdG9yZV9wb3N0X2JiX3N0b3JlKHN0cnVjdCBjb25maWdf aXRlbSAqaXRlbSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3QgY2hhciAqZGF0YSwg c2l6ZV90Cj4gPiBzeikKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfY29uZmln X2dyb3VwX2RldmljZSAqZGV2ID0KPiA+IHRvX3hlX2NvbmZpZ19ncm91cF9kZXZpY2UoaXRlbSk7 Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gd2FfYmJfc3RvcmUoZGV2LT5jb25maWcu Y3R4X3Jlc3RvcmVfcG9zdF9iYiwgZGV2LAo+ID4gZGF0YSwgc3opOwo+ID4gK30KPiA+ICsKPiA+ ICsvKioKPiA+ICsgKiB4ZV9jb25maWdmc19nZXRfZW5naW5lc19hbGxvd2VkIC0gZ2V0IGVuZ2lu ZSBhbGxvd2VkIG1hc2sgZnJvbQo+ID4gY29uZmlnZnMKPiA+ICsgKiBAcGRldjogcGNpIGRldmlj ZQo+ID4gKyAqCj4gPiArICogUmV0dXJuOiBlbmdpbmUgbWFzayB3aXRoIGFsbG93ZWQgZW5naW5l cyBzZXQgaW4gY29uZmlnZnMKPiA+ICsgKi8KPiA+ICt1NjQgeGVfY29uZmlnZnNfZ2V0X2VuZ2lu ZXNfYWxsb3dlZChzdHJ1Y3QgcGNpX2RldiAqcGRldikKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKg wqBzdHJ1Y3QgeGVfY29uZmlnX2dyb3VwX2RldmljZSAqZGV2ID0KPiA+IGZpbmRfeGVfY29uZmln X2dyb3VwX2RldmljZShwZGV2KTsKPiA+ICvCoMKgwqDCoMKgwqDCoHU2NCBlbmdpbmVzX2FsbG93 ZWQ7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoIWRldikKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gZGV2aWNlX2RlZmF1bHRzLmVuZ2luZXNfYWxsb3dlZDsK PiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHNjb3BlZF9ndWFyZChtdXRleCwgJmRldi0+bG9jaykK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlbmdpbmVzX2FsbG93ZWQgPSBkZXYt PmNvbmZpZy5lbmdpbmVzX2FsbG93ZWQ7Cj4gPiArwqDCoMKgwqDCoMKgwqBjb25maWdfZ3JvdXBf cHV0KCZkZXYtPmdyb3VwKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBlbmdpbmVz X2FsbG93ZWQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBzc2l6ZV90IGVuZ2luZXNfYWxsb3dl ZF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhcgo+ID4gKnBhZ2UpCj4gPiArewo+ ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHhlX2NvbmZpZ19kZXZpY2UgKmRldiA9IHRvX3hlX2Nv bmZpZ19kZXZpY2UoaXRlbSk7Cj4gPiArwqDCoMKgwqDCoMKgwqBjaGFyICpwID0gcGFnZTsKPiA+ ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgQVJSQVlfU0laRShl bmdpbmVfaW5mbyk7IGkrKykgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHU2 NCBtYXNrID0gZW5naW5lX2luZm9baV0ubWFzazsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBpZiAoKGRldi0+ZW5naW5lc19hbGxvd2VkICYgbWFzaykgPT0gbWFzaykg ewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwICs9 IHNwcmludGYocCwgIiVzKlxuIiwKPiA+IGVuZ2luZV9pbmZvW2ldLmNscyk7Cj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfSBlbHNlIGlmIChtYXNrICYgZGV2LT5lbmdpbmVzX2Fs bG93ZWQpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgdTE2IGJpdDAgPSBfX2ZmczY0KG1hc2spLCBiaXQ7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1hc2sgJj0gZGV2LT5lbmdpbmVzX2Fs bG93ZWQ7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGZvcl9lYWNoX3NldF9iaXQoYml0LCAoY29uc3QgdW5zaWduZWQgbG9uZwo+ID4gKikm bWFzaywgNjQpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBwICs9IHNwcmludGYocCwgIiVzJXVcbiIsCj4gPiBlbmdpbmVf aW5mb1tpXS5jbHMsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYml0IC0gYml0 MCk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ID4gK8KgwqDCoMKgwqDC oMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHAgLSBwYWdlOwo+ID4gK30KPiA+ ICsKPiA+ICsvKgo+ID4gKyAqIExvb2t1cCBlbmdpbmVfaW5mby4gSWYgQG1hc2sgaXMgbm90IE5V TEwsIHJlZHVjZSB0aGUgbWFzawo+ID4gYWNjb3JkaW5nIHRvIHRoZQo+ID4gKyAqIGluc3RhbmNl IGluIEBwYXR0ZXJuLgo+ID4gKyAqCj4gPiArICogRXhhbXBsZXMgb2YgaW5wdXRzOgo+ID4gKyAq IC0gbG9va3VwX2VuZ2luZV9pbmZvKCJyY3MwIiwgJm1hc2spOiByZXR1cm4gInJjcyIgZW50cnkg ZnJvbQo+ID4gQGVuZ2luZV9pbmZvIGFuZAo+ID4gKyAqwqDCoCBtYXNrID09IEJJVF9VTEwoWEVf SFdfRU5HSU5FX1JDUzApCj4gPiArICogLSBsb29rdXBfZW5naW5lX2luZm8oInJjcyoiLCAmbWFz ayk6IHJldHVybiAicmNzIiBlbnRyeSBmcm9tCj4gPiBAZW5naW5lX2luZm8gYW5kCj4gPiArICrC oMKgIG1hc2sgPT0gWEVfSFdfRU5HSU5FX1JDU19NQVNLCj4gPiArICogLSBsb29rdXBfZW5naW5l X2luZm8oInJjcyIsIE5VTEwpOiByZXR1cm4gInJjcyIgZW50cnkgZnJvbQo+ID4gQGVuZ2luZV9p bmZvCj4gPiArICovCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBlbmdpbmVfaW5mbyAqbG9va3Vw X2VuZ2luZV9pbmZvKGNvbnN0IGNoYXIKPiA+ICpwYXR0ZXJuLCB1NjQgKm1hc2spCj4gPiArewo+ ID4gK8KgwqDCoMKgwqDCoMKgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGVuZ2lu ZV9pbmZvKTsgaSsrKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdTggaW5z dGFuY2U7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdTE2IGJpdDsKPiA+ICsK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIXN0cl9oYXNfcHJlZml4KHBh dHRlcm4sIGVuZ2luZV9pbmZvW2ldLmNscykpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbnRpbnVlOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHBhdHRlcm4gKz0gc3RybGVuKGVuZ2luZV9pbmZvW2ldLmNscyk7Cj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFtYXNrKQo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gKnBhdHRlcm4gPyBO VUxMIDogJmVuZ2luZV9pbmZvW2ldOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGlmICghc3RyY21wKHBhdHRlcm4sICIqIikpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKm1hc2sgPSBlbmdpbmVfaW5mb1tpXS5tYXNr Owo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1 cm4gJmVuZ2luZV9pbmZvW2ldOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0K PiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoa3N0cnRvdTgocGF0 dGVybiwgMTAsICZpbnN0YW5jZSkpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJldHVybiBOVUxMOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGJpdCA9IF9fZmZzNjQoZW5naW5lX2luZm9baV0ubWFzaykgKyBpbnN0YW5j ZTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoYml0ID49IGZsczY0KGVu Z2luZV9pbmZvW2ldLm1hc2spKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZXR1cm4gTlVMTDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAqbWFzayA9IEJJVF9VTEwoYml0KTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXR1cm4gJmVuZ2luZV9pbmZvW2ldOwo+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIE5VTEw7Cj4gPiArfQo+ID4gKwo+ID4gK3N0 YXRpYyBpbnQgcGFyc2VfZW5naW5lKGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmVuZF9jaGFy cywgdTY0Cj4gPiAqbWFzaywKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgY29uc3Qgc3RydWN0IGVuZ2luZV9pbmZvICoqcGluZm8pCj4gPiArewo+ID4g K8KgwqDCoMKgwqDCoMKgY2hhciBidWZbTUFYX0VOR0lORV9DTEFTU19DSEFSUyArIE1BWF9FTkdJ TkVfSU5TVEFOQ0VfQ0hBUlMKPiA+ICsgMV07Cj4gPiArwqDCoMKgwqDCoMKgwqBjb25zdCBzdHJ1 Y3QgZW5naW5lX2luZm8gKmluZm87Cj4gPiArwqDCoMKgwqDCoMKgwqBzaXplX3QgbGVuOwo+ID4g Kwo+ID4gK8KgwqDCoMKgwqDCoMKgbGVuID0gc3RyY3NwbihzLCBlbmRfY2hhcnMpOwo+ID4gK8Kg wqDCoMKgwqDCoMKgaWYgKGxlbiA+PSBzaXplb2YoYnVmKSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoG1l bWNweShidWYsIHMsIGxlbik7Cj4gPiArwqDCoMKgwqDCoMKgwqBidWZbbGVuXSA9ICdcMCc7Cj4g PiArCj4gPiArwqDCoMKgwqDCoMKgwqBpbmZvID0gbG9va3VwX2VuZ2luZV9pbmZvKGJ1ZiwgbWFz ayk7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoIWluZm8pCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmV0dXJuIC1FTk9FTlQ7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAo cGluZm8pCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKnBpbmZvID0gaW5mbzsK PiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBsZW47Cj4gPiArfQo+ID4gKwo+ID4gK3N0 YXRpYyBzc2l6ZV90IGVuZ2luZXNfYWxsb3dlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0 ZW0sCj4gPiBjb25zdCBjaGFyICpwYWdlLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZV90IGxlbikK PiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfY29uZmlnX2dyb3VwX2RldmljZSAq ZGV2ID0KPiA+IHRvX3hlX2NvbmZpZ19ncm91cF9kZXZpY2UoaXRlbSk7Cj4gPiArwqDCoMKgwqDC oMKgwqBzc2l6ZV90IHBhdHRlcm5sZW4sIHA7Cj4gPiArwqDCoMKgwqDCoMKgwqB1NjQgbWFzaywg dmFsID0gMDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGZvciAocCA9IDA7IHAgPCBsZW47IHAg Kz0gcGF0dGVybmxlbiArIDEpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBw YXR0ZXJubGVuID0gcGFyc2VfZW5naW5lKHBhZ2UgKyBwLCAiLFxuIiwgJm1hc2ssCj4gPiBOVUxM KTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocGF0dGVybmxlbiA8IDAp Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVy biAtRUlOVkFMOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZhbCB8 PSBtYXNrOwo+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgZ3Vh cmQobXV0ZXgpKCZkZXYtPmxvY2spOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKGlzX2JvdW5kKGRl dikpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FQlVTWTsKPiA+ ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGRldi0+Y29uZmlnLmVuZ2luZXNfYWxsb3dlZCA9IHZhbDsK PiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBsZW47Cj4gPiArfQo+ID4gKwo+ID4gK3N0 YXRpYyB1NjQgZ2V0X2d0X3R5cGVzX2FsbG93ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCj4gPiAr ewo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHhlX2NvbmZpZ19ncm91cF9kZXZpY2UgKmRldiA9 Cj4gPiBmaW5kX3hlX2NvbmZpZ19ncm91cF9kZXZpY2UocGRldik7Cj4gPiArwqDCoMKgwqDCoMKg wqB1NjQgbWFzazsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmICghZGV2KQo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBkZXZpY2VfZGVmYXVsdHMuZ3RfdHlwZXNf YWxsb3dlZDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHNjb3BlZF9ndWFyZChtdXRleCwgJmRl di0+bG9jaykKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtYXNrID0gZGV2LT5j b25maWcuZ3RfdHlwZXNfYWxsb3dlZDsKPiA+ICvCoMKgwqDCoMKgwqDCoGNvbmZpZ19ncm91cF9w dXQoJmRldi0+Z3JvdXApOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIG1hc2s7Cj4g PiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIHhlX2NvbmZpZ2ZzX3ByaW1hcnlfZ3RfYWxsb3dl ZCAtIGRldGVybWluZSB3aGV0aGVyIHByaW1hcnkgR1RzCj4gPiBhcmUgc3VwcG9ydGVkCj4gPiAr ICogQHBkZXY6IHBjaSBkZXZpY2UKPiA+ICsgKgo+ID4gKyAqIFJldHVybjogVHJ1ZSBpZiBwcmlt YXJ5IEdUcyBhcmUgZW5hYmxlZCwgZmFsc2UgaWYgdGhleSBoYXZlCj4gPiBiZWVuIGRpc2FibGVk IHZpYQo+ID4gKyAqwqDCoMKgwqAgY29uZmlnZnMuCj4gPiArICovCj4gPiArYm9vbCB4ZV9jb25m aWdmc19wcmltYXJ5X2d0X2FsbG93ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCj4gPiArewo+ID4g K8KgwqDCoMKgwqDCoMKgcmV0dXJuIGdldF9ndF90eXBlc19hbGxvd2VkKHBkZXYpICYKPiA+IEJJ VF9VTEwoWEVfR1RfVFlQRV9NQUlOKTsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICogeGVf Y29uZmlnZnNfbWVkaWFfZ3RfYWxsb3dlZCAtIGRldGVybWluZSB3aGV0aGVyIG1lZGlhIEdUcyBh cmUKPiA+IHN1cHBvcnRlZAo+ID4gKyAqIEBwZGV2OiBwY2kgZGV2aWNlCj4gPiArICoKPiA+ICsg KiBSZXR1cm46IFRydWUgaWYgdGhlIG1lZGlhIEdUcyBhcmUgZW5hYmxlZCwgZmFsc2UgaWYgdGhl eSBoYXZlCj4gPiBiZWVuIGRpc2FibGVkCj4gPiArICrCoMKgwqDCoCB2aWEgY29uZmlnZnMuCj4g PiArICovCj4gPiArYm9vbCB4ZV9jb25maWdmc19tZWRpYV9ndF9hbGxvd2VkKHN0cnVjdCBwY2lf ZGV2ICpwZGV2KQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBnZXRfZ3RfdHlwZXNf YWxsb3dlZChwZGV2KSAmCj4gPiBCSVRfVUxMKFhFX0dUX1RZUEVfTUVESUEpOwo+ID4gK30KPiA+ ICsKPiA+ICtzdGF0aWMgc3NpemVfdCBndF90eXBlc19hbGxvd2VkX3Nob3coc3RydWN0IGNvbmZp Z19pdGVtICppdGVtLAo+ID4gY2hhciAqcGFnZSkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgeGVfY29uZmlnX2RldmljZSAqZGV2ID0gdG9feGVfY29uZmlnX2RldmljZShpdGVtKTsK PiA+ICvCoMKgwqDCoMKgwqDCoGNoYXIgKnAgPSBwYWdlOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDC oMKgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGd0X3R5cGVzKTsgaSsrKQo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChkZXYtPmd0X3R5cGVzX2FsbG93ZWQg Jgo+ID4gQklUX1VMTChndF90eXBlc1tpXS50eXBlKSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcCArPSBzcHJpbnRmKHAsICIlc1xuIiwgZ3RfdHlw ZXNbaV0ubmFtZSk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcCAtIHBhZ2U7Cj4g PiArfQo+ID4gKwo+ID4gK3N0YXRpYyBzc2l6ZV90IGd0X3R5cGVzX2FsbG93ZWRfc3RvcmUoc3Ry dWN0IGNvbmZpZ19pdGVtICppdGVtLAo+ID4gY29uc3QgY2hhciAqcGFnZSwKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgc2l6ZV90IGxlbikKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVf Y29uZmlnX2dyb3VwX2RldmljZSAqZGV2ID0KPiA+IHRvX3hlX2NvbmZpZ19ncm91cF9kZXZpY2Uo aXRlbSk7Cj4gPiArwqDCoMKgwqDCoMKgwqBjaGFyICpidWYgX19mcmVlKGtmcmVlKSA9IGtzdHJk dXAocGFnZSwgR0ZQX0tFUk5FTCk7Cj4gPiArwqDCoMKgwqDCoMKgwqBjaGFyICpwID0gYnVmOwo+ ID4gK8KgwqDCoMKgwqDCoMKgdTY0IHR5cGVtYXNrID0gMDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKg wqDCoGlmICghYnVmKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAt RU5PTUVNOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgd2hpbGUgKHApIHsKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjaGFyICp0eXBlbmFtZSA9IHN0cnNlcCgmcCwgIixcbiIp Owo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJvb2wgbWF0Y2hlZCA9IGZhbHNl Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICh0eXBlbmFtZVsw XSA9PSAnXDAnKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBjb250aW51ZTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBm b3IgKHNpemVfdCBpID0gMDsgaSA8IEFSUkFZX1NJWkUoZ3RfdHlwZXMpOyBpKyspIHsKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHN0cmNtcCh0 eXBlbmFtZSwgZ3RfdHlwZXNbaV0ubmFtZSkgPT0KPiA+IDApIHsKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHR5cGVtYXNr IHw9IEJJVChndF90eXBlc1tpXS50eXBlKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1hdGNoZWQgPSB0cnVlOwo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgYnJlYWs7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoH0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFtYXRjaGVkKQo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsKPiA+ ICvCoMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGd1YXJkKG11dGV4KSgm ZGV2LT5sb2NrKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChpc19ib3VuZChkZXYpKQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUJVU1k7Cj4gPiArCj4gPiArwqDC oMKgwqDCoMKgwqBkZXYtPmNvbmZpZy5ndF90eXBlc19hbGxvd2VkID0gdHlwZW1hc2s7Cj4gPiAr Cj4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gbGVuOwo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ ICsgKiB4ZV9jb25maWdmc19nZXRfZW5hYmxlX211bHRpX3F1ZXVlIC0gZ2V0IGNvbmZpZ2ZzCj4g PiBlbmFibGVfbXVsdGlfcXVldWUgc2V0dGluZwo+ID4gKyAqIEBwZGV2OiBwY2kgZGV2aWNlCj4g PiArICoKPiA+ICsgKiBSZXR1cm46IHRydWUgaWYgbXVsdGktcXVldWUgaXMgZW5hYmxlZCBmb3Ig dGhpcyBkZXZpY2UgKHRoZQo+ID4gZGVmYXVsdCksCj4gPiArICogZmFsc2UgaWYgaXQgaGFzIGJl ZW4gZm9yY2UtZGlzYWJsZWQgdmlhIGNvbmZpZ2ZzLgo+ID4gKyAqLwo+ID4gK2Jvb2wgeGVfY29u ZmlnZnNfZ2V0X2VuYWJsZV9tdWx0aV9xdWV1ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKPiA+ICt7 Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfY29uZmlnX2dyb3VwX2RldmljZSAqZGV2ID0K PiA+IGZpbmRfeGVfY29uZmlnX2dyb3VwX2RldmljZShwZGV2KTsKPiA+ICvCoMKgwqDCoMKgwqDC oGJvb2wgcmV0Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCFkZXYpCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHRydWU7Cj4gPiArCj4gPiArwqDCoMKgwqDC oMKgwqBzY29wZWRfZ3VhcmQobXV0ZXgsICZkZXYtPmxvY2spCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0ID0gZGV2LT5jb25maWcuZW5hYmxlX211bHRpX3F1ZXVlOwo+ID4g K8KgwqDCoMKgwqDCoMKgY29uZmlnX2dyb3VwX3B1dCgmZGV2LT5ncm91cCk7Cj4gPiArCj4gPiAr wqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgc3NpemVf dCBlbmFibGVfbXVsdGlfcXVldWVfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sCj4gPiBj aGFyICpwYWdlKQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9jb25maWdfZGV2 aWNlICpkZXYgPSB0b194ZV9jb25maWdfZGV2aWNlKGl0ZW0pOwo+ID4gKwo+ID4gK8KgwqDCoMKg wqDCoMKgcmV0dXJuIHNwcmludGYocGFnZSwgIiVkXG4iLCBkZXYtPmVuYWJsZV9tdWx0aV9xdWV1 ZSk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBzc2l6ZV90IGVuYWJsZV9tdWx0aV9xdWV1ZV9z dG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sCj4gPiBjb25zdCBjaGFyICpwYWdlLAo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNpemVfdCBsZW4pCj4gPiArewo+ID4gK8KgwqDCoMKgwqDC oMKgc3RydWN0IHhlX2NvbmZpZ19ncm91cF9kZXZpY2UgKmRldiA9Cj4gPiB0b194ZV9jb25maWdf Z3JvdXBfZGV2aWNlKGl0ZW0pOwo+ID4gK8KgwqDCoMKgwqDCoMKgYm9vbCB2YWw7Cj4gPiArwqDC oMKgwqDCoMKgwqBpbnQgcmV0Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0ga3N0cnRv Ym9vbChwYWdlLCAmdmFsKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKg wqDCoGd1YXJkKG11dGV4KSgmZGV2LT5sb2NrKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChpc19i b3VuZChkZXYpKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUJV U1k7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBkZXYtPmNvbmZpZy5lbmFibGVfbXVsdGlfcXVl dWUgPSB2YWw7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gbGVuOwo+ID4gK30KPiA+ ICsKPiA+ICsvKioKPiA+ICsgKiB4ZV9jb25maWdmc19nZXRfcHNtaV9lbmFibGVkIC0gZ2V0IGNv bmZpZ2ZzIGVuYWJsZV9wc21pIHNldHRpbmcKPiA+ICsgKiBAcGRldjogcGNpIGRldmljZQo+ID4g KyAqCj4gPiArICogUmV0dXJuOiBlbmFibGVfcHNtaSBzZXR0aW5nIGluIGNvbmZpZ2ZzCj4gPiAr ICovCj4gPiArYm9vbCB4ZV9jb25maWdmc19nZXRfcHNtaV9lbmFibGVkKHN0cnVjdCBwY2lfZGV2 ICpwZGV2KQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9jb25maWdfZ3JvdXBf ZGV2aWNlICpkZXYgPQo+ID4gZmluZF94ZV9jb25maWdfZ3JvdXBfZGV2aWNlKHBkZXYpOwo+ID4g K8KgwqDCoMKgwqDCoMKgYm9vbCByZXQ7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoIWRl dikKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gZmFsc2U7Cj4gPiAr Cj4gPiArwqDCoMKgwqDCoMKgwqBzY29wZWRfZ3VhcmQobXV0ZXgsICZkZXYtPmxvY2spCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gZGV2LT5jb25maWcuZW5hYmxlX3Bz bWk7Cj4gPiArwqDCoMKgwqDCoMKgwqBjb25maWdfZ3JvdXBfcHV0KCZkZXYtPmdyb3VwKTsKPiA+ ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRp YyBzc2l6ZV90IGVuYWJsZV9wc21pX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFy Cj4gPiAqcGFnZSkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfY29uZmlnX2Rl dmljZSAqZGV2ID0gdG9feGVfY29uZmlnX2RldmljZShpdGVtKTsKPiA+ICsKPiA+ICvCoMKgwqDC oMKgwqDCoHJldHVybiBzcHJpbnRmKHBhZ2UsICIlZFxuIiwgZGV2LT5lbmFibGVfcHNtaSk7Cj4g PiArfQo+ID4gKwo+ID4gK3N0YXRpYyBzc2l6ZV90IGVuYWJsZV9wc21pX3N0b3JlKHN0cnVjdCBj b25maWdfaXRlbSAqaXRlbSwgY29uc3QKPiA+IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4pCj4gPiAr ewo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHhlX2NvbmZpZ19ncm91cF9kZXZpY2UgKmRldiA9 Cj4gPiB0b194ZV9jb25maWdfZ3JvdXBfZGV2aWNlKGl0ZW0pOwo+ID4gK8KgwqDCoMKgwqDCoMKg Ym9vbCB2YWw7Cj4gPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+ID4gKwo+ID4gK8KgwqDCoMKg wqDCoMKgcmV0ID0ga3N0cnRvYm9vbChwYWdlLCAmdmFsKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlm IChyZXQpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiA+ ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGd1YXJkKG11dGV4KSgmZGV2LT5sb2NrKTsKPiA+IMKgwqDC oMKgwqDCoMKgwqBpZiAoaXNfYm91bmQoZGV2KSkKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmV0dXJuIC1FQlVTWTsKPiA+IMKgCj4gPiAtwqDCoMKgwqDCoMKgwqAvKgo+ID4g LcKgwqDCoMKgwqDCoMKgICogMi4gQWxsb2NhdGUgYSB1MzIgYXJyYXkgYW5kIHNldCB0aGUgcG9p bnRlcnMgdG8gdGhlCj4gPiByaWdodCBwb3NpdGlvbnMKPiA+IC3CoMKgwqDCoMKgwqDCoCAqIGFj Y29yZGluZyB0byB0aGUgbGVuZ3RoIG9mIGVhY2ggY2xhc3MnIHdhX2JiCj4gPiAtwqDCoMKgwqDC oMKgwqAgKi8KPiA+IC3CoMKgwqDCoMKgwqDCoHRtcCA9IGtyZWFsbG9jKHdhX2JiWzBdLmNzLCBj b3VudCAqIHNpemVvZih1MzIpLAo+ID4gR0ZQX0tFUk5FTCk7Cj4gPiAtwqDCoMKgwqDCoMKgwqBp ZiAoIXRtcCkKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVOT01F TTsKPiA+ICvCoMKgwqDCoMKgwqDCoGRldi0+Y29uZmlnLmVuYWJsZV9wc21pID0gdmFsOwo+ID4g wqAKPiA+IC3CoMKgwqDCoMKgwqDCoGlmICghY291bnQpIHsKPiA+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBtZW1zZXQod2FfYmIsIDAsIHNpemVvZih0bXBfd2FfYmIpKTsKPiA+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gbGVuOwo+ID4gLcKgwqDCoMKgwqDC oMKgfQo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIGxlbjsKPiA+ICt9Cj4gPiDCoAo+ID4gLcKg wqDCoMKgwqDCoMKgZm9yIChjbGFzcyA9IDAsIGNvdW50ID0gMDsgY2xhc3MgPCBYRV9FTkdJTkVf Q0xBU1NfTUFYOwo+ID4gKytjbGFzcykgewo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHRtcF93YV9iYltjbGFzc10uY3MgPSB0bXAgKyBjb3VudDsKPiA+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBjb3VudCArPSB0bXBfd2FfYmJbY2xhc3NdLmxlbjsKPiA+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0bXBfd2FfYmJbY2xhc3NdLmxlbiA9IDA7Cj4gPiAt wqDCoMKgwqDCoMKgwqB9Cj4gPiArLyoqCj4gPiArICogeGVfY29uZmlnZnNfZ2V0X3N1cnZpdmFi aWxpdHlfbW9kZSAtIGdldCBjb25maWdmcyBzdXJ2aXZhYmlsaXR5Cj4gPiBtb2RlIGF0dHJpYnV0 ZQo+ID4gKyAqIEBwZGV2OiBwY2kgZGV2aWNlCj4gPiArICoKPiA+ICsgKiBSZXR1cm46IHN1cnZp dmFiaWxpdHlfbW9kZSBhdHRyaWJ1dGUgaW4gY29uZmlnZnMKPiA+ICsgKi8KPiA+ICtib29sIHhl X2NvbmZpZ2ZzX2dldF9zdXJ2aXZhYmlsaXR5X21vZGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCj4g PiArewo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHhlX2NvbmZpZ19ncm91cF9kZXZpY2UgKmRl diA9Cj4gPiBmaW5kX3hlX2NvbmZpZ19ncm91cF9kZXZpY2UocGRldik7Cj4gPiArwqDCoMKgwqDC oMKgwqBib29sIG1vZGU7Cj4gPiDCoAo+ID4gLcKgwqDCoMKgwqDCoMKgLyogMy4gUGFyc2Ugd2Ff YmIgbGluZXMgYWdhaW4sIHRoaXMgdGltZSBzYXZpbmcgdGhlIHZhbHVlcwo+ID4gKi8KPiA+IC3C oMKgwqDCoMKgwqDCoGNvdW50ID0gcGFyc2Vfd2FfYmJfbGluZXMocGFnZSwgdG1wX3dhX2JiKTsK PiA+IC3CoMKgwqDCoMKgwqDCoGlmIChjb3VudCA8IDApCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmV0dXJuIGNvdW50Owo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCFkZXYpCj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGRldmljZV9kZWZhdWx0cy5z dXJ2aXZhYmlsaXR5X21vZGU7Cj4gPiDCoAo+ID4gLcKgwqDCoMKgwqDCoMKgbWVtY3B5KHdhX2Ji LCB0bXBfd2FfYmIsIHNpemVvZih0bXBfd2FfYmIpKTsKPiA+ICvCoMKgwqDCoMKgwqDCoHNjb3Bl ZF9ndWFyZChtdXRleCwgJmRldi0+bG9jaykKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBtb2RlID0gZGV2LT5jb25maWcuc3Vydml2YWJpbGl0eV9tb2RlOwo+ID4gK8KgwqDCoMKg wqDCoMKgY29uZmlnX2dyb3VwX3B1dCgmZGV2LT5ncm91cCk7Cj4gPiDCoAo+ID4gLcKgwqDCoMKg wqDCoMKgcmV0dXJuIGxlbjsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBtb2RlOwo+ID4gwqB9 Cj4gPiDCoAo+ID4gLXN0YXRpYyBzc2l6ZV90IGN0eF9yZXN0b3JlX21pZF9iYl9zdG9yZShzdHJ1 Y3QgY29uZmlnX2l0ZW0gKml0ZW0sCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29uc3QgY2hh ciAqZGF0YSwgc2l6ZV90Cj4gPiBzeikKPiA+ICtzdGF0aWMgc3NpemVfdCBzdXJ2aXZhYmlsaXR5 X21vZGVfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sCj4gPiBjaGFyICpwYWdlKQo+ID4g wqB7Cj4gPiAtwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfY29uZmlnX2dyb3VwX2RldmljZSAqZGV2 ID0KPiA+IHRvX3hlX2NvbmZpZ19ncm91cF9kZXZpY2UoaXRlbSk7Cj4gPiArwqDCoMKgwqDCoMKg wqBzdHJ1Y3QgeGVfY29uZmlnX2RldmljZSAqZGV2ID0gdG9feGVfY29uZmlnX2RldmljZShpdGVt KTsKPiA+IMKgCj4gPiAtwqDCoMKgwqDCoMKgwqByZXR1cm4gd2FfYmJfc3RvcmUoZGV2LT5jb25m aWcuY3R4X3Jlc3RvcmVfbWlkX2JiLCBkZXYsCj4gPiBkYXRhLCBzeik7Cj4gPiArwqDCoMKgwqDC oMKgwqByZXR1cm4gc3ByaW50ZihwYWdlLCAiJWRcbiIsIGRldi0+c3Vydml2YWJpbGl0eV9tb2Rl KTsKPiA+IMKgfQo+ID4gwqAKPiA+IC1zdGF0aWMgc3NpemVfdCBjdHhfcmVzdG9yZV9wb3N0X2Ji X3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90Cj4gPiBzeikKPiA+ICtzdGF0aWMgc3NpemVfdCBz dXJ2aXZhYmlsaXR5X21vZGVfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLAo+ID4gY29u c3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbikKPiA+IMKgewo+ID4gwqDCoMKgwqDCoMKgwqDCoHN0 cnVjdCB4ZV9jb25maWdfZ3JvdXBfZGV2aWNlICpkZXYgPQo+ID4gdG9feGVfY29uZmlnX2dyb3Vw X2RldmljZShpdGVtKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGJvb2wgc3Vydml2YWJpbGl0eV9tb2Rl Owo+ID4gK8KgwqDCoMKgwqDCoMKgaW50IHJldDsKPiA+IMKgCj4gPiAtwqDCoMKgwqDCoMKgwqBy ZXR1cm4gd2FfYmJfc3RvcmUoZGV2LT5jb25maWcuY3R4X3Jlc3RvcmVfcG9zdF9iYiwgZGV2LAo+ ID4gZGF0YSwgc3opOwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0ga3N0cnRvYm9vbChwYWdlLCAm c3Vydml2YWJpbGl0eV9tb2RlKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiA+ICsKPiA+ICvCoMKgwqDC oMKgwqDCoGd1YXJkKG11dGV4KSgmZGV2LT5sb2NrKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChp c19ib3VuZChkZXYpKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAt RUJVU1k7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBkZXYtPmNvbmZpZy5zdXJ2aXZhYmlsaXR5 X21vZGUgPSBzdXJ2aXZhYmlsaXR5X21vZGU7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXR1 cm4gbGVuOwo+ID4gwqB9Cj4gPiDCoAo+ID4gwqBDT05GSUdGU19BVFRSKCwgY3R4X3Jlc3RvcmVf bWlkX2JiKTsKPiA+IMKgQ09ORklHRlNfQVRUUigsIGN0eF9yZXN0b3JlX3Bvc3RfYmIpOwo+ID4g LUNPTkZJR0ZTX0FUVFIoLCBlbmFibGVfbXVsdGlfcXVldWUpOwo+ID4gLUNPTkZJR0ZTX0FUVFIo LCBlbmFibGVfcHNtaSk7Cj4gPiDCoENPTkZJR0ZTX0FUVFIoLCBlbmdpbmVzX2FsbG93ZWQpOwo+ ID4gwqBDT05GSUdGU19BVFRSKCwgZ3RfdHlwZXNfYWxsb3dlZCk7Cj4gPiArQ09ORklHRlNfQVRU UigsIGVuYWJsZV9tdWx0aV9xdWV1ZSk7Cj4gPiArQ09ORklHRlNfQVRUUigsIGVuYWJsZV9wc21p KTsKPiA+IMKgQ09ORklHRlNfQVRUUigsIHN1cnZpdmFiaWxpdHlfbW9kZSk7Cj4gPiDCoAo+ID4g wqBzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2F0dHJpYnV0ZSAqeGVfY29uZmlnX2RldmljZV9hdHRy c1tdID0gewo+ID4gwqDCoMKgwqDCoMKgwqDCoCZhdHRyX2N0eF9yZXN0b3JlX21pZF9iYiwKPiA+ IMKgwqDCoMKgwqDCoMKgwqAmYXR0cl9jdHhfcmVzdG9yZV9wb3N0X2JiLAo+ID4gLcKgwqDCoMKg wqDCoMKgJmF0dHJfZW5hYmxlX211bHRpX3F1ZXVlLAo+ID4gLcKgwqDCoMKgwqDCoMKgJmF0dHJf ZW5hYmxlX3BzbWksCj4gPiDCoMKgwqDCoMKgwqDCoMKgJmF0dHJfZW5naW5lc19hbGxvd2VkLAo+ ID4gwqDCoMKgwqDCoMKgwqDCoCZhdHRyX2d0X3R5cGVzX2FsbG93ZWQsCj4gPiArwqDCoMKgwqDC oMKgwqAmYXR0cl9lbmFibGVfbXVsdGlfcXVldWUsCj4gPiArwqDCoMKgwqDCoMKgwqAmYXR0cl9l bmFibGVfcHNtaSwKPiA+IMKgwqDCoMKgwqDCoMKgwqAmYXR0cl9zdXJ2aXZhYmlsaXR5X21vZGUs Cj4gPiDCoMKgwqDCoMKgwqDCoMKgTlVMTCwKPiA+IMKgfTsKPiA+IEBAIC0xMTM4LDggKzEzMzAs OCBAQCBzdGF0aWMgdm9pZCBkdW1wX2N1c3RvbV9kZXZfY29uZmlnKHN0cnVjdAo+ID4gcGNpX2Rl diAqcGRldiwKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2LT5jb25maWcuYXR0cl8pOyBcCj4gPiDCoMKgwqDCoMKg wqDCoMKgfSB3aGlsZSAoMCkKPiA+IMKgCj4gPiAtwqDCoMKgwqDCoMKgwqBQUklfQ1VTVE9NX0FU VFIoIiVsbHgiLCBndF90eXBlc19hbGxvd2VkKTsKPiA+IMKgwqDCoMKgwqDCoMKgwqBQUklfQ1VT VE9NX0FUVFIoIiVsbHgiLCBlbmdpbmVzX2FsbG93ZWQpOwo+ID4gK8KgwqDCoMKgwqDCoMKgUFJJ X0NVU1RPTV9BVFRSKCIlbGx4IiwgZ3RfdHlwZXNfYWxsb3dlZCk7Cj4gPiDCoMKgwqDCoMKgwqDC oMKgUFJJX0NVU1RPTV9BVFRSKCIlZCIsIGVuYWJsZV9tdWx0aV9xdWV1ZSk7Cj4gPiDCoMKgwqDC oMKgwqDCoMKgUFJJX0NVU1RPTV9BVFRSKCIlZCIsIGVuYWJsZV9wc21pKTsKPiA+IMKgwqDCoMKg wqDCoMKgwqBQUklfQ1VTVE9NX0FUVFIoIiVkIiwgc3Vydml2YWJpbGl0eV9tb2RlKTsKPiA+IEBA IC0xMTcxLDE4NiArMTM2Myw2IEBAIHZvaWQgeGVfY29uZmlnZnNfY2hlY2tfZGV2aWNlKHN0cnVj dAo+ID4gcGNpX2RldiAqcGRldikKPiA+IMKgwqDCoMKgwqDCoMKgwqBjb25maWdfZ3JvdXBfcHV0 KCZkZXYtPmdyb3VwKTsKPiA+IMKgfQo+ID4gwqAKPiA+IC0vKioKPiA+IC0gKiB4ZV9jb25maWdm c19nZXRfc3Vydml2YWJpbGl0eV9tb2RlIC0gZ2V0IGNvbmZpZ2ZzIHN1cnZpdmFiaWxpdHkKPiA+ IG1vZGUgYXR0cmlidXRlCj4gPiAtICogQHBkZXY6IHBjaSBkZXZpY2UKPiA+IC0gKgo+ID4gLSAq IFJldHVybjogc3Vydml2YWJpbGl0eV9tb2RlIGF0dHJpYnV0ZSBpbiBjb25maWdmcwo+ID4gLSAq Lwo+ID4gLWJvb2wgeGVfY29uZmlnZnNfZ2V0X3N1cnZpdmFiaWxpdHlfbW9kZShzdHJ1Y3QgcGNp X2RldiAqcGRldikKPiA+IC17Cj4gPiAtwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfY29uZmlnX2dy b3VwX2RldmljZSAqZGV2ID0KPiA+IGZpbmRfeGVfY29uZmlnX2dyb3VwX2RldmljZShwZGV2KTsK PiA+IC3CoMKgwqDCoMKgwqDCoGJvb2wgbW9kZTsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoGlm ICghZGV2KQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBkZXZpY2Vf ZGVmYXVsdHMuc3Vydml2YWJpbGl0eV9tb2RlOwo+ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKgc2Nv cGVkX2d1YXJkKG11dGV4LCAmZGV2LT5sb2NrKQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoG1vZGUgPSBkZXYtPmNvbmZpZy5zdXJ2aXZhYmlsaXR5X21vZGU7Cj4gPiAtwqDCoMKg wqDCoMKgwqBjb25maWdfZ3JvdXBfcHV0KCZkZXYtPmdyb3VwKTsKPiA+IC0KPiA+IC3CoMKgwqDC oMKgwqDCoHJldHVybiBtb2RlOwo+ID4gLX0KPiA+IC0KPiA+IC1zdGF0aWMgdTY0IGdldF9ndF90 eXBlc19hbGxvd2VkKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQo+ID4gLXsKPiA+IC3CoMKgwqDCoMKg wqDCoHN0cnVjdCB4ZV9jb25maWdfZ3JvdXBfZGV2aWNlICpkZXYgPQo+ID4gZmluZF94ZV9jb25m aWdfZ3JvdXBfZGV2aWNlKHBkZXYpOwo+ID4gLcKgwqDCoMKgwqDCoMKgdTY0IG1hc2s7Cj4gPiAt Cj4gPiAtwqDCoMKgwqDCoMKgwqBpZiAoIWRldikKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqByZXR1cm4gZGV2aWNlX2RlZmF1bHRzLmd0X3R5cGVzX2FsbG93ZWQ7Cj4gPiAtCj4g PiAtwqDCoMKgwqDCoMKgwqBzY29wZWRfZ3VhcmQobXV0ZXgsICZkZXYtPmxvY2spCj4gPiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbWFzayA9IGRldi0+Y29uZmlnLmd0X3R5cGVzX2Fs bG93ZWQ7Cj4gPiAtwqDCoMKgwqDCoMKgwqBjb25maWdfZ3JvdXBfcHV0KCZkZXYtPmdyb3VwKTsK PiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoHJldHVybiBtYXNrOwo+ID4gLX0KPiA+IC0KPiA+IC0v KioKPiA+IC0gKiB4ZV9jb25maWdmc19wcmltYXJ5X2d0X2FsbG93ZWQgLSBkZXRlcm1pbmUgd2hl dGhlciBwcmltYXJ5IEdUcwo+ID4gYXJlIHN1cHBvcnRlZAo+ID4gLSAqIEBwZGV2OiBwY2kgZGV2 aWNlCj4gPiAtICoKPiA+IC0gKiBSZXR1cm46IFRydWUgaWYgcHJpbWFyeSBHVHMgYXJlIGVuYWJs ZWQsIGZhbHNlIGlmIHRoZXkgaGF2ZQo+ID4gYmVlbiBkaXNhYmxlZCB2aWEKPiA+IC0gKsKgwqDC oMKgIGNvbmZpZ2ZzLgo+ID4gLSAqLwo+ID4gLWJvb2wgeGVfY29uZmlnZnNfcHJpbWFyeV9ndF9h bGxvd2VkKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQo+ID4gLXsKPiA+IC3CoMKgwqDCoMKgwqDCoHJl dHVybiBnZXRfZ3RfdHlwZXNfYWxsb3dlZChwZGV2KSAmCj4gPiBCSVRfVUxMKFhFX0dUX1RZUEVf TUFJTik7Cj4gPiAtfQo+ID4gLQo+ID4gLS8qKgo+ID4gLSAqIHhlX2NvbmZpZ2ZzX21lZGlhX2d0 X2FsbG93ZWQgLSBkZXRlcm1pbmUgd2hldGhlciBtZWRpYSBHVHMgYXJlCj4gPiBzdXBwb3J0ZWQK PiA+IC0gKiBAcGRldjogcGNpIGRldmljZQo+ID4gLSAqCj4gPiAtICogUmV0dXJuOiBUcnVlIGlm IHRoZSBtZWRpYSBHVHMgYXJlIGVuYWJsZWQsIGZhbHNlIGlmIHRoZXkgaGF2ZQo+ID4gYmVlbiBk aXNhYmxlZAo+ID4gLSAqwqDCoMKgwqAgdmlhIGNvbmZpZ2ZzLgo+ID4gLSAqLwo+ID4gLWJvb2wg eGVfY29uZmlnZnNfbWVkaWFfZ3RfYWxsb3dlZChzdHJ1Y3QgcGNpX2RldiAqcGRldikKPiA+IC17 Cj4gPiAtwqDCoMKgwqDCoMKgwqByZXR1cm4gZ2V0X2d0X3R5cGVzX2FsbG93ZWQocGRldikgJgo+ ID4gQklUX1VMTChYRV9HVF9UWVBFX01FRElBKTsKPiA+IC19Cj4gPiAtCj4gPiAtLyoqCj4gPiAt ICogeGVfY29uZmlnZnNfZ2V0X2VuZ2luZXNfYWxsb3dlZCAtIGdldCBlbmdpbmUgYWxsb3dlZCBt YXNrIGZyb20KPiA+IGNvbmZpZ2ZzCj4gPiAtICogQHBkZXY6IHBjaSBkZXZpY2UKPiA+IC0gKgo+ ID4gLSAqIFJldHVybjogZW5naW5lIG1hc2sgd2l0aCBhbGxvd2VkIGVuZ2luZXMgc2V0IGluIGNv bmZpZ2ZzCj4gPiAtICovCj4gPiAtdTY0IHhlX2NvbmZpZ2ZzX2dldF9lbmdpbmVzX2FsbG93ZWQo c3RydWN0IHBjaV9kZXYgKnBkZXYpCj4gPiAtewo+ID4gLcKgwqDCoMKgwqDCoMKgc3RydWN0IHhl X2NvbmZpZ19ncm91cF9kZXZpY2UgKmRldiA9Cj4gPiBmaW5kX3hlX2NvbmZpZ19ncm91cF9kZXZp Y2UocGRldik7Cj4gPiAtwqDCoMKgwqDCoMKgwqB1NjQgZW5naW5lc19hbGxvd2VkOwo+ID4gLQo+ ID4gLcKgwqDCoMKgwqDCoMKgaWYgKCFkZXYpCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0dXJuIGRldmljZV9kZWZhdWx0cy5lbmdpbmVzX2FsbG93ZWQ7Cj4gPiAtCj4gPiAt wqDCoMKgwqDCoMKgwqBzY29wZWRfZ3VhcmQobXV0ZXgsICZkZXYtPmxvY2spCj4gPiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZW5naW5lc19hbGxvd2VkID0gZGV2LT5jb25maWcuZW5n aW5lc19hbGxvd2VkOwo+ID4gLcKgwqDCoMKgwqDCoMKgY29uZmlnX2dyb3VwX3B1dCgmZGV2LT5n cm91cCk7Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqByZXR1cm4gZW5naW5lc19hbGxvd2VkOwo+ ID4gLX0KPiA+IC0KPiA+IC0vKioKPiA+IC0gKiB4ZV9jb25maWdmc19nZXRfcHNtaV9lbmFibGVk IC0gZ2V0IGNvbmZpZ2ZzIGVuYWJsZV9wc21pIHNldHRpbmcKPiA+IC0gKiBAcGRldjogcGNpIGRl dmljZQo+ID4gLSAqCj4gPiAtICogUmV0dXJuOiBlbmFibGVfcHNtaSBzZXR0aW5nIGluIGNvbmZp Z2ZzCj4gPiAtICovCj4gPiAtYm9vbCB4ZV9jb25maWdmc19nZXRfcHNtaV9lbmFibGVkKHN0cnVj dCBwY2lfZGV2ICpwZGV2KQo+ID4gLXsKPiA+IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9jb25m aWdfZ3JvdXBfZGV2aWNlICpkZXYgPQo+ID4gZmluZF94ZV9jb25maWdfZ3JvdXBfZGV2aWNlKHBk ZXYpOwo+ID4gLcKgwqDCoMKgwqDCoMKgYm9vbCByZXQ7Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKg wqBpZiAoIWRldikKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gZmFs c2U7Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqBzY29wZWRfZ3VhcmQobXV0ZXgsICZkZXYtPmxv Y2spCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gZGV2LT5jb25maWcu ZW5hYmxlX3BzbWk7Cj4gPiAtwqDCoMKgwqDCoMKgwqBjb25maWdfZ3JvdXBfcHV0KCZkZXYtPmdy b3VwKTsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4gPiAtfQo+ID4gLQo+ ID4gLS8qKgo+ID4gLSAqIHhlX2NvbmZpZ2ZzX2dldF9lbmFibGVfbXVsdGlfcXVldWUgLSBnZXQg Y29uZmlnZnMKPiA+IGVuYWJsZV9tdWx0aV9xdWV1ZSBzZXR0aW5nCj4gPiAtICogQHBkZXY6IHBj aSBkZXZpY2UKPiA+IC0gKgo+ID4gLSAqIFJldHVybjogdHJ1ZSBpZiBtdWx0aS1xdWV1ZSBpcyBl bmFibGVkIGZvciB0aGlzIGRldmljZSAodGhlCj4gPiBkZWZhdWx0KSwKPiA+IC0gKiBmYWxzZSBp ZiBpdCBoYXMgYmVlbiBmb3JjZS1kaXNhYmxlZCB2aWEgY29uZmlnZnMuCj4gPiAtICovCj4gPiAt Ym9vbCB4ZV9jb25maWdmc19nZXRfZW5hYmxlX211bHRpX3F1ZXVlKHN0cnVjdCBwY2lfZGV2ICpw ZGV2KQo+ID4gLXsKPiA+IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9jb25maWdfZ3JvdXBfZGV2 aWNlICpkZXYgPQo+ID4gZmluZF94ZV9jb25maWdfZ3JvdXBfZGV2aWNlKHBkZXYpOwo+ID4gLcKg wqDCoMKgwqDCoMKgYm9vbCByZXQ7Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqBpZiAoIWRldikK PiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gdHJ1ZTsKPiA+IC0KPiA+ IC3CoMKgwqDCoMKgwqDCoHNjb3BlZF9ndWFyZChtdXRleCwgJmRldi0+bG9jaykKPiA+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBkZXYtPmNvbmZpZy5lbmFibGVfbXVsdGlf cXVldWU7Cj4gPiAtwqDCoMKgwqDCoMKgwqBjb25maWdfZ3JvdXBfcHV0KCZkZXYtPmdyb3VwKTsK PiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4gPiAtfQo+ID4gLQo+ID4gLS8q Kgo+ID4gLSAqIHhlX2NvbmZpZ2ZzX2dldF9jdHhfcmVzdG9yZV9taWRfYmIgLSBnZXQgY29uZmln ZnMKPiA+IGN0eF9yZXN0b3JlX21pZF9iYiBzZXR0aW5nCj4gPiAtICogQHBkZXY6IHBjaSBkZXZp Y2UKPiA+IC0gKiBAY2xhc3M6IGh3IGVuZ2luZSBjbGFzcwo+ID4gLSAqIEBjczogcG9pbnRlciB0 byB0aGUgYmIgdG8gdXNlIC0gb25seSB2YWxpZCBkdXJpbmcgcHJvYmUKPiA+IC0gKgo+ID4gLSAq IFJldHVybjogTnVtYmVyIG9mIGR3b3JkcyB1c2VkIGluIHRoZSBtaWRfY3R4X3Jlc3RvcmUgc2V0 dGluZyBpbgo+ID4gY29uZmlnZnMKPiA+IC0gKi8KPiA+IC11MzIgeGVfY29uZmlnZnNfZ2V0X2N0 eF9yZXN0b3JlX21pZF9iYihzdHJ1Y3QgcGNpX2RldiAqcGRldiwKPiA+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBlbnVtIHhlX2VuZ2luZV9jbGFzcyBjbGFzcywKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBj b25zdCB1MzIgKipjcykKPiA+IC17Cj4gPiAtwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfY29uZmln X2dyb3VwX2RldmljZSAqZGV2ID0KPiA+IGZpbmRfeGVfY29uZmlnX2dyb3VwX2RldmljZShwZGV2 KTsKPiA+IC3CoMKgwqDCoMKgwqDCoHUzMiBsZW47Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqBp ZiAoIWRldikKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiA+ IC0KPiA+IC3CoMKgwqDCoMKgwqDCoHNjb3BlZF9ndWFyZChtdXRleCwgJmRldi0+bG9jaykgewo+ ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChjcykKPiA+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKmNzID0gZGV2LQo+ID4gPmNvbmZp Zy5jdHhfcmVzdG9yZV9taWRfYmJbY2xhc3NdLmNzOwo+ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGxlbiA9IGRldi0+Y29uZmlnLmN0eF9yZXN0b3JlX21pZF9iYltjbGFz c10ubGVuOwo+ID4gLcKgwqDCoMKgwqDCoMKgfQo+ID4gLcKgwqDCoMKgwqDCoMKgY29uZmlnX2dy b3VwX3B1dCgmZGV2LT5ncm91cCk7Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqByZXR1cm4gbGVu Owo+ID4gLX0KPiA+IC0KPiA+IC0vKioKPiA+IC0gKiB4ZV9jb25maWdmc19nZXRfY3R4X3Jlc3Rv cmVfcG9zdF9iYiAtIGdldCBjb25maWdmcwo+ID4gY3R4X3Jlc3RvcmVfcG9zdF9iYiBzZXR0aW5n Cj4gPiAtICogQHBkZXY6IHBjaSBkZXZpY2UKPiA+IC0gKiBAY2xhc3M6IGh3IGVuZ2luZSBjbGFz cwo+ID4gLSAqIEBjczogcG9pbnRlciB0byB0aGUgYmIgdG8gdXNlIC0gb25seSB2YWxpZCBkdXJp bmcgcHJvYmUKPiA+IC0gKgo+ID4gLSAqIFJldHVybjogTnVtYmVyIG9mIGR3b3JkcyB1c2VkIGlu IHRoZSBwb3N0X2N0eF9yZXN0b3JlIHNldHRpbmcKPiA+IGluIGNvbmZpZ2ZzCj4gPiAtICovCj4g PiAtdTMyIHhlX2NvbmZpZ2ZzX2dldF9jdHhfcmVzdG9yZV9wb3N0X2JiKHN0cnVjdCBwY2lfZGV2 ICpwZGV2LAo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVudW0geGVfZW5naW5lX2NsYXNzIGNs YXNzLAo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbnN0IHUzMiAqKmNzKQo+ID4gLXsKPiA+ IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9jb25maWdfZ3JvdXBfZGV2aWNlICpkZXYgPQo+ID4g ZmluZF94ZV9jb25maWdfZ3JvdXBfZGV2aWNlKHBkZXYpOwo+ID4gLcKgwqDCoMKgwqDCoMKgdTMy IGxlbjsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoGlmICghZGV2KQo+ID4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKgc2Nv cGVkX2d1YXJkKG11dGV4LCAmZGV2LT5sb2NrKSB7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgKmNzID0gZGV2LT5jb25maWcuY3R4X3Jlc3RvcmVfcG9zdF9iYltjbGFzc10uY3M7 Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGVuID0gZGV2LT5jb25maWcuY3R4 X3Jlc3RvcmVfcG9zdF9iYltjbGFzc10ubGVuOwo+ID4gLcKgwqDCoMKgwqDCoMKgfQo+ID4gLcKg wqDCoMKgwqDCoMKgY29uZmlnX2dyb3VwX3B1dCgmZGV2LT5ncm91cCk7Cj4gPiAtCj4gPiAtwqDC oMKgwqDCoMKgwqByZXR1cm4gbGVuOwo+ID4gLX0KPiA+IC0KPiA+IMKgI2lmZGVmIENPTkZJR19Q Q0lfSU9WCj4gPiDCoC8qKgo+ID4gwqAgKiB4ZV9jb25maWdmc19hZG1pbl9vbmx5X3BmKCkgLSBH ZXQgUEYncyBvcGVyYXRpb25hbCBtb2RlLgo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS94ZS94ZV9jb25maWdmcy5oCj4gPiBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9jb25maWdmcy5o Cj4gPiBpbmRleCA0ZmJiZWFmYmE0NzMuLmJiYTU5MmZiNjEyYyAxMDA2NDQKPiA+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS94ZS94ZV9jb25maWdmcy5oCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v eGUveGVfY29uZmlnZnMuaAo+ID4gQEAgLTE4LDE4ICsxOCwxOCBAQCBzdHJ1Y3QgcGNpX2RldjsK PiA+IMKgaW50IHhlX2NvbmZpZ2ZzX2luaXQodm9pZCk7Cj4gPiDCoHZvaWQgeGVfY29uZmlnZnNf ZXhpdCh2b2lkKTsKPiA+IMKgdm9pZCB4ZV9jb25maWdmc19jaGVja19kZXZpY2Uoc3RydWN0IHBj aV9kZXYgKnBkZXYpOwo+ID4gLWJvb2wgeGVfY29uZmlnZnNfZ2V0X3N1cnZpdmFiaWxpdHlfbW9k ZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7Cj4gPiAtYm9vbCB4ZV9jb25maWdmc19wcmltYXJ5X2d0 X2FsbG93ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwo+ID4gLWJvb2wgeGVfY29uZmlnZnNfbWVk aWFfZ3RfYWxsb3dlZChzdHJ1Y3QgcGNpX2RldiAqcGRldik7Cj4gPiAtdTY0IHhlX2NvbmZpZ2Zz X2dldF9lbmdpbmVzX2FsbG93ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwo+ID4gLWJvb2wgeGVf Y29uZmlnZnNfZ2V0X3BzbWlfZW5hYmxlZChzdHJ1Y3QgcGNpX2RldiAqcGRldik7Cj4gPiAtYm9v bCB4ZV9jb25maWdmc19nZXRfZW5hYmxlX211bHRpX3F1ZXVlKHN0cnVjdCBwY2lfZGV2ICpwZGV2 KTsKPiA+IMKgdTMyIHhlX2NvbmZpZ2ZzX2dldF9jdHhfcmVzdG9yZV9taWRfYmIoc3RydWN0IHBj aV9kZXYgKnBkZXYsCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVudW0geGVfZW5naW5lX2NsYXNz IGNsYXNzLAo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25zdCB1MzIgKipjcyk7Cj4gPiDCoHUz MiB4ZV9jb25maWdmc19nZXRfY3R4X3Jlc3RvcmVfcG9zdF9iYihzdHJ1Y3QgcGNpX2RldiAqcGRl diwKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZW51bSB4ZV9lbmdpbmVfY2xhc3MgY2xhc3Ms Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbnN0IHUzMiAqKmNzKTsKPiA+ICt1NjQgeGVf Y29uZmlnZnNfZ2V0X2VuZ2luZXNfYWxsb3dlZChzdHJ1Y3QgcGNpX2RldiAqcGRldik7Cj4gPiAr Ym9vbCB4ZV9jb25maWdmc19wcmltYXJ5X2d0X2FsbG93ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYp Owo+ID4gK2Jvb2wgeGVfY29uZmlnZnNfbWVkaWFfZ3RfYWxsb3dlZChzdHJ1Y3QgcGNpX2RldiAq cGRldik7Cj4gPiArYm9vbCB4ZV9jb25maWdmc19nZXRfZW5hYmxlX211bHRpX3F1ZXVlKHN0cnVj dCBwY2lfZGV2ICpwZGV2KTsKPiA+ICtib29sIHhlX2NvbmZpZ2ZzX2dldF9wc21pX2VuYWJsZWQo c3RydWN0IHBjaV9kZXYgKnBkZXYpOwo+ID4gK2Jvb2wgeGVfY29uZmlnZnNfZ2V0X3N1cnZpdmFi aWxpdHlfbW9kZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7Cj4gPiDCoCNpZmRlZiBDT05GSUdfUENJ X0lPVgo+ID4gwqB1bnNpZ25lZCBpbnQgeGVfY29uZmlnZnNfZ2V0X21heF92ZnMoc3RydWN0IHBj aV9kZXYgKnBkZXYpOwo+ID4gwqBib29sIHhlX2NvbmZpZ2ZzX2FkbWluX29ubHlfcGYoc3RydWN0 IHBjaV9kZXYgKnBkZXYpOwo+ID4gQEAgLTM4LDE4ICszOCwxOCBAQCBib29sIHhlX2NvbmZpZ2Zz X2FkbWluX29ubHlfcGYoc3RydWN0IHBjaV9kZXYKPiA+ICpwZGV2KTsKPiA+IMKgc3RhdGljIGlu bGluZSBpbnQgeGVfY29uZmlnZnNfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9Cj4gPiDCoHN0YXRp YyBpbmxpbmUgdm9pZCB4ZV9jb25maWdmc19leGl0KHZvaWQpIHsgfQo+ID4gwqBzdGF0aWMgaW5s aW5lIHZvaWQgeGVfY29uZmlnZnNfY2hlY2tfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQo+ ID4geyB9Cj4gPiAtc3RhdGljIGlubGluZSBib29sIHhlX2NvbmZpZ2ZzX2dldF9zdXJ2aXZhYmls aXR5X21vZGUoc3RydWN0Cj4gPiBwY2lfZGV2ICpwZGV2KSB7IHJldHVybiBmYWxzZTsgfQo+ID4g LXN0YXRpYyBpbmxpbmUgYm9vbCB4ZV9jb25maWdmc19wcmltYXJ5X2d0X2FsbG93ZWQoc3RydWN0 IHBjaV9kZXYKPiA+ICpwZGV2KSB7IHJldHVybiB0cnVlOyB9Cj4gPiAtc3RhdGljIGlubGluZSBi b29sIHhlX2NvbmZpZ2ZzX21lZGlhX2d0X2FsbG93ZWQoc3RydWN0IHBjaV9kZXYKPiA+ICpwZGV2 KSB7IHJldHVybiB0cnVlOyB9Cj4gPiAtc3RhdGljIGlubGluZSB1NjQgeGVfY29uZmlnZnNfZ2V0 X2VuZ2luZXNfYWxsb3dlZChzdHJ1Y3QgcGNpX2Rldgo+ID4gKnBkZXYpIHsgcmV0dXJuIFU2NF9N QVg7IH0KPiA+IC1zdGF0aWMgaW5saW5lIGJvb2wgeGVfY29uZmlnZnNfZ2V0X3BzbWlfZW5hYmxl ZChzdHJ1Y3QgcGNpX2Rldgo+ID4gKnBkZXYpIHsgcmV0dXJuIGZhbHNlOyB9Cj4gPiAtc3RhdGlj IGlubGluZSBib29sIHhlX2NvbmZpZ2ZzX2dldF9lbmFibGVfbXVsdGlfcXVldWUoc3RydWN0Cj4g PiBwY2lfZGV2ICpwZGV2KSB7IHJldHVybiB0cnVlOyB9Cj4gPiDCoHN0YXRpYyBpbmxpbmUgdTMy IHhlX2NvbmZpZ2ZzX2dldF9jdHhfcmVzdG9yZV9taWRfYmIoc3RydWN0Cj4gPiBwY2lfZGV2ICpw ZGV2LAo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg ZW51bQo+ID4geGVfZW5naW5lX2NsYXNzIGNsYXNzLAo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3QgdTMyCj4gPiAqKmNzKSB7IHJldHVybiAw OyB9Cj4gPiDCoHN0YXRpYyBpbmxpbmUgdTMyIHhlX2NvbmZpZ2ZzX2dldF9jdHhfcmVzdG9yZV9w b3N0X2JiKHN0cnVjdAo+ID4gcGNpX2RldiAqcGRldiwKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZW51bQo+ID4geGVfZW5naW5lX2NsYXNzIGNs YXNzLAo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBjb25zdCB1MzIKPiA+ICoqY3MpIHsgcmV0dXJuIDA7IH0KPiA+ICtzdGF0aWMgaW5saW5lIHU2 NCB4ZV9jb25maWdmc19nZXRfZW5naW5lc19hbGxvd2VkKHN0cnVjdCBwY2lfZGV2Cj4gPiAqcGRl dikgeyByZXR1cm4gVTY0X01BWDsgfQo+ID4gK3N0YXRpYyBpbmxpbmUgYm9vbCB4ZV9jb25maWdm c19wcmltYXJ5X2d0X2FsbG93ZWQoc3RydWN0IHBjaV9kZXYKPiA+ICpwZGV2KSB7IHJldHVybiB0 cnVlOyB9Cj4gPiArc3RhdGljIGlubGluZSBib29sIHhlX2NvbmZpZ2ZzX21lZGlhX2d0X2FsbG93 ZWQoc3RydWN0IHBjaV9kZXYKPiA+ICpwZGV2KSB7IHJldHVybiB0cnVlOyB9Cj4gPiArc3RhdGlj IGlubGluZSBib29sIHhlX2NvbmZpZ2ZzX2dldF9lbmFibGVfbXVsdGlfcXVldWUoc3RydWN0Cj4g PiBwY2lfZGV2ICpwZGV2KSB7IHJldHVybiB0cnVlOyB9Cj4gPiArc3RhdGljIGlubGluZSBib29s IHhlX2NvbmZpZ2ZzX2dldF9wc21pX2VuYWJsZWQoc3RydWN0IHBjaV9kZXYKPiA+ICpwZGV2KSB7 IHJldHVybiBmYWxzZTsgfQo+ID4gK3N0YXRpYyBpbmxpbmUgYm9vbCB4ZV9jb25maWdmc19nZXRf c3Vydml2YWJpbGl0eV9tb2RlKHN0cnVjdAo+ID4gcGNpX2RldiAqcGRldikgeyByZXR1cm4gZmFs c2U7IH0KPiA+IMKgI2lmZGVmIENPTkZJR19QQ0lfSU9WCj4gPiDCoHN0YXRpYyBpbmxpbmUgdW5z aWduZWQgaW50IHhlX2NvbmZpZ2ZzX2dldF9tYXhfdmZzKHN0cnVjdCBwY2lfZGV2Cj4gPiAqcGRl dikKPiA+IMKgewo+ID4gLS0gCj4gPiAyLjQzLjAKPiA+IAo+IAoK