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 A06C74657C0 for ; Fri, 14 Aug 2026 12:05:26 +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=1786709128; cv=none; b=uZRpbIFSCiXjyEki7cZufIms4oxvP/zCs/fP0NL70LpAx7m9RI6Jf29k1hmlZk8POtyqBENC+p1+30noCNpqYEvOPAiN9IK5gegeoW+kWpm6qTf0s3MYbqcOK4W8ys2+/X4jLH/9n6xeNinrdkAvgvKbjNGSRhCv+U/hO+2uuuo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786709128; c=relaxed/simple; bh=o5jd90A42ZW75HIH2fae5Txk4XINJhJ5RPrwgIQJ3Ag=; h=From:Subject:To:Cc:In-Reply-To:References:Content-Type:Date: Message-Id; b=hwejzg8gvM9nJLdG/RjDOBbIegIjvQkw4ZW4PaCrlo4c6ZBJ2YeuYhTFyF/eTJZEA3JxkUmhhVt3QNggv6WbVjEXG338U78Da85x6bL6gPNw9fdPOeuzP+KILoD5uAfxBzzgXQLcnoedAnaMqjcWSFvhOcFChmdl6scQlHHVIBs= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=MMZIqqqO; 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="MMZIqqqO" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E5D5C1F000E9; Fri, 14 Aug 2026 12:05:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1786709126; bh=da6QMOOTS47oqmV+uMOmXrkFq5NFs5k6BPvCf9jG+/o=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=MMZIqqqOU91iux4sT/jHY9MJ5cKqUScj500zATapqE9cx2q8lRQ+GnA3NMYyToa/f ODdJ8dcth7xzJI/punAcf9Xz04kRXeYxq4nm9+JoBHte7BzIi3SclBL66lVYgHoqk6 OeNqNPth9NvoCTaUxjcrPuBfcpfHAuIkXhjEheI7tySwOSF7XU8JD1Tlcsx+vfTSur fOqwyg5zoQPNA87UNFM+q92C0sRkdfDsvO1+KlLr/3Tl3GMo62DUwbuaTBX0lZL4KR hk4Ybh5qkAe+lpyT+EwEca4mjxKCZyIo7lmaRxkxvD0KI9U1MJBYbTJ4yMXZBdkQt0 sztljURneIsDg== From: sashiko-bot@kernel.org Subject: Re: [PATCH 3/3] i3c: master: amd: Add hot-join support Reply-To: sashiko-reviews@lists.linux.dev To: "Shubham Patil" Cc: conor+dt@kernel.org, devicetree@vger.kernel.org, robh@kernel.org, Frank.Li@kernel.org, linux-i3c@lists.infradead.org, "Alexandre Belloni" In-Reply-To: <20260814115155.3974988-4-shubhamsanjay.patil@amd.com> References: <20260814115155.3974988-1-shubhamsanjay.patil@amd.com> <20260814115155.3974988-4-shubhamsanjay.patil@amd.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Fri, 14 Aug 2026 12:05:25 +0000 Message-Id: <20260814120525.E5D5C1F000E9@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 1 potential issue(= s) to consider: - [High] The driver duplicates the I3C core framework's Hot-Join work mecha= nism but conditionally cancels it, leading to a Use-After-Free during drive= r unbind. -- --- Patch [3]: [PATCH 3/3] i3c: master: amd: Add hot-join support --- commit 06fad25ac0b3ab8838ac7e9c3c0f9c33f86244dc Author: Shubham Patil i3c: master: amd: Add hot-join support This patch adds hot-join support for the AMD AXI I3C master controller. By default, the hot-join acknowledgment is disabled, but it can be enabled via sysfs. A hot-join event is serviced by re-running DAA from a work item so the i3c core enumerates the new device. > diff --git a/drivers/i3c/master/amd-i3c-master.c b/drivers/i3c/master/amd= -i3c-master.c > --- a/drivers/i3c/master/amd-i3c-master.c > +++ b/drivers/i3c/master/amd-i3c-master.c [ ... ] > @@ -221,12 +228,14 @@ struct xi3c_master { > bool xfer_resp_valid; > int irq; > bool ibi_capable; > + bool hj_capable; > struct i3c_master_controller_ops ops; > struct { > spinlock_t lock; /* protects slots[] against the IBI handler */ > struct i3c_dev_desc *slots[XI3C_MAX_DEVS]; > unsigned int enabled_count; > } ibi; > + struct work_struct hj_work; > }; [Severity: High] Could this custom hj_work bypass the safety checks in the core framework? The I3C core provides i3c_master_queue_hotjoin() which safely handles queuing, checks the shutting_down flag, and guarantees unconditional cancellation during i3c_master_unregister(). Defining a custom work item here bypasses those safeguards. [ ... ] > @@ -1474,6 +1483,40 @@ static void xi3c_master_handle_ibi(struct xi3c_mas= ter *master) [ ... ] > +static void xi3c_master_hj_work(struct work_struct *work) > +{ > + struct xi3c_master *master =3D container_of(work, struct xi3c_master, > + hj_work); > + > + i3c_master_do_daa(&master->base); > +} > + > static irqreturn_t xi3c_master_irq_handler(int irq, void *dev_id) > { > struct xi3c_master *master =3D dev_id; > @@ -1494,6 +1537,9 @@ static irqreturn_t xi3c_master_irq_handler(int irq,= void *dev_id) > xi3c_master_handle_ibi(master); > } > =20 > + if (status & XI3C_INTR_HJ_MASK) > + queue_work(master->base.wq, &master->hj_work); > + > return IRQ_HANDLED; > } [Severity: High] Can this unconditionally queue the work even if hj_capable is false? If the device tree lacks Hot-Join support (hj_capable is false), but the hardware status register still records a Hot-Join event (for instance, from an I3C target issuing a request while an IBI interrupt triggers the handler= ), this will queue hj_work since master->hj_capable is not checked here. [ ... ] > @@ -1588,6 +1647,12 @@ static void xi3c_master_remove(struct platform_dev= ice *pdev) > if (master->ibi_capable) > disable_irq(master->irq); > =20 > + if (master->hj_capable) { > + /* Stop new Hot-Join IRQs before flushing, so the work can't be re-que= ued. */ > + xi3c_master_disable_hotjoin(&master->base); > + cancel_work_sync(&master->hj_work); > + } > + > i3c_master_unregister(&master->base); > } [Severity: High] Could this lead to a use-after-free during driver unbind? If the work was queued while hj_capable is false, this conditional block is skipped and the work is never cancelled. The devres framework will free the master structure, but the work remains on the workqueue and will access fre= ed memory when it executes. --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20260814115155.3974= 988-1-shubhamsanjay.patil@amd.com?part=3D3 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 3E398C5CFDB for ; Fri, 14 Aug 2026 12:05:28 +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=1wlVzUl65gDl+NnnCmj9zV42zfBCZXI8qWHRHmU0TtE=; b=SMNy9sCzjLFVr4 66HyQ29tqU1L0Ve43vVbk0Y1rNfD9FANaHnLDJ9GPERYhZq34fVFaHL9JH1KSI49Zr5U7+HdcfcpM lWspLcRYWR0/fBoeFrFIQ9bLGGGoaJS+dLIIYvldD+ukGB5YaCgS4lBfRB8wuqiyRQuv8GYhL2UnZ LuqBb20SxNFcuu8+hHhqa3fi+3DCSrhhbsQrXZWMtWKUXlbI1CingU9Ac5AP2Bt5w5bhLqhWgP8p3 5ksSOJPF5iqDNTIW76CpP8GDrM1PsurQGwZeCrTd7W791fpaKjO8CMaTlrFTcOTHcSllc0K9kk4ne cqCjloUNzQLS7Nx3ALHw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wuqf9-00000002d16-3RNQ; Fri, 14 Aug 2026 12:05:27 +0000 Received: from sea.source.kernel.org ([172.234.252.31]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1wuqf8-00000002d0o-3ywo for linux-i3c@lists.infradead.org; Fri, 14 Aug 2026 12:05:27 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id 692BB41A43; Fri, 14 Aug 2026 12:05:26 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id E5D5C1F000E9; Fri, 14 Aug 2026 12:05:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1786709126; bh=da6QMOOTS47oqmV+uMOmXrkFq5NFs5k6BPvCf9jG+/o=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=MMZIqqqOU91iux4sT/jHY9MJ5cKqUScj500zATapqE9cx2q8lRQ+GnA3NMYyToa/f ODdJ8dcth7xzJI/punAcf9Xz04kRXeYxq4nm9+JoBHte7BzIi3SclBL66lVYgHoqk6 OeNqNPth9NvoCTaUxjcrPuBfcpfHAuIkXhjEheI7tySwOSF7XU8JD1Tlcsx+vfTSur fOqwyg5zoQPNA87UNFM+q92C0sRkdfDsvO1+KlLr/3Tl3GMo62DUwbuaTBX0lZL4KR hk4Ybh5qkAe+lpyT+EwEca4mjxKCZyIo7lmaRxkxvD0KI9U1MJBYbTJ4yMXZBdkQt0 sztljURneIsDg== From: sashiko-bot@kernel.org Subject: Re: [PATCH 3/3] i3c: master: amd: Add hot-join support To: "Shubham Patil" Cc: conor+dt@kernel.org, devicetree@vger.kernel.org, robh@kernel.org, Frank.Li@kernel.org, linux-i3c@lists.infradead.org, "Alexandre Belloni" In-Reply-To: <20260814115155.3974988-4-shubhamsanjay.patil@amd.com> References: <20260814115155.3974988-1-shubhamsanjay.patil@amd.com> <20260814115155.3974988-4-shubhamsanjay.patil@amd.com> Date: Fri, 14 Aug 2026 12:05:25 +0000 Message-Id: <20260814120525.E5D5C1F000E9@smtp.kernel.org> X-BeenThere: linux-i3c@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: 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-i3c" Errors-To: linux-i3c-bounces+linux-i3c=archiver.kernel.org@lists.infradead.org VGhhbmsgeW91IGZvciB5b3VyIGNvbnRyaWJ1dGlvbiEgU2FzaGlrbyBBSSByZXZpZXcgZm91bmQg MSBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6Ci0gW0hpZ2hdIFRoZSBkcml2ZXIgZHVw bGljYXRlcyB0aGUgSTNDIGNvcmUgZnJhbWV3b3JrJ3MgSG90LUpvaW4gd29yayBtZWNoYW5pc20g YnV0IGNvbmRpdGlvbmFsbHkgY2FuY2VscyBpdCwgbGVhZGluZyB0byBhIFVzZS1BZnRlci1GcmVl IGR1cmluZyBkcml2ZXIgdW5iaW5kLgotLQoKLS0tIFBhdGNoIFszXTogW1BBVENIIDMvM10gaTNj OiBtYXN0ZXI6IGFtZDogQWRkIGhvdC1qb2luIHN1cHBvcnQgLS0tCmNvbW1pdCAwNmZhZDI1YWMw YjNhYjg4MzhhYzdlOWMzYzBmOWMzM2Y4NjI0NGRjCkF1dGhvcjogU2h1YmhhbSBQYXRpbCA8c2h1 YmhhbXNhbmpheS5wYXRpbEBhbWQuY29tPgoKaTNjOiBtYXN0ZXI6IGFtZDogQWRkIGhvdC1qb2lu IHN1cHBvcnQKClRoaXMgcGF0Y2ggYWRkcyBob3Qtam9pbiBzdXBwb3J0IGZvciB0aGUgQU1EIEFY SSBJM0MgbWFzdGVyIGNvbnRyb2xsZXIuCkJ5IGRlZmF1bHQsIHRoZSBob3Qtam9pbiBhY2tub3ds ZWRnbWVudCBpcyBkaXNhYmxlZCwgYnV0IGl0IGNhbiBiZSBlbmFibGVkCnZpYSBzeXNmcy4gQSBo b3Qtam9pbiBldmVudCBpcyBzZXJ2aWNlZCBieSByZS1ydW5uaW5nIERBQSBmcm9tIGEgd29yawpp dGVtIHNvIHRoZSBpM2MgY29yZSBlbnVtZXJhdGVzIHRoZSBuZXcgZGV2aWNlLgoKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9pM2MvbWFzdGVyL2FtZC1pM2MtbWFzdGVyLmMgYi9kcml2ZXJzL2kzYy9t YXN0ZXIvYW1kLWkzYy1tYXN0ZXIuYwo+IC0tLSBhL2RyaXZlcnMvaTNjL21hc3Rlci9hbWQtaTNj LW1hc3Rlci5jCj4gKysrIGIvZHJpdmVycy9pM2MvbWFzdGVyL2FtZC1pM2MtbWFzdGVyLmMKWyAu Li4gXQo+IEBAIC0yMjEsMTIgKzIyOCwxNCBAQCBzdHJ1Y3QgeGkzY19tYXN0ZXIgewo+ICAJYm9v bCB4ZmVyX3Jlc3BfdmFsaWQ7Cj4gIAlpbnQgaXJxOwo+ICAJYm9vbCBpYmlfY2FwYWJsZTsKPiAr CWJvb2wgaGpfY2FwYWJsZTsKPiAgCXN0cnVjdCBpM2NfbWFzdGVyX2NvbnRyb2xsZXJfb3BzIG9w czsKPiAgCXN0cnVjdCB7Cj4gIAkJc3BpbmxvY2tfdCBsb2NrOyAvKiBwcm90ZWN0cyBzbG90c1td IGFnYWluc3QgdGhlIElCSSBoYW5kbGVyICovCj4gIAkJc3RydWN0IGkzY19kZXZfZGVzYyAqc2xv dHNbWEkzQ19NQVhfREVWU107Cj4gIAkJdW5zaWduZWQgaW50IGVuYWJsZWRfY291bnQ7Cj4gIAl9 IGliaTsKPiArCXN0cnVjdCB3b3JrX3N0cnVjdCBoal93b3JrOwo+ICB9OwoKW1NldmVyaXR5OiBI aWdoXQpDb3VsZCB0aGlzIGN1c3RvbSBoal93b3JrIGJ5cGFzcyB0aGUgc2FmZXR5IGNoZWNrcyBp biB0aGUgY29yZSBmcmFtZXdvcms/CgpUaGUgSTNDIGNvcmUgcHJvdmlkZXMgaTNjX21hc3Rlcl9x dWV1ZV9ob3Rqb2luKCkgd2hpY2ggc2FmZWx5IGhhbmRsZXMKcXVldWluZywgY2hlY2tzIHRoZSBz aHV0dGluZ19kb3duIGZsYWcsIGFuZCBndWFyYW50ZWVzIHVuY29uZGl0aW9uYWwKY2FuY2VsbGF0 aW9uIGR1cmluZyBpM2NfbWFzdGVyX3VucmVnaXN0ZXIoKS4gRGVmaW5pbmcgYSBjdXN0b20gd29y ayBpdGVtCmhlcmUgYnlwYXNzZXMgdGhvc2Ugc2FmZWd1YXJkcy4KClsgLi4uIF0KPiBAQCAtMTQ3 NCw2ICsxNDgzLDQwIEBAIHN0YXRpYyB2b2lkIHhpM2NfbWFzdGVyX2hhbmRsZV9pYmkoc3RydWN0 IHhpM2NfbWFzdGVyICptYXN0ZXIpClsgLi4uIF0KPiArc3RhdGljIHZvaWQgeGkzY19tYXN0ZXJf aGpfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gK3sKPiArCXN0cnVjdCB4aTNjX21h c3RlciAqbWFzdGVyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB4aTNjX21hc3RlciwKPiAr CQkJCQkJICBoal93b3JrKTsKPiArCj4gKwlpM2NfbWFzdGVyX2RvX2RhYSgmbWFzdGVyLT5iYXNl KTsKPiArfQo+ICsKPiAgc3RhdGljIGlycXJldHVybl90IHhpM2NfbWFzdGVyX2lycV9oYW5kbGVy KGludCBpcnEsIHZvaWQgKmRldl9pZCkKPiAgewo+ICAJc3RydWN0IHhpM2NfbWFzdGVyICptYXN0 ZXIgPSBkZXZfaWQ7Cj4gQEAgLTE0OTQsNiArMTUzNyw5IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCB4 aTNjX21hc3Rlcl9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCj4gIAkJCXhpM2Nf bWFzdGVyX2hhbmRsZV9pYmkobWFzdGVyKTsKPiAgCX0KPiAgCj4gKwlpZiAoc3RhdHVzICYgWEkz Q19JTlRSX0hKX01BU0spCj4gKwkJcXVldWVfd29yayhtYXN0ZXItPmJhc2Uud3EsICZtYXN0ZXIt PmhqX3dvcmspOwo+ICsKPiAgCXJldHVybiBJUlFfSEFORExFRDsKPiAgfQoKW1NldmVyaXR5OiBI aWdoXQpDYW4gdGhpcyB1bmNvbmRpdGlvbmFsbHkgcXVldWUgdGhlIHdvcmsgZXZlbiBpZiBoal9j YXBhYmxlIGlzIGZhbHNlPwoKSWYgdGhlIGRldmljZSB0cmVlIGxhY2tzIEhvdC1Kb2luIHN1cHBv cnQgKGhqX2NhcGFibGUgaXMgZmFsc2UpLCBidXQgdGhlCmhhcmR3YXJlIHN0YXR1cyByZWdpc3Rl ciBzdGlsbCByZWNvcmRzIGEgSG90LUpvaW4gZXZlbnQgKGZvciBpbnN0YW5jZSwgZnJvbQphbiBJ M0MgdGFyZ2V0IGlzc3VpbmcgYSByZXF1ZXN0IHdoaWxlIGFuIElCSSBpbnRlcnJ1cHQgdHJpZ2dl cnMgdGhlIGhhbmRsZXIpLAp0aGlzIHdpbGwgcXVldWUgaGpfd29yayBzaW5jZSBtYXN0ZXItPmhq X2NhcGFibGUgaXMgbm90IGNoZWNrZWQgaGVyZS4KClsgLi4uIF0KPiBAQCAtMTU4OCw2ICsxNjQ3 LDEyIEBAIHN0YXRpYyB2b2lkIHhpM2NfbWFzdGVyX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2KQo+ICAJaWYgKG1hc3Rlci0+aWJpX2NhcGFibGUpCj4gIAkJZGlzYWJsZV9pcnEo bWFzdGVyLT5pcnEpOwo+ICAKPiArCWlmIChtYXN0ZXItPmhqX2NhcGFibGUpIHsKPiArCQkvKiBT dG9wIG5ldyBIb3QtSm9pbiBJUlFzIGJlZm9yZSBmbHVzaGluZywgc28gdGhlIHdvcmsgY2FuJ3Qg YmUgcmUtcXVldWVkLiAqLwo+ICsJCXhpM2NfbWFzdGVyX2Rpc2FibGVfaG90am9pbigmbWFzdGVy LT5iYXNlKTsKPiArCQljYW5jZWxfd29ya19zeW5jKCZtYXN0ZXItPmhqX3dvcmspOwo+ICsJfQo+ ICsKPiAgCWkzY19tYXN0ZXJfdW5yZWdpc3RlcigmbWFzdGVyLT5iYXNlKTsKPiAgfQoKW1NldmVy aXR5OiBIaWdoXQpDb3VsZCB0aGlzIGxlYWQgdG8gYSB1c2UtYWZ0ZXItZnJlZSBkdXJpbmcgZHJp dmVyIHVuYmluZD8KCklmIHRoZSB3b3JrIHdhcyBxdWV1ZWQgd2hpbGUgaGpfY2FwYWJsZSBpcyBm YWxzZSwgdGhpcyBjb25kaXRpb25hbCBibG9jayBpcwpza2lwcGVkIGFuZCB0aGUgd29yayBpcyBu ZXZlciBjYW5jZWxsZWQuIFRoZSBkZXZyZXMgZnJhbWV3b3JrIHdpbGwgZnJlZSB0aGUKbWFzdGVy IHN0cnVjdHVyZSwgYnV0IHRoZSB3b3JrIHJlbWFpbnMgb24gdGhlIHdvcmtxdWV1ZSBhbmQgd2ls bCBhY2Nlc3MgZnJlZWQKbWVtb3J5IHdoZW4gaXQgZXhlY3V0ZXMuCgotLSAKU2FzaGlrbyBBSSBy ZXZpZXcgwrcgaHR0cHM6Ly9zYXNoaWtvLmRldi8jL3BhdGNoc2V0LzIwMjYwODE0MTE1MTU1LjM5 NzQ5ODgtMS1zaHViaGFtc2FuamF5LnBhdGlsQGFtZC5jb20/cGFydD0zCgotLSAKbGludXgtaTNj IG1haWxpbmcgbGlzdApsaW51eC1pM2NAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMu aW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWkzYwo=