From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 04D6E3DD84A; Thu, 30 Jul 2026 10:29:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785407363; cv=none; b=mVwj/gy8l6fUAvouiyDKkycS682YdRCnYLF9Ko/stbW2uROcvdT/Iilr6prkOK1ITn5uPs1DUP/xf5BfZxP3J/n/ACjk81mWbm4XI0z1ITl8kkZycPLgWSQfFUMMy0qLqzzT6RY47E//+hEu+n1+HfzGSCVeIO9jk9A0XOqnurU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785407363; c=relaxed/simple; bh=MLauP4h2O6XL26eRLvcalEouLmyVFX1LW0k1z/gxMKc=; h=From:Subject:To:Cc:In-Reply-To:References:Content-Type:Date: Message-Id; b=M7tN5G5BHde0eFpBuEOJR4vQRZEYFA9JN88ynuP26YlmzUurYorRbrOx7CkzoMZYP926DiDB92ZxDc76sPbkre6tDJKm75JUBDhQbHCdzdwmMzSQDcmRaVjiKrpA0kjCjy964JmCbmRjmH9tCiRWTSNih0SqqZ1yv1pKkuP4Zm8= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=NT1LUnTY; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="NT1LUnTY" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C01161F000E9; Thu, 30 Jul 2026 10:29:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1785407360; bh=/2nKL1zddxuvJ2jaD6upOvmdfCXrufRhTlLZM2+uv2w=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=NT1LUnTY7Gw2EwHnCcGhPtuI9a9eb41muuJmtz37dKINz1sGR/LCbzMxY3RFHTSra YudKO0mM7xuyoc0GzIwzpb22g3pQj9N66/qGLuGypXDEb3Zue+xcDLDoR1C2zczi5R JMXw+i5rptMQZ5FL3RG8HecKxZFR8rYiZXNSO6f6WyW+bPB87RpNmDMCNytPpjOqFh dSgED/26KNhCRKnulsYbK0FedbZGHa9j4GlANnHhIjY+fD2F0GVjqIc/rlJ5sPoncs BukfOl4NO1Ou39pmrV3R21pHEkNqgJh2x3P+ySmzZuuXEkI9Mu59AjaQDQk8FME1xT d7K2JlpEuG7Ug== From: sashiko-bot@kernel.org Subject: Re: [PATCH v10 10/26] scsi: ufs: mediatek: Handle misc host voltage regulators Reply-To: sashiko-reviews@lists.linux.dev To: "Louis-Alexis Eyraud" Cc: devicetree@vger.kernel.org, linux-phy@lists.infradead.org, linux-scsi@vger.kernel.org, conor+dt@kernel.org, vkoul@kernel.org, neil.armstrong@linaro.org, robh@kernel.org, olteanv@gmail.com In-Reply-To: <20260730-mt8196-ufs-v10-10-bc5ecef202dc@collabora.com> References: <20260730-mt8196-ufs-v10-0-bc5ecef202dc@collabora.com> <20260730-mt8196-ufs-v10-10-bc5ecef202dc@collabora.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Thu, 30 Jul 2026 10:29:19 +0000 Message-Id: <20260730102919.C01161F000E9@smtp.kernel.org> Precedence: bulk X-Mailing-List: devicetree@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Thank you for your contribution! Sashiko AI review found 2 potential issue(= s) to consider: Pre-existing issues: - [High] The UFS driver caches a dangling pointer to the PHY device after p= rematurely dropping its reference, leading to a Use-After-Free. - [High] The driver ignores the return value of `ufs_mtk_mphy_power_on()`, = potentially leading to hardware hangs if the PHY fails to power on. -- --- Patch [10]: [PATCH v10 10/26] scsi: ufs: mediatek: Handle misc host vol= tage regulators --- commit 8242d1302e10cd1046e43a3ff8124f21223143fe Author: Nicolas Frattaroli scsi: ufs: mediatek: Handle misc host voltage regulators This commit adds support for acquiring miscellaneous host voltage regulators using the regulator bulk API in the MediaTek UFS driver. It handles per-SoC specific regulator names and enables them during acquisition so they are kept on during suspend. > diff --git a/drivers/ufs/host/ufs-mediatek.c b/drivers/ufs/host/ufs-media= tek.c > index 55701172bcf15..65036c8390318 100644 > --- a/drivers/ufs/host/ufs-mediatek.c > +++ b/drivers/ufs/host/ufs-mediatek.c [ ... ] > @@ -1188,8 +1190,21 @@ static int ufs_mtk_get_supplies(struct ufs_mtk_hos= t *host) > { > struct device *dev =3D host->hba->dev; > const struct ufs_mtk_soc_data *data =3D of_device_get_match_data(dev); > + int ret; > + > + if (!data) > + return 0; > + > + if (data->num_reg_names) { > + ret =3D devm_regulator_bulk_get_enable(dev, data->num_reg_names, > + data->reg_names); > + if (ret) { > + dev_err(dev, "Failed to get misc regulators: %pe\n", ERR_PTR(ret)); > + return ret; > + } > + } > =20 > - if (!data || !data->has_avdd09) > + if (!data->has_avdd09) > return 0; > =20 > host->reg_avdd09 =3D devm_regulator_get_optional(dev, "avdd09"); [ ... ] [Severity: High] This isn't a bug introduced by this patch, but does this driver ignore the= =20 return value of ufs_mtk_mphy_power_on() when initializing? In ufs_mtk_init(), the function is called without checking if it fails: drivers/ufs/host/ufs-mediatek.c:ufs_mtk_init() { ... /* * ufshcd_vops_init() is invoked after * ufshcd_setup_clock(true) in ufshcd_hba_init() thus * phy clock setup is skipped. * * Enable phy clocks specifically here. */ ufs_mtk_mphy_power_on(hba, true); if (ufs_mtk_is_rtff_mtcmos(hba)) { ... } If the underlying regulator enablement fails, the PHY could remain unpowere= d. Could this cause the UFS host controller driver to assume the PHY is functional, which might lead to timeouts or unrecoverable hardware hangs during initialization? [Severity: High] This is also a pre-existing issue, but does this driver cache a dangling pointer to the PHY device? Looking at ufs_mtk_probe(), the driver acquires a device reference to the PHY node but immediately drops it: drivers/ufs/host/ufs-mediatek.c:ufs_mtk_probe() { ... if (phy_node) { phy_dev =3D of_find_device_by_node(phy_node); of_node_put(phy_node); if (!phy_dev) { dev_err(dev, "phy_dev not found\n"); goto skip_phy; } put_device(phy_dev); dev_info(dev, "phys node found\n"); } ... skip_phy: ... if (phy_node && phy_dev) { host =3D ufshcd_get_variant(hba); host->phy_dev =3D phy_dev; } ... } Because put_device() is called earlier, phy_dev could potentially be freed = if the PHY device is unbound. If the PHY device is later freed, will accessing pm_runtime_put_sync() or pm_runtime_get_sync() on host->phy_dev during suspend and resume callbacks trigger a use-after-free? --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20260730-mt8196-ufs= -v10-0-bc5ecef202dc@collabora.com?part=3D10 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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (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 C5865C54FD2 for ; Thu, 30 Jul 2026 10:29:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Reply-To:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:Message-Id:Date: References:In-Reply-To:Cc:To:Subject:From:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Ry3ByYJgwx84IE7ExH7KpOvJglGrvE/Pvs8d3kC75aA=; b=FSX5IVAJbF95p/ k8Wekbth2GPEFINExYq1vnIGW0lKHU6qRaWWrfrC3+Mn1XPzxSqR+55z9FSyvHXc4xZRKZcg4uB4E kzlTdUf3XZMqNt8bxcGjrsmsJrelYEHxBgST8xfiqXCLBgAmEG/vKa7Y12RUM74eb2XwCveW8+H/H Ir0pYRjJXYON/o96QkyjnORiLdAd9apuICB5Db56txlUS2ynxyYXsR+aD2QSO8dWaU7Y4AiNXj3QM ZnUKu8h7tCQoYjpmWdRQ6VusZC5Hp2Ih3becNsoeDRjEFMpV+Bo2IRIKUyIPw8Gf81hV6YqgUWZkQ 36ST6jqTfm8H+wh+O9lg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wpO0x-0000000ADIp-1wga; Thu, 30 Jul 2026 10:29:23 +0000 Received: from tor.source.kernel.org ([2600:3c04:e001:324:0:1991:8:25]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1wpO0v-0000000ADHw-2pSn for linux-phy@lists.infradead.org; Thu, 30 Jul 2026 10:29:21 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id 9A923600B1; Thu, 30 Jul 2026 10:29:20 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id C01161F000E9; Thu, 30 Jul 2026 10:29:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1785407360; bh=/2nKL1zddxuvJ2jaD6upOvmdfCXrufRhTlLZM2+uv2w=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=NT1LUnTY7Gw2EwHnCcGhPtuI9a9eb41muuJmtz37dKINz1sGR/LCbzMxY3RFHTSra YudKO0mM7xuyoc0GzIwzpb22g3pQj9N66/qGLuGypXDEb3Zue+xcDLDoR1C2zczi5R JMXw+i5rptMQZ5FL3RG8HecKxZFR8rYiZXNSO6f6WyW+bPB87RpNmDMCNytPpjOqFh dSgED/26KNhCRKnulsYbK0FedbZGHa9j4GlANnHhIjY+fD2F0GVjqIc/rlJ5sPoncs BukfOl4NO1Ou39pmrV3R21pHEkNqgJh2x3P+ySmzZuuXEkI9Mu59AjaQDQk8FME1xT d7K2JlpEuG7Ug== From: sashiko-bot@kernel.org Subject: Re: [PATCH v10 10/26] scsi: ufs: mediatek: Handle misc host voltage regulators To: "Louis-Alexis Eyraud" Cc: devicetree@vger.kernel.org, linux-phy@lists.infradead.org, linux-scsi@vger.kernel.org, conor+dt@kernel.org, vkoul@kernel.org, neil.armstrong@linaro.org, robh@kernel.org, olteanv@gmail.com In-Reply-To: <20260730-mt8196-ufs-v10-10-bc5ecef202dc@collabora.com> References: <20260730-mt8196-ufs-v10-0-bc5ecef202dc@collabora.com> <20260730-mt8196-ufs-v10-10-bc5ecef202dc@collabora.com> Date: Thu, 30 Jul 2026 10:29:19 +0000 Message-Id: <20260730102919.C01161F000E9@smtp.kernel.org> X-BeenThere: linux-phy@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux Phy Mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: sashiko-reviews@lists.linux.dev MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-phy" Errors-To: linux-phy-bounces+linux-phy=archiver.kernel.org@lists.infradead.org VGhhbmsgeW91IGZvciB5b3VyIGNvbnRyaWJ1dGlvbiEgU2FzaGlrbyBBSSByZXZpZXcgZm91bmQg MiBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6CgpQcmUtZXhpc3RpbmcgaXNzdWVzOgot IFtIaWdoXSBUaGUgVUZTIGRyaXZlciBjYWNoZXMgYSBkYW5nbGluZyBwb2ludGVyIHRvIHRoZSBQ SFkgZGV2aWNlIGFmdGVyIHByZW1hdHVyZWx5IGRyb3BwaW5nIGl0cyByZWZlcmVuY2UsIGxlYWRp bmcgdG8gYSBVc2UtQWZ0ZXItRnJlZS4KLSBbSGlnaF0gVGhlIGRyaXZlciBpZ25vcmVzIHRoZSBy ZXR1cm4gdmFsdWUgb2YgYHVmc19tdGtfbXBoeV9wb3dlcl9vbigpYCwgcG90ZW50aWFsbHkgbGVh ZGluZyB0byBoYXJkd2FyZSBoYW5ncyBpZiB0aGUgUEhZIGZhaWxzIHRvIHBvd2VyIG9uLgotLQoK LS0tIFBhdGNoIFsxMF06IFtQQVRDSCB2MTAgMTAvMjZdIHNjc2k6IHVmczogbWVkaWF0ZWs6IEhh bmRsZSBtaXNjIGhvc3Qgdm9sdGFnZSByZWd1bGF0b3JzIC0tLQpjb21taXQgODI0MmQxMzAyZTEw Y2QxMDQ2ZTQzYTNmZjgxMjRmMjEyMjMxNDNmZQpBdXRob3I6IE5pY29sYXMgRnJhdHRhcm9saSA8 bmljb2xhcy5mcmF0dGFyb2xpQGNvbGxhYm9yYS5jb20+CnNjc2k6IHVmczogbWVkaWF0ZWs6IEhh bmRsZSBtaXNjIGhvc3Qgdm9sdGFnZSByZWd1bGF0b3JzCgpUaGlzIGNvbW1pdCBhZGRzIHN1cHBv cnQgZm9yIGFjcXVpcmluZyBtaXNjZWxsYW5lb3VzIGhvc3Qgdm9sdGFnZSByZWd1bGF0b3JzCnVz aW5nIHRoZSByZWd1bGF0b3IgYnVsayBBUEkgaW4gdGhlIE1lZGlhVGVrIFVGUyBkcml2ZXIuIEl0 IGhhbmRsZXMgcGVyLVNvQwpzcGVjaWZpYyByZWd1bGF0b3IgbmFtZXMgYW5kIGVuYWJsZXMgdGhl bSBkdXJpbmcgYWNxdWlzaXRpb24gc28gdGhleSBhcmUKa2VwdCBvbiBkdXJpbmcgc3VzcGVuZC4K Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdWZzL2hvc3QvdWZzLW1lZGlhdGVrLmMgYi9kcml2ZXJz L3Vmcy9ob3N0L3Vmcy1tZWRpYXRlay5jCj4gaW5kZXggNTU3MDExNzJiY2YxNS4uNjUwMzZjODM5 MDMxOCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3Vmcy9ob3N0L3Vmcy1tZWRpYXRlay5jCj4gKysr IGIvZHJpdmVycy91ZnMvaG9zdC91ZnMtbWVkaWF0ZWsuYwoKWyAuLi4gXQoKPiBAQCAtMTE4OCw4 ICsxMTkwLDIxIEBAIHN0YXRpYyBpbnQgdWZzX210a19nZXRfc3VwcGxpZXMoc3RydWN0IHVmc19t dGtfaG9zdCAqaG9zdCkKPiAgewo+ICAJc3RydWN0IGRldmljZSAqZGV2ID0gaG9zdC0+aGJhLT5k ZXY7Cj4gIAljb25zdCBzdHJ1Y3QgdWZzX210a19zb2NfZGF0YSAqZGF0YSA9IG9mX2RldmljZV9n ZXRfbWF0Y2hfZGF0YShkZXYpOwo+ICsJaW50IHJldDsKPiArCj4gKwlpZiAoIWRhdGEpCj4gKwkJ cmV0dXJuIDA7Cj4gKwo+ICsJaWYgKGRhdGEtPm51bV9yZWdfbmFtZXMpIHsKPiArCQlyZXQgPSBk ZXZtX3JlZ3VsYXRvcl9idWxrX2dldF9lbmFibGUoZGV2LCBkYXRhLT5udW1fcmVnX25hbWVzLAo+ ICsJCQkJCQkgICAgIGRhdGEtPnJlZ19uYW1lcyk7Cj4gKwkJaWYgKHJldCkgewo+ICsJCQlkZXZf ZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgbWlzYyByZWd1bGF0b3JzOiAlcGVcbiIsIEVSUl9QVFIo cmV0KSk7Cj4gKwkJCXJldHVybiByZXQ7Cj4gKwkJfQo+ICsJfQo+ICAKPiAtCWlmICghZGF0YSB8 fCAhZGF0YS0+aGFzX2F2ZGQwOSkKPiArCWlmICghZGF0YS0+aGFzX2F2ZGQwOSkKPiAgCQlyZXR1 cm4gMDsKPiAgCj4gIAlob3N0LT5yZWdfYXZkZDA5ID0gZGV2bV9yZWd1bGF0b3JfZ2V0X29wdGlv bmFsKGRldiwgImF2ZGQwOSIpOwoKWyAuLi4gXQoKW1NldmVyaXR5OiBIaWdoXQpUaGlzIGlzbid0 IGEgYnVnIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgYnV0IGRvZXMgdGhpcyBkcml2ZXIgaWdu b3JlIHRoZSAKcmV0dXJuIHZhbHVlIG9mIHVmc19tdGtfbXBoeV9wb3dlcl9vbigpIHdoZW4gaW5p dGlhbGl6aW5nPwoKSW4gdWZzX210a19pbml0KCksIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0 aG91dCBjaGVja2luZyBpZiBpdCBmYWlsczoKCmRyaXZlcnMvdWZzL2hvc3QvdWZzLW1lZGlhdGVr LmM6dWZzX210a19pbml0KCkgewogICAgLi4uCgkvKgoJICogdWZzaGNkX3ZvcHNfaW5pdCgpIGlz IGludm9rZWQgYWZ0ZXIKCSAqIHVmc2hjZF9zZXR1cF9jbG9jayh0cnVlKSBpbiB1ZnNoY2RfaGJh X2luaXQoKSB0aHVzCgkgKiBwaHkgY2xvY2sgc2V0dXAgaXMgc2tpcHBlZC4KCSAqCgkgKiBFbmFi bGUgcGh5IGNsb2NrcyBzcGVjaWZpY2FsbHkgaGVyZS4KCSAqLwoJdWZzX210a19tcGh5X3Bvd2Vy X29uKGhiYSwgdHJ1ZSk7CgoJaWYgKHVmc19tdGtfaXNfcnRmZl9tdGNtb3MoaGJhKSkgewogICAg Li4uCn0KCklmIHRoZSB1bmRlcmx5aW5nIHJlZ3VsYXRvciBlbmFibGVtZW50IGZhaWxzLCB0aGUg UEhZIGNvdWxkIHJlbWFpbiB1bnBvd2VyZWQuCgpDb3VsZCB0aGlzIGNhdXNlIHRoZSBVRlMgaG9z dCBjb250cm9sbGVyIGRyaXZlciB0byBhc3N1bWUgdGhlIFBIWSBpcwpmdW5jdGlvbmFsLCB3aGlj aCBtaWdodCBsZWFkIHRvIHRpbWVvdXRzIG9yIHVucmVjb3ZlcmFibGUgaGFyZHdhcmUgaGFuZ3MK ZHVyaW5nIGluaXRpYWxpemF0aW9uPwoKW1NldmVyaXR5OiBIaWdoXQpUaGlzIGlzIGFsc28gYSBw cmUtZXhpc3RpbmcgaXNzdWUsIGJ1dCBkb2VzIHRoaXMgZHJpdmVyIGNhY2hlIGEgZGFuZ2xpbmcK cG9pbnRlciB0byB0aGUgUEhZIGRldmljZT8KCkxvb2tpbmcgYXQgdWZzX210a19wcm9iZSgpLCB0 aGUgZHJpdmVyIGFjcXVpcmVzIGEgZGV2aWNlIHJlZmVyZW5jZSB0byB0aGUKUEhZIG5vZGUgYnV0 IGltbWVkaWF0ZWx5IGRyb3BzIGl0OgoKZHJpdmVycy91ZnMvaG9zdC91ZnMtbWVkaWF0ZWsuYzp1 ZnNfbXRrX3Byb2JlKCkgewogICAgLi4uCglpZiAocGh5X25vZGUpIHsKCQlwaHlfZGV2ID0gb2Zf ZmluZF9kZXZpY2VfYnlfbm9kZShwaHlfbm9kZSk7CgkJb2Zfbm9kZV9wdXQocGh5X25vZGUpOwoJ CWlmICghcGh5X2RldikgewoJCQlkZXZfZXJyKGRldiwgInBoeV9kZXYgbm90IGZvdW5kXG4iKTsK CQkJZ290byBza2lwX3BoeTsKCQl9CgkJcHV0X2RldmljZShwaHlfZGV2KTsKCQlkZXZfaW5mbyhk ZXYsICJwaHlzIG5vZGUgZm91bmRcbiIpOwoJfQogICAgLi4uCnNraXBfcGh5OgogICAgLi4uCglp ZiAocGh5X25vZGUgJiYgcGh5X2RldikgewoJCWhvc3QgPSB1ZnNoY2RfZ2V0X3ZhcmlhbnQoaGJh KTsKCQlob3N0LT5waHlfZGV2ID0gcGh5X2RldjsKCX0KICAgIC4uLgp9CgpCZWNhdXNlIHB1dF9k ZXZpY2UoKSBpcyBjYWxsZWQgZWFybGllciwgcGh5X2RldiBjb3VsZCBwb3RlbnRpYWxseSBiZSBm cmVlZCBpZgp0aGUgUEhZIGRldmljZSBpcyB1bmJvdW5kLgoKSWYgdGhlIFBIWSBkZXZpY2UgaXMg bGF0ZXIgZnJlZWQsIHdpbGwgYWNjZXNzaW5nIHBtX3J1bnRpbWVfcHV0X3N5bmMoKSBvcgpwbV9y dW50aW1lX2dldF9zeW5jKCkgb24gaG9zdC0+cGh5X2RldiBkdXJpbmcgc3VzcGVuZCBhbmQgcmVz dW1lIGNhbGxiYWNrcwp0cmlnZ2VyIGEgdXNlLWFmdGVyLWZyZWU/CgotLSAKU2FzaGlrbyBBSSBy ZXZpZXcgwrcgaHR0cHM6Ly9zYXNoaWtvLmRldi8jL3BhdGNoc2V0LzIwMjYwNzMwLW10ODE5Ni11 ZnMtdjEwLTAtYmM1ZWNlZjIwMmRjQGNvbGxhYm9yYS5jb20/cGFydD0xMAoKLS0gCmxpbnV4LXBo eSBtYWlsaW5nIGxpc3QKbGludXgtcGh5QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cHM6Ly9saXN0 cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcGh5Cg==