Received: by 2002:a05:7412:798b:b0:fc:a2b0:25d7 with SMTP id fb11csp253500rdb; Thu, 22 Feb 2024 02:38:03 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCUMqRdxK25Je5w9PYY/fX7uNRxZRfDXp7OVnHj7SK3N0zEG02vByVNy/Gclqt61V1/PZpCEFJN/rAJfkKZXksuy+ANucsPWI/d0gpgdfg== X-Google-Smtp-Source: AGHT+IHY0K2I7gcQvwNOI/wtMoF4l5ppsvZY5iGqK0SvYqSv/uC7OqSwMMomes2vpeETNBOUpnTK X-Received: by 2002:a17:906:f202:b0:a3d:bb58:bb2e with SMTP id gt2-20020a170906f20200b00a3dbb58bb2emr13810957ejb.36.1708598283724; Thu, 22 Feb 2024 02:38:03 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1708598283; cv=pass; d=google.com; s=arc-20160816; b=h5n19Tho+HlScIleZdUVGVIZbhe4sek5h7oYXP4ZLaXUd4tHKFL4Qz6L/lToVQpCS1 o7oiXjjDv+sDvKI2Bgd5tmLqp5A0GpRPZMSAJFD/MhST5COKYjdVsceDTM2d6jHx8kJm WaDgruZwadiul5sexkyamEvAIrtVWA1tYtwJwzAXPVbcQ8LFAkpLwdDrqokHM+bcHdW1 6sS39aEk6mmZAIIXSt7BH5cvM9DDL6vDZ+DiUQfvaNBV4qjoeFmfRLAnAk772PZW3Hi3 oDNcAIwyZJ8azGysxaZYg3z6aN3Z10IsfkYJ1ukBvotYOJWAZ+JOWJfZMco4T33LO+NB EUVw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=ui-outboundreport:content-transfer-encoding:in-reply-to:from :content-language:references:cc:to:subject:user-agent:mime-version :list-unsubscribe:list-subscribe:list-id:precedence:date:message-id :dkim-signature; bh=XkMmPaDJC2digdifHNHxroIc8uomG8v/u6X53OssCyU=; fh=0urEHNwL3sQ5eb7O00KEZ2vQ0pLtKfPkmD/uNEwPwMk=; b=igqUy0885nVMQKPO0zSZvp7cRFbW/fYJfVZGUYnytwVDCjAI3Z3og0kcTWfCyD6tjU A2sJd6EjKWF/ZIJx6kC6r7m+KySkcL3IDgQJMjSwYP8FRc2Sz0RWdCdd6hVHcr+s4D58 sj+0d6/0mRDdlJqWp4GhK9fPfycIPd9ey/7rlB/Iczl33Gw50Z9vvVMhtTvZo/Mn3OB0 O1On5VOKidTXi31s3d5aiK5pbBpVMI12GF5lLm0p4XhDYCq2rlSmuRqghxbfW4+0pLVY hnm+nPrlRX9W+DvS9p5OYbHNYcqq/2qhNKO6gor+4B4gBYPP3UU5YhGx0sTc4YyIQtwS zS1w==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@gmx.de header.s=s31663417 header.b=uV+ixZ2K; arc=pass (i=1 spf=pass spfdomain=gmx.de dkim=pass dkdomain=gmx.de dmarc=pass fromdomain=gmx.de); spf=pass (google.com: domain of linux-kernel+bounces-76329-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-76329-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=gmx.de Return-Path: Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [147.75.80.249]) by mx.google.com with ESMTPS id bt23-20020a170906b15700b00a3f28626128si1544147ejb.385.2024.02.22.02.38.03 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Feb 2024 02:38:03 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-76329-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) client-ip=147.75.80.249; Authentication-Results: mx.google.com; dkim=pass header.i=@gmx.de header.s=s31663417 header.b=uV+ixZ2K; arc=pass (i=1 spf=pass spfdomain=gmx.de dkim=pass dkdomain=gmx.de dmarc=pass fromdomain=gmx.de); spf=pass (google.com: domain of linux-kernel+bounces-76329-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-76329-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=gmx.de Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 072221F284E3 for ; Thu, 22 Feb 2024 10:27:59 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id C07383F9E7; Thu, 22 Feb 2024 10:27:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b="uV+ixZ2K" Received: from mout.gmx.net (mout.gmx.net [212.227.17.20]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 469C33EA93; Thu, 22 Feb 2024 10:27:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.17.20 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708597632; cv=none; b=RD1NGqc+EhWvgP8/E1pznITf9J7WuI2cWZGnov8sjNkJo9bYG8LSxsjaBiLrNiPQhkE2v/MiKLvw4flTP1I4rnQRGTMqOrHaPtLAGgnrjTGuP+34LRAHIcc2mbhreaI52Nnh7KYqIA6RSpF8mUnmj0svVqYH3N2/T2Ru196rPGI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708597632; c=relaxed/simple; bh=XkMmPaDJC2digdifHNHxroIc8uomG8v/u6X53OssCyU=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=T1dRWy5Oik3uFhw6LKyMGCgGnrGkRw+8ym/27gk7sNPrXCduni4hXQh6DFIrllTDteLzC6nYi+alk1WCeyYMfIoB3LVEI6PkqgpT0dtwiQ8eeFM/N7GpqycVDDxJVFglzPQE1p8tp3/ae9nF00tRWWCzMhMiInGVNlB7Rqod45M= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de; spf=pass smtp.mailfrom=gmx.de; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b=uV+ixZ2K; arc=none smtp.client-ip=212.227.17.20 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.de DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.de; s=s31663417; t=1708597607; x=1709202407; i=w_armin@gmx.de; bh=XkMmPaDJC2digdifHNHxroIc8uomG8v/u6X53OssCyU=; h=X-UI-Sender-Class:Date:Subject:To:Cc:References:From: In-Reply-To; b=uV+ixZ2KM1DsLD8tWqTjd262oHEW71A8RZxLhkYk8TO4RpfbYIj4PTcloONmnMn2 OqXvs+/CQRSfQiMwz0Ja5tS97KMBswOtdYpXEokoqIPvGQmSJ16VtlkgPVGetjU15 8uZffCacvByrgnHckiGrQGfZEWMT2AB3uqyy4MCe+Labr3kb0/BQZRdzwllhSwc4O 2XE2uGR7JcHJxpyf5b5lJSyBNlRA/kGhgrpec1UZOjAQjD9Ea2lt37Rkqsdd2bjlf vFCEyDGxweShzuaYHjztAgMmagkjPusXxkA76XxseBOt3/9O+Res4m/4uapjiGImD NX+yNGk9UhcNMeTDQg== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from [141.30.226.129] ([141.30.226.129]) by mail.gmx.net (mrgmx104 [212.227.17.168]) with ESMTPSA (Nemesis) id 1M4s51-1rbBHE2vDD-0021g3; Thu, 22 Feb 2024 11:26:47 +0100 Message-ID: Date: Thu, 22 Feb 2024 11:26:45 +0100 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] Add wmi driver support for Casper Excalibur laptops. To: Guenter Roeck , =?UTF-8?Q?Mustafa_Ek=C5=9Fi?= , hdegoede@redhat.com, ilpo.jarvinen@linux.intel.com, linux-kernel@vger.kernel.org, platform-driver-x86@vger.kernel.org, linux-hwmon@vger.kernel.org Cc: jdelvare@suse.com References: <20240221221549.640515-1-mustafa.eskieksi@gmail.com> <042951f1-200f-4d89-b968-ea68c52ea607@roeck-us.net> Content-Language: en-US From: Armin Wolf In-Reply-To: <042951f1-200f-4d89-b968-ea68c52ea607@roeck-us.net> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 X-Provags-ID: V03:K1:knWaZkolgL2yc/3jylHCoVHz4SUk9HUeW59BpZ++qSEufRJHGfW oPC87Uz+u9yrSQQMloCYAVO41oAC6WxbyK9z7Dk2LYGDshbiCRg/i9/SsDpo8MNfdPcxsL4 jYHp6yMC3LfmtrpBPLmbMM6Y7hSYqRT505PwSf12otze/W7YLPe9xK6YZaax5psaQ7r74vJ adxV7egWu4DFdZCn5ncIA== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:fnDAW7Ppfzk=;bHR985ghvZGvFDRKPrr/dVm9UYV brvQAu6UDuA7R9rJQlvmoiEB8DyHs9ngtXsDFfMx2AmHc5FP3xQODDn3sngMMPzkTfOxeYgLd 1QZHgx1Y/ZNJAnX1msORqkCzcYrYJs7Aax3Hh/WsZk/dwB0MT2O07VtBi8OkYxAJbm5aLEJbj da42TSGrYxXFI+ZeJwFcIUSdas5KL5rnGG2/YvGxAlZDE3Q86oLug1zuLDlukmTVu0hR94whi edPKJiXRMtYtgfIlQ5QEHVgmKwqBcafHYwQ94J+Gvomi1lp+M9l76P3YvLWEUG99jGHpQmJX9 dwo8aXWNNF/a3DUSzA5FNOqVL4Wv4hlSXDAAxox7WzZ/v8WSvJvfXNoiEZFHmudgjrgteqyiT ybVeWle39oJ4hnGLeS5B7i1rXzfI8jL6j6u+b5SzyZpsZYjPmZg8ebI+abSjvTOhqAIVn2sTL Z8XdwIzFbnHyeoSXFduChR2zCCLPFlGDJyYqopJqKyTLj4n9Dy1L1dUrsTnpIt75AW6H/uFhM QW2GSXDS6aIf1ny3BeL6YLsCO4kb8cZ6ekRWAECcdzqo9Wq2mSnYumEhu0jbaq71Xkm8zbKFE tb9BCxK+4n2ZjAUyRvNW4sMCH1a1gtCBhAsPdYjanIv5PhD2XNiZqhu0nAkR/asqEGaWny3RG RoikE16MzqQaILytjhz0qT/Z/HazYN8VISDmdGMw+okhg8Emppgi9UJE6TigJ6dAw0kzQ3D5D 4aQGJT6Uq2IhU9YkeSGydPwPBlV2/zGrIWTPAMyBsDEgb6bPjWZls3NWrQ7SpfgM3K6AaNiad lALSxtxO4nie2VJ+o0tdPzc5IIDJG1BlLOLOCn4kN9kOY= QW0gMjEuMDIuMjQgdW0gMjM6NTUgc2NocmllYiBHdWVudGVyIFJvZWNrOg0KDQo+IE9uIDIvMjEv MjQgMTQ6MTUsIE11c3RhZmEgRWvFn2kgd3JvdGU6DQo+PiBTaWduZWQtb2ZmLWJ5OiBNdXN0YWZh IEVrxZ9pIDxtdXN0YWZhLmVza2lla3NpQGdtYWlsLmNvbT4NCj4+IC0tLQ0KPj4gwqAgTUFJTlRB SU5FUlPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCA2 ICsNCj4+IMKgIGRyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWfCoMKgwqDCoMKgIHzCoCAxNCAr Kw0KPj4gwqAgZHJpdmVycy9wbGF0Zm9ybS94ODYvTWFrZWZpbGXCoMKgwqDCoCB8wqDCoCAxICsN Cj4+IMKgIGRyaXZlcnMvcGxhdGZvcm0veDg2L2Nhc3Blci13bWkuYyB8IDM0NCArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysNCj4+IMKgIDQgZmlsZXMgY2hhbmdlZCwgMzY1IGluc2VydGlv bnMoKykNCj4+IMKgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3BsYXRmb3JtL3g4Ni9jYXNw ZXItd21pLmMNCj4+DQo+PiBkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUw0K Pj4gaW5kZXggOWVkNGQzODY4NTMuLmQwMTQyYTc1ZDJjIDEwMDY0NA0KPj4gLS0tIGEvTUFJTlRB SU5FUlMNCj4+ICsrKyBiL01BSU5UQUlORVJTDQo+PiBAQCAtNDcyMyw2ICs0NzIzLDEyIEBAIFM6 wqDCoMKgIE1haW50YWluZWQNCj4+IMKgIFc6IGh0dHBzOi8vd2lyZWxlc3Mud2lraS5rZXJuZWwu b3JnL2VuL3VzZXJzL0RyaXZlcnMvY2FybDkxNzANCj4+IMKgIEY6wqDCoMKgIGRyaXZlcnMvbmV0 L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC8NCj4+IMKgICtDQVNQRVIgRVhDQUxJQlVSIFdNSSBEUklW RVINCj4+ICtNOsKgwqDCoCBNdXN0YWZhIEVrxZ9pIDxtdXN0YWZhLmVza2lla3NpQGdtYWlsLmNv bT4NCj4+ICtMOsKgwqDCoCBwbGF0Zm9ybS1kcml2ZXIteDg2QHZnZXIua2VybmVsLm9yZw0KPj4g K1M6wqDCoMKgIE1haW50YWluZWQNCj4+ICtGOsKgwqDCoCBkcml2ZXJzL3BsYXRmb3JtL3g4Ni9j YXNwZXItd21pLmMNCj4+ICsNCj4+IMKgIENBVklVTSBJMkMgRFJJVkVSDQo+PiDCoCBNOsKgwqDC oCBSb2JlcnQgUmljaHRlciA8cnJpY0BrZXJuZWwub3JnPg0KPj4gwqAgUzrCoMKgwqAgT2RkIEZp eGVzDQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZyBiL2RyaXZl cnMvcGxhdGZvcm0veDg2L0tjb25maWcNCj4+IGluZGV4IGJkZDMwMjI3NGI5Li5lYmVmOWM5ZGZi NiAxMDA2NDQNCj4+IC0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcNCj4+ICsrKyBi L2RyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcNCj4+IEBAIC0xMTI3LDYgKzExMjcsMjAgQEAg Y29uZmlnIFNFTDMzNTBfUExBVEZPUk0NCj4+IMKgwqDCoMKgwqDCoMKgIFRvIGNvbXBpbGUgdGhp cyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUNCj4+IMKgwqDC oMKgwqDCoMKgIHdpbGwgYmUgY2FsbGVkIHNlbDMzNTAtcGxhdGZvcm0uDQo+PiDCoCArY29uZmln IENBU1BFUl9XTUkNCj4+ICvCoMKgwqAgdHJpc3RhdGUgIkNhc3BlciBFeGNhbGlidXIgTGFwdG9w IFdNSSBkcml2ZXIiDQo+PiArwqDCoMKgIGRlcGVuZHMgb24gQUNQSV9XTUkNCj4+ICvCoMKgwqAg ZGVwZW5kcyBvbiBIV01PTg0KPj4gK8KgwqDCoCBzZWxlY3QgTkVXX0xFRFMNCj4+ICvCoMKgwqAg c2VsZWN0IExFRFNfQ0xBU1MNCj4+ICvCoMKgwqAgaGVscA0KPj4gK8KgwqDCoMKgwqAgU2F5IFkg aGVyZSBpZiB5b3Ugd2FudCB0byBzdXBwb3J0IFdNSS1iYXNlZCBmYW4gc3BlZWQgcmVwb3J0aW5n LA0KPj4gK8KgwqDCoMKgwqAgcG93ZXIgbWFuYWdlbWVudCBhbmQga2V5Ym9hcmQgYmFja2xpZ2h0 IHN1cHBvcnQgb24gQ2FzcGVyIA0KPj4gRXhjYWxpYnVyDQo+PiArwqDCoMKgwqDCoCBMYXB0b3Bz Lg0KPj4gKw0KPj4gK8KgwqDCoMKgwqAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVs ZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSANCj4+IHdpbGwNCj4+ICvCoMKgwqDCoMKgIGJl IGNhbGxlZCBjYXNwZXItd21pLg0KPj4gKw0KPj4gwqAgZW5kaWYgIyBYODZfUExBVEZPUk1fREVW SUNFUw0KPj4gwqAgwqAgY29uZmlnIFAyU0INCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRm b3JtL3g4Ni9NYWtlZmlsZSANCj4+IGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvTWFrZWZpbGUNCj4+ IGluZGV4IDFkZTQzMmU4ODYxLi40YjUyN2RkNDRhZCAxMDA2NDQNCj4+IC0tLSBhL2RyaXZlcnMv cGxhdGZvcm0veDg2L01ha2VmaWxlDQo+PiArKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9NYWtl ZmlsZQ0KPj4gQEAgLTE0LDYgKzE0LDcgQEAgb2JqLSQoQ09ORklHX01YTV9XTUkpwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCArPSBteG0td21pLm8NCj4+IMKgIG9iai0kKENPTkZJR19OVklESUFfV01J X0VDX0JBQ0tMSUdIVCnCoMKgwqAgKz0gbnZpZGlhLXdtaS1lYy1iYWNrbGlnaHQubw0KPj4gwqAg b2JqLSQoQ09ORklHX1hJQU9NSV9XTUkpwqDCoMKgwqDCoMKgwqAgKz0geGlhb21pLXdtaS5vDQo+ PiDCoCBvYmotJChDT05GSUdfR0lHQUJZVEVfV01JKcKgwqDCoMKgwqDCoMKgICs9IGdpZ2FieXRl LXdtaS5vDQo+PiArb2JqLSQoQ09ORklHX0NBU1BFUl9XTUkpwqDCoMKgwqDCoMKgwqAgKz0gY2Fz cGVyLXdtaS5vDQo+PiDCoCDCoCAjIEFjZXINCj4+IMKgIG9iai0kKENPTkZJR19BQ0VSSERGKcKg wqDCoMKgwqDCoMKgICs9IGFjZXJoZGYubw0KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZv cm0veDg2L2Nhc3Blci13bWkuYyANCj4+IGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvY2FzcGVyLXdt aS5jDQo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPj4gaW5kZXggMDAwMDAwMDAwMDAuLmFhZTA4 MjAyYjE5DQo+PiAtLS0gL2Rldi9udWxsDQo+PiArKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9j YXNwZXItd21pLmMNCj4+IEBAIC0wLDAgKzEsMzQ0IEBADQo+PiArLy8gU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXINCj4+ICsNCj4+ICsjaW5jbHVkZSA8bGludXgvYWNw aS5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L3Ns YWIuaD4NCj4+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4 L3dtaS5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4NCj4+ICsjaW5jbHVkZSA8bGlu dXgvZGV2X3ByaW50ay5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9od21vbi5oPg0KPj4gKyNpbmNs dWRlIDxsaW51eC9zeXNmcy5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPg0KPj4gKyNp bmNsdWRlIDxsaW51eC9kbWkuaD4NCj4+ICsjaW5jbHVkZSA8YWNwaS9hY2V4Y2VwLmg+DQo+PiAr DQo+PiArTU9EVUxFX0FVVEhPUigiTXVzdGFmYSBFa8WfaSA8bXVzdGFmYS5lc2tpZWtzaUBnbWFp bC5jb20+Iik7DQo+PiArTU9EVUxFX0RFU0NSSVBUSU9OKCJDYXNwZXIgRXhjYWxpYnVyIExhcHRv cCBXTUkgZHJpdmVyIik7DQo+PiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOw0KPj4gKw0KPj4gKyNk ZWZpbmUgQ0FTUEVSX1dNSV9HVUlEICI2NDRDNTc5MS1CN0IwLTQxMjMtQTkwQi1FOTM4NzZFMERB QUQiDQo+PiArDQo+PiArI2RlZmluZSBDQVNQRVJfUkVBRCAweGZhMDANCj4+ICsjZGVmaW5lIENB U1BFUl9XUklURSAweGZiMDANCj4+ICsjZGVmaW5lIENBU1BFUl9HRVRfSEFSRFdBUkVJTkZPIDB4 MDIwMA0KPj4gKyNkZWZpbmUgQ0FTUEVSX1NFVF9MRUQgMHgwMTAwDQo+PiArI2RlZmluZSBDQVNQ RVJfUE9XRVJQTEFOIDB4MDMwMA0KPj4gKw0KPj4gKyNkZWZpbmUgQ0FTUEVSX0tFWUJPQVJEX0xF RF8xIDB4MDMNCj4+ICsjZGVmaW5lIENBU1BFUl9LRVlCT0FSRF9MRURfMiAweDA0DQo+PiArI2Rl ZmluZSBDQVNQRVJfS0VZQk9BUkRfTEVEXzMgMHgwNQ0KPj4gKyNkZWZpbmUgQ0FTUEVSX0FMTF9L RVlCT0FSRF9MRURTIDB4MDYNCj4+ICsjZGVmaW5lIENBU1BFUl9DT1JORVJfTEVEUyAweDA3DQo+ PiArDQo+PiArc3RydWN0IGNhc3Blcl93bWlfYXJncyB7DQo+PiArwqDCoMKgIHUxNiBhMCwgYTE7 DQo+PiArwqDCoMKgIHUzMiBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhODsNCj4+ICt9Ow0KPj4g Kw0KPj4gK3N0YXRpYyB1MzIgY2FzcGVyX2xhc3RfY29sb3I7DQo+PiArc3RhdGljIHU4IGNhc3Bl cl9sYXN0X2xlZDsNCj4+ICsNCj4+ICtzdGF0aWMgYWNwaV9zdGF0dXMgY2FzcGVyX3NldChzdHJ1 Y3Qgd21pX2RldmljZSAqd2RldiwgdTE2IGExLCB1OCANCj4+IGxlZF9pZCwNCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHUzMiBkYXRhKQ0KPj4gK3sNCj4+ICvCoMKgwqAg c3RydWN0IGNhc3Blcl93bWlfYXJncyB3bWlfYXJncyA9IHsNCj4+ICvCoMKgwqDCoMKgwqDCoCAu YTAgPSBDQVNQRVJfV1JJVEUsDQo+PiArwqDCoMKgwqDCoMKgwqAgLmExID0gYTEsDQo+PiArwqDC oMKgwqDCoMKgwqAgLmEyID0gbGVkX2lkLA0KPj4gK8KgwqDCoMKgwqDCoMKgIC5hMyA9IGRhdGEN Cj4+ICvCoMKgwqAgfTsNCj4+ICvCoMKgwqAgc3RydWN0IGFjcGlfYnVmZmVyIGlucHV0ID0gew0K Pj4gK8KgwqDCoMKgwqDCoMKgIChhY3BpX3NpemUpIHNpemVvZihzdHJ1Y3QgY2FzcGVyX3dtaV9h cmdzKSwNCj4+ICvCoMKgwqDCoMKgwqDCoCAmd21pX2FyZ3MNCj4+ICvCoMKgwqAgfTsNCj4+ICvC oMKgwqAgcmV0dXJuIHdtaWRldl9ibG9ja19zZXQod2RldiwgMCwgJmlucHV0KTsNCj4+ICt9DQo+ PiArDQo+PiArc3RhdGljIHNzaXplX3QgbGVkX2NvbnRyb2xfc2hvdyhzdHJ1Y3QgZGV2aWNlICpk ZXYsIHN0cnVjdCANCj4+IGRldmljZV9hdHRyaWJ1dGUNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgKmF0dHIsIGNoYXIgKmJ1ZikNCj4+ICt7DQo+PiArwqDCoMKgIHJldHVybiBz cHJpbnRmKCIldSUwOHhcbiIsIGJ1ZiwgY2FzcGVyX2xhc3RfbGVkLA0KPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgY2FzcGVyX2xhc3RfY29sb3IpOw0KPj4gK30NCj4+ICsNCj4+ICsN Cj4+ICsvLyBpbnB1dCBpcyBmb3JtYXR0ZWQgYXMgIklNQVJSR0dCQiIsIEk6IGxlZF9pZCwgTTog bW9kZSwgQTogDQo+PiBicmlnaHRuZXNzLCAuLi4NCj4+ICtzdGF0aWMgc3NpemVfdCBsZWRfY29u dHJvbF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCANCj4+IGRldmljZV9hdHRyaWJ1 dGUNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqYXR0ciwgY29uc3QgY2hh ciAqYnVmLCBzaXplX3QgY291bnQpDQo+PiArew0KPj4gK8KgwqDCoCB1NjQgdG1wOw0KPj4gK8Kg wqDCoCBpbnQgcmV0Ow0KPj4gKw0KPj4gK8KgwqDCoCByZXQgPSBrc3RydG91NjQoYnVmLCAxNiwg JnRtcCk7DQo+DQo+IFdoYXQgZXhhdGx5IGlzIHRoZSBwb2ludCBvZiB1NjQgYW5kIGtzdHJ0b3U2 NCgpID8NCj4NCj4+ICsNCj4+ICvCoMKgwqAgaWYgKHJldCkNCj4+ICvCoMKgwqDCoMKgwqDCoCBy ZXR1cm4gcmV0Ow0KPj4gKw0KPj4gK8KgwqDCoCB1OCBsZWRfaWQgPSAodG1wID4+ICg4ICogNCkp JjB4RkY7DQo+DQo+IFRoaXMgd2lsbCByZXN1bHQgaW4gaW50ZXJlc3RpbmcgTEVEIElEcyBiYXNl ZCBvbiB1NjQgaW5wdXQuIFRvIG1lIGl0IA0KPiBsb29rcw0KPiB2ZXJ5IG11Y2ggbGlrZSBhIHBv b3IgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuIERvZXMgdGhpcyBmb2xsb3cgd29tZSBraW5kDQo+ IG9mIExFRCBzdWJzeXN0ZW0gQVBJID8NCj4NCj4+ICsNCj4+ICvCoMKgwqAgcmV0ID0NCj4+ICvC oMKgwqDCoMKgwqDCoCBjYXNwZXJfc2V0KHRvX3dtaV9kZXZpY2UoZGV2LT5wYXJlbnQpLCBDQVNQ RVJfU0VUX0xFRCwgbGVkX2lkLA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKHUz MikgdG1wDQo+PiArwqDCoMKgwqDCoMKgwqAgKTsNCj4NCj4gT2RkIGxpbmUgYnJlYWtzLiBEb2Vz IHRoaXMgcGFzcyBjaGVja3BhdGNoID8NCj4NCj4+ICvCoMKgwqAgaWYgKEFDUElfRkFJTFVSRShy ZXQpKSB7DQo+PiArwqDCoMKgwqDCoMKgwqAgZGV2X2VycihkZXYsICJjYXNwZXItd21pIEFDUEkg c3RhdHVzOiAlZFxuIiwgcmV0KTsNCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Ow0KPg0K PiBUaGUgZnVuY3Rpb24gcmV0dXJuIGNvZGUgaXMgc3VwcG9zZWQgdG8gYmUgYSBMaW51eCBlcnJv ciBjb2RlLg0KPiBBcyBmb3IgdGhlIGZ1bmN0aW9ucyBiZWxvdywgSSB3b3VsZCByZWplY3QgdGhp cyBwYXRjaCBkdWUgdG8gaXRzDQo+IGxvZ2dpbmcgbm9pc2UuDQo+DQo+PiArwqDCoMKgIH0NCj4+ ICvCoMKgwqAgaWYgKGxlZF9pZCAhPSBDQVNQRVJfQ09STkVSX0xFRFMpIHsNCj4+ICvCoMKgwqDC oMKgwqDCoCBjYXNwZXJfbGFzdF9jb2xvciA9ICh1MzIpIHRtcDsNCj4+ICvCoMKgwqDCoMKgwqDC oCBjYXNwZXJfbGFzdF9sZWQgPSBsZWRfaWQ7DQo+PiArwqDCoMKgIH0NCj4+ICvCoMKgwqAgcmV0 dXJuIGNvdW50Ow0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgREVWSUNFX0FUVFJfUlcobGVkX2Nv bnRyb2wpOw0KPj4gKw0KPj4gK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpjYXNwZXJfa2JkX2xl ZF9hdHRyc1tdID0gew0KPj4gK8KgwqDCoCAmZGV2X2F0dHJfbGVkX2NvbnRyb2wuYXR0ciwNCj4+ ICvCoMKgwqAgTlVMTCwNCj4+ICt9Ow0KPj4gKw0KPj4gK0FUVFJJQlVURV9HUk9VUFMoY2FzcGVy X2tiZF9sZWQpOw0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkIHNldF9jYXNwZXJfYmFja2xpZ2h0X2Jy aWdodG5lc3Moc3RydWN0IGxlZF9jbGFzc2RldiANCj4+ICpsZWRfY2RldiwNCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVudW0gbGVkX2JyaWdodG5l c3MgYnJpZ2h0bmVzcykNCj4+ICt7DQo+PiArwqDCoMKgIC8vIFNldHRpbmcgYW55IG9mIHRoZSBr ZXlib2FyZCBsZWRzJyBicmlnaHRuZXNzIHNldHMgYnJpZ2h0bmVzcyANCj4+IG9mIGFsbA0KPj4g K8KgwqDCoCBhY3BpX3N0YXR1cyByZXQgPQ0KPj4gK8KgwqDCoMKgwqDCoMKgIGNhc3Blcl9zZXQo dG9fd21pX2RldmljZShsZWRfY2Rldi0+ZGV2LT5wYXJlbnQpLCANCj4+IENBU1BFUl9TRVRfTEVE LA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQ0FTUEVSX0tFWUJPQVJEX0xFRF8x LA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKGNhc3Blcl9sYXN0X2NvbG9yICYg MHhGMEZGRkZGRikgfA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKCgodTMyKSBi cmlnaHRuZXNzKSA8PCAyNCkNCj4+ICvCoMKgwqDCoMKgwqDCoCApOw0KPj4gKw0KPj4gK8KgwqDC oCBpZiAocmV0ICE9IDApDQo+PiArwqDCoMKgwqDCoMKgwqAgZGV2X2VycihsZWRfY2Rldi0+ZGV2 LA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIkNvdWxkbid0IHNldCBicmlnaHRuZXNzIGFj cGkgc3RhdHVzOiAlZFxuIiwgcmV0KTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGVudW0gbGVk X2JyaWdodG5lc3MgZ2V0X2Nhc3Blcl9iYWNrbGlnaHRfYnJpZ2h0bmVzcyhzdHJ1Y3QgDQo+PiBs ZWRfY2xhc3NkZXYNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgKmxlZF9jZGV2KQ0KPj4gK3sNCj4+ICvCoMKgwqAgcmV0dXJu IChjYXNwZXJfbGFzdF9jb2xvciYweDBGMDAwMDAwKT4+MjQ7DQo+PiArfQ0KPj4gKw0KPj4gK3N0 YXRpYyBzdHJ1Y3QgbGVkX2NsYXNzZGV2IGNhc3Blcl9rYmRfbGVkID0gew0KPj4gK8KgwqDCoCAu bmFtZSA9ICJjYXNwZXI6OmtiZF9iYWNrbGlnaHQiLA0KPj4gK8KgwqDCoCAuYnJpZ2h0bmVzcyA9 IDAsDQo+PiArwqDCoMKgIC5icmlnaHRuZXNzX3NldCA9IHNldF9jYXNwZXJfYmFja2xpZ2h0X2Jy aWdodG5lc3MsDQo+PiArwqDCoMKgIC5icmlnaHRuZXNzX2dldCA9IGdldF9jYXNwZXJfYmFja2xp Z2h0X2JyaWdodG5lc3MsDQo+PiArwqDCoMKgIC5tYXhfYnJpZ2h0bmVzcyA9IDIsDQo+PiArwqDC oMKgIC5ncm91cHMgPSBjYXNwZXJfa2JkX2xlZF9ncm91cHMsDQo+PiArfTsNCj4+ICsNCj4+ICtz dGF0aWMgYWNwaV9zdGF0dXMgY2FzcGVyX3F1ZXJ5KHN0cnVjdCB3bWlfZGV2aWNlICp3ZGV2LCB1 MTYgYTEsDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBjYXNwZXJf d21pX2FyZ3MgKm91dCkNCj4+ICt7DQo+PiArwqDCoMKgIHN0cnVjdCBjYXNwZXJfd21pX2FyZ3Mg d21pX2FyZ3MgPSB7DQo+PiArwqDCoMKgwqDCoMKgwqAgLmEwID0gQ0FTUEVSX1JFQUQsDQo+PiAr wqDCoMKgwqDCoMKgwqAgLmExID0gYTENCj4+ICvCoMKgwqAgfTsNCj4+ICvCoMKgwqAgc3RydWN0 IGFjcGlfYnVmZmVyIGlucHV0ID0gew0KPj4gK8KgwqDCoMKgwqDCoMKgIChhY3BpX3NpemUpIHNp emVvZihzdHJ1Y3QgY2FzcGVyX3dtaV9hcmdzKSwNCj4+ICvCoMKgwqDCoMKgwqDCoCAmd21pX2Fy Z3MNCj4+ICvCoMKgwqAgfTsNCj4+ICsNCj4+ICvCoMKgwqAgYWNwaV9zdGF0dXMgcmV0ID0gd21p ZGV2X2Jsb2NrX3NldCh3ZGV2LCAwLCAmaW5wdXQpOw0KPj4gKw0KPj4gK8KgwqDCoCBpZiAoQUNQ SV9GQUlMVVJFKHJldCkpIHsNCj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKCZ3ZGV2LT5kZXYs DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiQ291bGQgbm90IHF1ZXJ5IGFjcGkgc3RhdHVz OiAldSIsIHJldCk7DQo+DQo+IFRoaXMgY29kZSBnZW5lcmF0ZXMgX3dheV8gdG9vIG11Y2ggbG9n Z2luZyBub2lzZSBmb3IgbXkgbGlraW5nLg0KPg0KPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBy ZXQ7DQo+DQo+IElzIHRoZXJlIGFueSB2YWx1ZSBpbiBoYXZpbmcgdGhpcyBmdW5jdGlvbiByZXR1 cm4gYWNwaSBlcnJvcg0KPiBjb2RlcyBpbnN0ZWFkIG9mIExpbnV4IGVycm9yIGNvZGVzID8NCj4N Cj4+ICvCoMKgwqAgfQ0KPj4gKw0KPj4gK8KgwqDCoCB1bmlvbiBhY3BpX29iamVjdCAqb2JqID0g d21pZGV2X2Jsb2NrX3F1ZXJ5KHdkZXYsIDApOw0KPj4gKw0KPj4gK8KgwqDCoCBpZiAob2JqID09 IE5VTEwpIHsNCj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKCZ3ZGV2LT5kZXYsDQo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAiQ291bGQgbm90IHF1ZXJ5IGhhcmR3YXJlIGluZm9ybWF0aW9u Iik7DQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFFX0VSUk9SOw0KPj4gK8KgwqDCoCB9DQo+ PiArwqDCoMKgIGlmIChvYmotPnR5cGUgIT0gQUNQSV9UWVBFX0JVRkZFUikgew0KPj4gK8KgwqDC oMKgwqDCoMKgIGRldl9lcnIoJndkZXYtPmRldiwgIlJldHVybiB0eXBlIGlzIG5vdCBhIGJ1ZmZl ciIpOw0KPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBBRV9UWVBFOw0KPj4gK8KgwqDCoCB9DQo+ PiArDQo+PiArwqDCoMKgIGlmIChvYmotPmJ1ZmZlci5sZW5ndGggIT0gMzIpIHsNCj4+ICvCoMKg wqDCoMKgwqDCoCBkZXZfZXJyKCZ3ZGV2LT5kZXYsICJSZXR1cm4gYnVmZmVyIGlzIG5vdCBsb25n IGVub3VnaCIpOw0KPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBBRV9FUlJPUjsNCj4+ICvCoMKg wqAgfQ0KPj4gK8KgwqDCoCBtZW1jcHkob3V0LCBvYmotPmJ1ZmZlci5wb2ludGVyLCAzMik7DQo+ PiArwqDCoMKgIGtmcmVlKG9iaik7DQo+PiArwqDCoMKgIHJldHVybiByZXQ7DQo+PiArfQ0KPj4g Kw0KPj4gK3N0YXRpYyB1bW9kZV90IGNhc3Blcl93bWlfaHdtb25faXNfdmlzaWJsZShjb25zdCB2 b2lkICpkcnZkYXRhLA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUsDQo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTMyIGF0dHIsIGludCBjaGFubmVsKQ0KPj4g K3sNCj4+ICvCoMKgwqAgc3dpdGNoICh0eXBlKSB7DQo+PiArwqDCoMKgIGNhc2UgaHdtb25fZmFu Og0KPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAwNDQ0Ow0KPj4gK8KgwqDCoCBjYXNlIGh3bW9u X3B3bToNCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDY0NDsNCj4+ICvCoMKgwqAgZGVmYXVs dDoNCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsNCj4+ICvCoMKgwqAgfQ0KPj4gK8KgwqDC oCByZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBjYXNwZXJfd21pX2h3bW9u X3JlYWQoc3RydWN0IGRldmljZSAqZGV2LA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUsIHUzMiBhdHRyLA0KPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGludCBjaGFubmVsLCBsb25nICp2YWwpDQo+PiAr ew0KPj4gK8KgwqDCoCBzdHJ1Y3QgY2FzcGVyX3dtaV9hcmdzIG91dCA9IHsgMCB9Ow0KPj4gKw0K Pj4gK8KgwqDCoCBzd2l0Y2ggKHR5cGUpIHsNCj4+ICvCoMKgwqAgY2FzZSBod21vbl9mYW46DQo+ PiArwqDCoMKgwqDCoMKgwqAgYWNwaV9zdGF0dXMgcmV0ID0gY2FzcGVyX3F1ZXJ5KHRvX3dtaV9k ZXZpY2UoZGV2LT5wYXJlbnQpLA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgQ0FTUEVSX0dFVF9IQVJEV0FSRUlORk8sICZvdXQpOw0KPj4g Kw0KPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChBQ1BJX0ZBSUxVUkUocmV0KSkNCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7DQo+DQo+IFRoaXMgZnVuY3Rpb24gaXMgZXhwZWN0 ZWQgdG8gcmV0dXJuIGEgTGludXggZXJyb3IgY29kZSwgbm90IGFuIGFjcGkgDQo+IGVycm9yIGNv ZGUuDQo+DQo+IEFsc28sIGlmIENBU1BFUl9HRVRfSEFSRFdBUkVJTkZPIGlzIG5vdCBhbHdheXMg YXZhaWxhYmxlLCB0aGUgYXR0cmlidXRlcw0KPiBuZWVkaW5nIGl0IHNob3VsZCBub3QgYmUgY3Jl YXRlZCBpbiB0aGUgZmlyc3QgcGxhY2UuDQo+DQo+PiArDQo+PiArwqDCoMKgwqDCoMKgwqAgaWYg KGNoYW5uZWwgPT0gMCkgeyAvLyBDUFUgZmFuDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1 MzIgY3B1X2ZhbnNwZWVkID0gb3V0LmE0Ow0KPj4gKw0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgY3B1X2ZhbnNwZWVkIDw8PSA4Ow0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY3B1X2Zh bnNwZWVkICs9IG91dC5hNCA+PiA4Ow0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKnZhbCA9 IChsb25nKSBjcHVfZmFuc3BlZWQ7DQo+PiArwqDCoMKgwqDCoMKgwqAgfSBlbHNlIGlmIChjaGFu bmVsID09IDEpIHsgLy8gR1BVIGZhbg0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTMyIGdw dV9mYW5zcGVlZCA9IG91dC5hNTsNCj4+ICsNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdw dV9mYW5zcGVlZCA8PD0gODsNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdwdV9mYW5zcGVl ZCArPSBvdXQuYTUgPj4gODsNCj4NCj4gSSBkb24ndCBrbm93IHdoYXQgdGhpcyBpcyBzdXBwb3Nl ZCB0byBiZSBkb2luZywgYnV0IGl0IHdpbGwgcmV0dXJuDQo+IG9kZCB2YWx1ZXMuIEZvciBleGFt cGxlLCBpZiBvdXQuYTUgaXMgMHhhYmNkLCB0aGUgcmV0dXJuZWQgdmFsdWUNCj4gd2lsbCBiZSAw eGFiY2RhYi4gVGhhdCBzZWVtcyB0byBiZSB1bmxpa2VseSBJIHN1c3BlY3QgdGhpcyBpcyBzdXBw b3NlZA0KPiB0byBiZQ0KPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICp2YWwgPSAoKG91dC5hNSAm IDB4ZmYpIDw8IDgpIHwgKChvdXQuYTUgPj4gOCkgJiAweGZmKTsNCj4gYnV0IEkgYW0gbm90IGV2 ZW4gc3VyZSBhYm91dCB0aGF0IGJlY2F1c2UgYTUgaXMgdTMyIGFuZCB0aGUgYWJvdmUgDQo+IHdv dWxkIHN1Z2dlc3QNCj4gYSAxNi1iaXQgdW5zaWduZWQgc2hvcnQgaW4gYmlnIGVuZGlhbiBmb3Jt YXQuIFBsZWFzZSBjaGVjayByZXR1cm4gdmFsdWVzDQo+IGFuZCBpbXBsZW1lbnQgYW55IG5lY2Vz c2FyeSBlbmRpYW5uZXMgY29udmVyc2lvbiBjb3JyZWN0bHkuDQo+DQo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAqdmFsID0gKGxvbmcpIGdwdV9mYW5zcGVlZDsNCj4NCj4gRldJVywgdGhvc2Ug dHlwZSBjYXN0cyBhcmUgdW5uZWNlc3NhcnkuDQo+DQo+PiArwqDCoMKgwqDCoMKgwqAgfQ0KPj4g K8KgwqDCoMKgwqDCoMKgIHJldHVybiAwOw0KPj4gK8KgwqDCoCBjYXNlIGh3bW9uX3B3bToNCj4+ ICvCoMKgwqDCoMKgwqDCoCBjYXNwZXJfcXVlcnkodG9fd21pX2RldmljZShkZXYtPnBhcmVudCks IENBU1BFUl9QT1dFUlBMQU4sDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Jm91dCk7DQo+DQo+IFdoeSBubyBlcnJvciBjaGVjayBoZXJlID8NCj4NCj4+ICvCoMKgwqDCoMKg wqDCoCBpZiAoY2hhbm5lbCA9PSAwKQ0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKnZhbCA9 IChsb25nKW91dC5hMjsNCj4+ICvCoMKgwqDCoMKgwqDCoCBlbHNlDQo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCByZXR1cm4gLUVPUE5PVFNVUFA7DQo+DQo+IFRoZSBjb29uZGl0aW9uYWwgYW5k IGVsc2UgY2FzZSBpcyB1bm5lY2Vzc2FyeSBzaW5jZSBvbmx5DQo+IGEgc2luZ2xlIHB3bSBjaGFu bmVsIGlzIGRlY2xhcmVkLg0KPg0KPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAwOw0KPj4gK8Kg wqDCoCBkZWZhdWx0Og0KPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRU9QTk9UU1VQUDsNCj4+ ICvCoMKgwqAgfQ0KPj4gKw0KPj4gK8KgwqDCoCByZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiAr c3RhdGljIGludCBjYXNwZXJfd21pX2h3bW9uX3JlYWRfc3RyaW5nKHN0cnVjdCBkZXZpY2UgKmRl diwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbnVtIGh3bW9u X3NlbnNvcl90eXBlcyB0eXBlLCB1MzIgYXR0ciwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBpbnQgY2hhbm5lbCwgY29uc3QgY2hhciAqKnN0cikNCj4+ICt7DQo+ PiArwqDCoMKgIHN3aXRjaCAodHlwZSkgew0KPj4gK8KgwqDCoCBjYXNlIGh3bW9uX2ZhbjoNCj4+ ICvCoMKgwqDCoMKgwqDCoCBzd2l0Y2ggKGNoYW5uZWwpIHsNCj4+ICvCoMKgwqDCoMKgwqDCoCBj YXNlIDA6DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqc3RyID0gImNwdV9mYW5fc3BlZWQi Ow0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7DQo+PiArwqDCoMKgwqDCoMKgwqAg Y2FzZSAxOg0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKnN0ciA9ICJncHVfZmFuX3NwZWVk IjsNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOw0KPj4gK8KgwqDCoMKgwqDCoMKg IGRlZmF1bHQ6DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVPUE5PVFNVUFA7 DQo+PiArwqDCoMKgwqDCoMKgwqAgfQ0KPj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOw0KPj4gK8Kg wqDCoCBkZWZhdWx0Og0KPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRU9QTk9UU1VQUDsNCj4+ ICvCoMKgwqAgfQ0KPj4gK8KgwqDCoCByZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGlj IGludCBjYXNwZXJfd21pX2h3bW9uX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwNCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5 cGUsIHUzMiBhdHRyLA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50 IGNoYW5uZWwsIGxvbmcgdmFsKQ0KPj4gK3sNCj4+ICvCoMKgwqAgYWNwaV9zdGF0dXMgcmV0Ow0K Pj4gKw0KPj4gK8KgwqDCoCBzd2l0Y2ggKHR5cGUpIHsNCj4+ICvCoMKgwqAgY2FzZSBod21vbl9w d206DQo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKGNoYW5uZWwgIT0gMCkNCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHJldHVybiAtRU9QTk9UU1VQUDsNCj4NCj4gVGhpcyBpcyB1bm5lY2Vzc2Fy eS4gT25seSBhIHNpbmdsZSBwd20gY2hhbm5lbCBpcyBkZWNsYXJlZCwNCj4gc28gY2hhbm5lbCB3 aWxsIG5ldmVyIGJlICE9IDAuDQo+DQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0NCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGNhc3Blcl9zZXQodG9fd21pX2RldmljZShkZXYtPnBhcmVudCks IENBU1BFUl9QT1dFUlBMQU4sDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHZhbCwgMCk7DQo+PiArDQo+IFRoZSBmaXJzdCBsaW5lIHNwbGl0IGlzIHVubmVjZXNzYXJ5 Lg0KPg0KPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChBQ1BJX0ZBSUxVUkUocmV0KSkgew0KPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2X2VycihkZXYsICJDb3VsZG4ndCBzZXQgcG93ZXIgcGxh biwgYWNwaV9zdGF0dXM6ICVkIiwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cmV0KTsNCj4NCj4gRHJpdmVycyBzaG91bGQgbm90IGdlbmVyYXRlIHN1Y2ggbG9nZ2luZyBub2lz ZSwgZXZlbiBtb3JlIHNvIGFmdGVyIA0KPiB1c2VyIGlucHV0Lg0KPiBBbHNvLCB0aGUgdmFsaWQg cmFuZ2UgKDAuLjI1NSkgc2hvdWxkIGJlIGNoZWNrZWQgYmVmb3JlIHRyeWluZyB0byBzZXQgaXQu DQo+DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsNCj4+ICvCoMKg wqDCoMKgwqDCoCB9DQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIDA7DQo+PiArwqDCoMKgIGRl ZmF1bHQ6DQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FT1BOT1RTVVBQOw0KPj4gK8KgwqDC oCB9DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fb3BzIGNhc3Bl cl93bWlfaHdtb25fb3BzID0gew0KPj4gK8KgwqDCoCAuaXNfdmlzaWJsZSA9ICZjYXNwZXJfd21p X2h3bW9uX2lzX3Zpc2libGUsDQo+PiArwqDCoMKgIC5yZWFkID0gJmNhc3Blcl93bWlfaHdtb25f cmVhZCwNCj4+ICvCoMKgwqAgLnJlYWRfc3RyaW5nID0gJmNhc3Blcl93bWlfaHdtb25fcmVhZF9z dHJpbmcsDQo+PiArwqDCoMKgIC53cml0ZSA9ICZjYXNwZXJfd21pX2h3bW9uX3dyaXRlDQo+PiAr fTsNCj4+ICsNCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGh3bW9uX2NoYW5uZWxfaW5mbyAqY29u c3QgDQo+PiBjYXNwZXJfd21pX2h3bW9uX2luZm9bXSA9IHsNCj4+ICvCoMKgwqAgSFdNT05fQ0hB Tk5FTF9JTkZPKGZhbiwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEhXTU9OX0Zf SU5QVVQgfCBIV01PTl9GX0xBQkVMLA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg SFdNT05fRl9JTlBVVCB8IEhXTU9OX0ZfTEFCRUwpLA0KPj4gK8KgwqDCoCBIV01PTl9DSEFOTkVM X0lORk8ocHdtLCBIV01PTl9QV01fTU9ERSksDQo+PiArwqDCoMKgIE5VTEwNCj4+ICt9Ow0KPj4g Kw0KPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fY2hpcF9pbmZvIGNhc3Blcl93bWlfaHdt b25fY2hpcF9pbmZvID0gew0KPj4gK8KgwqDCoCAub3BzID0gJmNhc3Blcl93bWlfaHdtb25fb3Bz LA0KPj4gK8KgwqDCoCAuaW5mbyA9IGNhc3Blcl93bWlfaHdtb25faW5mbywNCj4+ICt9Ow0KPj4g Kw0KPj4gK3N0YXRpYyBpbnQgY2FzcGVyX3dtaV9wcm9iZShzdHJ1Y3Qgd21pX2RldmljZSAqd2Rl diwgY29uc3Qgdm9pZCANCj4+ICpjb250ZXh0KQ0KPj4gK3sNCj4+ICvCoMKgwqAgc3RydWN0IGRl dmljZSAqaHdtb25fZGV2Ow0KPj4gKw0KPj4gK8KgwqDCoCAvLyBBbGwgQ2FzcGVyIEV4Y2FsaWJ1 ciBMYXB0b3BzIHVzZSB0aGlzIEdVSUQNCj4+ICvCoMKgwqAgaWYgKCF3bWlfaGFzX2d1aWQoQ0FT UEVSX1dNSV9HVUlEKSkNCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOT0RFVjsNCj4+ICsN Cj4gSG93IHdvdWxkIHRoZSBkZXZpY2UgZXZlciBiZSBpbnN0YW50aWF0ZWQgd2l0aCBhIGRpZmZl cmVudCBHVUlELA0KPiBtYWtpbmcgdGhpcyBjaGVjayBuZWNlc3NhcnkgPw0KPg0KSGksDQoNCnRo aXMgaXMgaW5kZWVkIHVubmVjZXNzYXJ5LCB0aGUgV01JIGRyaXZlciBjb3JlIGFscmVhZHkgdGFr ZXMgY2FyZSB0aGF0IHRoZSBXTUkgZHJpdmVyIGlzDQpvbmx5IGJvdW5kIHRvIFdNSSBkZXZpY2Vz IHdpdGggYSBtYXRjaGluZyBHVUlELg0KDQpJIHRoaW5rIHRoaXMgd2FzIGNvcGllZCBmcm9tIHRo ZSBkZWxsLXdtaS1wcml2YWN5IGRyaXZlciwgaSB3aWxsIHNlbmQgYSBwYXRjaCB0byByZW1vdmUg dGhpcy4NCg0KQXJtaW4gV29sZg0KDQo+PiArwqDCoMKgIGh3bW9uX2RldiA9DQo+PiArwqDCoMKg wqDCoMKgwqAgZGV2bV9od21vbl9kZXZpY2VfcmVnaXN0ZXJfd2l0aF9pbmZvKCZ3ZGV2LT5kZXYs IA0KPj4gImNhc3Blcl93bWkiLCB3ZGV2LA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmY2FzcGVyX3dtaV9od21vbl9jaGlwX2luZm8sDQo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIE5VTEwpOw0K Pj4gKw0KPj4gK8KgwqDCoCBhY3BpX3N0YXR1cyByZXN1bHQgPSBsZWRfY2xhc3NkZXZfcmVnaXN0 ZXIoJndkZXYtPmRldiwgDQo+PiAmY2FzcGVyX2tiZF9sZWQpOw0KPj4gKw0KPj4gK8KgwqDCoCBp ZiAocmVzdWx0ICE9IDApDQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9ERVY7DQo+PiAr DQo+PiArwqDCoMKgIHJldHVybiBQVFJfRVJSX09SX1pFUk8oaHdtb25fZGV2KTsNCj4NCj4gVGhp cyB3b3VsZCBsZWF2ZSB0aGUgTEVEIGRldmljZSByZWdpc3RlcmVkIGlmIGluc3RhbnRpYXRpbmcg dGhlIGh3bW9uIA0KPiBkZXZpY2UNCj4gZmFpbGVkLiBIb3dldmVyLCB0aGUgcHJvYmUgZnVuY3Rp b24gd291bGQgcmV0dXJuIGFuIGVycm9yLCBtZWFuaW5nIHRoZSANCj4gZHJpdmVyDQo+IGNvcmUg d2lsbCBiZWxpZXZlIHRoYXQgaW5zdGFudGlhdGlvbiBmYWlsZWQuIElzIHRoYXQgaW50ZW50aW9u YWwgPyBJIA0KPiBhbSBxdWl0ZQ0KPiBzdXJlIHRoYXQgdGhpcyB3b3VsZCByZXN1bHQgaW4gaW50 ZXJlc3RpbmcgY3Jhc2hlcy4NCj4NCj4+ICvCoMKgwqAgfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lk IGNhc3Blcl93bWlfcmVtb3ZlKHN0cnVjdCB3bWlfZGV2aWNlICp3ZGV2KQ0KPj4gK3sNCj4+ICvC oMKgwqAgbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmNhc3Blcl9rYmRfbGVkKTsNCj4+ICt9DQo+ PiArDQo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCB3bWlfZGV2aWNlX2lkIGNhc3Blcl93bWlfaWRf dGFibGVbXSA9IHsNCj4+ICvCoMKgwqAgeyBDQVNQRVJfV01JX0dVSUQsIE5VTEwgfSwNCj4+ICvC oMKgwqAgeyB9DQo+PiArfTsNCj4+ICsNCj4+ICtzdGF0aWMgc3RydWN0IHdtaV9kcml2ZXIgY2Fz cGVyX3dtaV9kcml2ZXIgPSB7DQo+PiArwqDCoMKgIC5kcml2ZXIgPSB7DQo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqAgLm5hbWUgPSAiY2FzcGVyLXdtaSIsDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCB9LA0KPj4gK8KgwqDCoCAuaWRfdGFibGUgPSBjYXNwZXJfd21pX2lkX3RhYmxlLA0KPj4g K8KgwqDCoCAucHJvYmUgPSBjYXNwZXJfd21pX3Byb2JlLA0KPj4gK8KgwqDCoCAucmVtb3ZlID0g JmNhc3Blcl93bWlfcmVtb3ZlDQo+PiArfTsNCj4+ICsNCj4+ICttb2R1bGVfd21pX2RyaXZlcihj YXNwZXJfd21pX2RyaXZlcik7DQo+PiArDQo+PiArTU9EVUxFX0RFVklDRV9UQUJMRSh3bWksIGNh c3Blcl93bWlfaWRfdGFibGUpOw0KPg0KPg0K