>, Dominique Martinet , Sasha Levin Subject: [PATCH 5.10.y] net/9p: fix double req put in p9_fd_cancelled Date: Mon, 13 Oct 2025 11:09:32 -0400 Message-ID: <20251013150932.3383360-1-sashal@kernel.org> X-Mailer: git-send-email 2.51.0 In-Reply-To: <2025101019-zeppelin-polymer-aadc@gregkh> References: <2025101019-zeppelin-polymer-aadc@gregkh> Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-DKIM: signer='kernel.org' status='pass' reason='' DKIMCheck: Server passes DKIM test, 0 Spam score X-Spam-Score: -1.2 (-) X-Spam-Report: Spam detection software, running on the system "witcher.mxrouting.net", has performed the tests listed below against this email. Information: https://mxroutedocs.com/directadmin/spamfilters/ --- Content analysis details: (-1.2 points) --- pts rule name description ---- ---------------------- ----------------------------------------- 0.0 RCVD_IN_DNSWL_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to DNSWL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#DnsBlocklists-dnsbl-block for more information. [142.0.200.124 listed in list.dnswl.org] -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -1.0 MAILING_LIST_MULTI Multiple indicators imply a widely-seen list manager -0.0 DKIMWL_WL_HIGH DKIMwl.org - High trust sender SpamTally: Final spam score: -11 From: Nalivayko Sergey [ Upstream commit 674b56aa57f9379854cb6798c3bbcef7e7b51ab7 ] Syzkaller reports a KASAN issue as below: general protection fault, probably for non-canonical address 0xfbd59c0000000021: 0000 [#1] PREEMPT SMP KASAN NOPTI KASAN: maybe wild-memory-access in range [0xdead000000000108-0xdead00000000010f] CPU: 0 PID: 5083 Comm: syz-executor.2 Not tainted 6.1.134-syzkaller-00037-g855bd1d7d838 #0 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.12.0-1 04/01/2014 RIP: 0010:__list_del include/linux/list.h:114 [inline] RIP: 0010:__list_del_entry include/linux/list.h:137 [inline] RIP: 0010:list_del include/linux/list.h:148 [inline] RIP: 0010:p9_fd_cancelled+0xe9/0x200 net/9p/trans_fd.c:734 Call Trace: p9_client_flush+0x351/0x440 net/9p/client.c:614 p9_client_rpc+0xb6b/0xc70 net/9p/client.c:734 p9_client_version net/9p/client.c:920 [inline] p9_client_create+0xb51/0x1240 net/9p/client.c:1027 v9fs_session_init+0x1f0/0x18f0 fs/9p/v9fs.c:408 v9fs_mount+0xba/0xcb0 fs/9p/vfs_super.c:126 legacy_get_tree+0x108/0x220 fs/fs_context.c:632 vfs_get_tree+0x8e/0x300 fs/super.c:1573 do_new_mount fs/namespace.c:3056 [inline] path_mount+0x6a6/0x1e90 fs/namespace.c:3386 do_mount fs/namespace.c:3399 [inline] __do_sys_mount fs/namespace.c:3607 [inline] __se_sys_mount fs/namespace.c:3584 [inline] __x64_sys_mount+0x283/0x300 fs/namespace.c:3584 do_syscall_x64 arch/x86/entry/common.c:51 [inline] do_syscall_64+0x35/0x80 arch/x86/entry/common.c:81 entry_SYSCALL_64_after_hwframe+0x6e/0xd8 This happens because of a race condition between: - The 9p client sending an invalid flush request and later cleaning it up; - The 9p client in p9_read_work() canceled all pending requests. Thread 1 Thread 2 ... p9_client_create() ... p9_fd_create() ... p9_conn_create() ... // start Thread 2 INIT_WORK(&m->rq, p9_read_work); p9_read_work() ... p9_client_rpc() ... ... p9_conn_cancel() ... spin_lock(&m->req_lock); ... p9_fd_cancelled() ... ... spin_unlock(&m->req_lock); // status rewrite p9_client_cb(m->client, req, REQ_STATUS_ERROR) // first remove list_del(&req->req_list); ... spin_lock(&m->req_lock) ... // second remove list_del(&req->req_list); spin_unlock(&m->req_lock) ... Commit 74d6a5d56629 ("9p/trans_fd: Fix concurrency del of req_list in p9_fd_cancelled/p9_read_work") fixes a concurrency issue in the 9p filesystem client where the req_list could be deleted simultaneously by both p9_read_work and p9_fd_cancelled functions, but for the case where req->status equals REQ_STATUS_RCVD. Update the check for req->status in p9_fd_cancelled to skip processing not just received requests, but anything that is not SENT, as whatever changed the state from SENT also removed the request from its list. Found by Linux Verification Center (linuxtesting.org) with Syzkaller. Fixes: afd8d6541155 ("9P: Add cancelled() to the transport functions.") Cc: stable@vger.kernel.org Signed-off-by: Nalivayko Sergey Message-ID: <20250715154815.3501030-1-Sergey.Nalivayko@kaspersky.com> [updated the check from status == RECV || status == ERROR to status != SENT] Signed-off-by: Dominique Martinet [ replaced m->req_lock with client->lock ] Signed-off-by: Sasha Levin --- net/9p/trans_fd.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/net/9p/trans_fd.c b/net/9p/trans_fd.c index 63f4d2067059e..40d458c438df1 100644 --- a/net/9p/trans_fd.c +++ b/net/9p/trans_fd.c @@ -711,10 +711,10 @@ static int p9_fd_cancelled(struct p9_client *client, struct p9_req_t *req) p9_debug(P9_DEBUG_TRANS, "client %p req %p\n", client, req); spin_lock(&client->lock); - /* Ignore cancelled request if message has been received - * before lock. - */ - if (req->status == REQ_STATUS_RCVD) { + /* Ignore cancelled request if status changed since the request was + * processed in p9_client_flush() + */ + if (req->status != REQ_STATUS_SENT) { spin_unlock(&client->lock); return 0; } -- 2.51.0 From - Mon Oct 13 15:55:47 2025 X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 Return-Path: Delivered-To: hi@josie.lol Received: from witcher.mxrouting.net by witcher.mxrouting.net with LMTP id QA6gDKH86GisWjUAYBR5ng (envelope-from ) for ; Fri, 10 Oct 2025 12:31:29 +0000 Return-path: Envelope-to: hi@josie.lol Delivery-date: Fri, 10 Oct 2025 12:31:29 +0000 Received: from am.mirrors.kernel.org ([147.75.80.249]) by witcher.mxrouting.net with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.98) (envelope-from ) id 1v7CHP-0000000FV0z-3jfq for hi@josie.lol; Fri, 10 Oct 2025 12:31:29 +0000 Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 5BCA9188467D for ; Fri, 10 Oct 2025 12:31:50 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 175F63594A; Fri, 10 Oct 2025 12:31:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="j2NzuYbF" X-Original-To: stable@vger.kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 E66FC25771 for ; Fri, 10 Oct 2025 12:31:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760099483; cv=none; b=Agm0D2ggeBpHFbr7IUWR1EO4asuVSydhfoZQWTOzGwd6sU8E1CSQKL2g9t3rKmGTKUPVxP/R+7fFa4+ycZRPmTGyRq9wYi+Gj0DFGp2xAlCmBWa48NecIDf9fz65NrHP/QltRUlBAjktZzq6p40rw34M6xVxK/LKj3vpLWNZon8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760099483; c=relaxed/simple; bh=DMNBg9eXTTZzI9TgFMAyZf7iN0tI7LYqrLm/nhKyF+s=; h=Subject:To:Cc:From:Date:Message-ID:MIME-Version:Content-Type; b=rl0y1T4uyXiV7ZhifIzegBPygbGUHydXCj3lxYxk0gJ3acKcFpSNBdfysmlUJbYAE4NvZ9suEVIKP51a84eE5Savw35QoFaGh0bZkdFdIgnQQk9OZXuMLCuxadNOqjRapz9E24/FSJFwDLeMsqRIjpCdMx2i74fb1NWHV4Gppxw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b=j2NzuYbF; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id C15F4C4CEF1; Fri, 10 Oct 2025 12:31:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1760099482; bh=DMNBg9eXTTZzI9TgFMAyZf7iN0tI7LYqrLm/nhKyF+s=; h=Subject:To:Cc:From:Date:From; b=j2NzuYbFL4L2KIaKtBPyzfG7SAOWXqDgr9wvlZTigEA0qZt70TsmcORh3eEJbd/7N /Qn0DF4jy+7iUXguGpqnIut1IX7SnLMZjzfN8Hlh+wS3O7/Pw8CBunppGEgDrUQL8G dAg9+Dr1khw6HnQ/FyjFQCnPEoNqRIwvGDfp8Qww= Subject: FAILED: patch "[PATCH] net/9p: fix double req put in p9_fd_cancelled" failed to apply to 5.10-stable tree To: Sergey.Nalivayko@kaspersky.com,asmadeus@codewreck.org Cc: From: Date: Fri, 10 Oct 2025 14:31:19 +0200 Message-ID: <2025101019-zeppelin-polymer-aadc@gregkh> Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: 8bit X-DKIM: signer='linuxfoundation.org' status='pass' reason='' DKIMCheck: Server passes DKIM test, 0 Spam score X-Spam-Score: -2.3 (--) X-Spam-Report: Spam detection software, running on the system "witcher.mxrouting.net", has performed the tests listed below against this email. Information: https://mxroutedocs.com/directadmin/spamfilters/ --- Content analysis details: (-2.3 points) --- pts rule name description ---- ---------------------- ----------------------------------------- -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [147.75.80.249 listed in list.dnswl.org] 1.5 HEADER_FROM_DIFFERENT_DOMAINS From and EnvelopeFrom 2nd level mail domains are different 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [URIs: linuxfoundation.org] -1.0 MAILING_LIST_MULTI Multiple indicators imply a widely-seen list manager -0.4 DKIMWL_WL_HIGH DKIMwl.org - High trust sender SpamTally: Final spam score: -22 The patch below does not apply to the 5.10-stable tree. If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to . To reproduce the conflict and resubmit, you may use the following commands: git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-5.10.y git checkout FETCH_HEAD git cherry-pick -x 674b56aa57f9379854cb6798c3bbcef7e7b51ab7 # git commit -s git send-email --to '' --in-reply-to '2025101019-zeppelin-polymer-aadc@gregkh' --subject-prefix 'PATCH 5.10.y' HEAD^.. Possible dependencies: thanks, greg k-h ------------------ original commit in Linus's tree ------------------ >From 674b56aa57f9379854cb6798c3bbcef7e7b51ab7 Mon Sep 17 00:00:00 2001 From: Nalivayko Sergey Date: Tue, 15 Jul 2025 18:48:15 +0300 Subject: [PATCH] net/9p: fix double req put in p9_fd_cancelled Syzkaller reports a KASAN issue as below: general protection fault, probably for non-canonical address 0xfbd59c0000000021: 0000 [#1] PREEMPT SMP KASAN NOPTI KASAN: maybe wild-memory-access in range [0xdead000000000108-0xdead00000000010f] CPU: 0 PID: 5083 Comm: syz-executor.2 Not tainted 6.1.134-syzkaller-00037-g855bd1d7d838 #0 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.12.0-1 04/01/2014 RIP: 0010:__list_del include/linux/list.h:114 [inline] RIP: 0010:__list_del_entry include/linux/list.h:137 [inline] RIP: 0010:list_del include/linux/list.h:148 [inline] RIP: 0010:p9_fd_cancelled+0xe9/0x200 net/9p/trans_fd.c:734 Call Trace: p9_client_flush+0x351/0x440 net/9p/client.c:614 p9_client_rpc+0xb6b/0xc70 net/9p/client.c:734 p9_client_version net/9p/client.c:920 [inline] p9_client_create+0xb51/0x1240 net/9p/client.c:1027 v9fs_session_init+0x1f0/0x18f0 fs/9p/v9fs.c:408 v9fs_mount+0xba/0xcb0 fs/9p/vfs_super.c:126 legacy_get_tree+0x108/0x220 fs/fs_context.c:632 vfs_get_tree+0x8e/0x300 fs/super.c:1573 do_new_mount fs/namespace.c:3056 [inline] path_mount+0x6a6/0x1e90 fs/namespace.c:3386 do_mount fs/namespace.c:3399 [inline] __do_sys_mount fs/namespace.c:3607 [inline] __se_sys_mount fs/namespace.c:3584 [inline] __x64_sys_mount+0x283/0x300 fs/namespace.c:3584 do_syscall_x64 arch/x86/entry/common.c:51 [inline] do_syscall_64+0x35/0x80 arch/x86/entry/common.c:81 entry_SYSCALL_64_after_hwframe+0x6e/0xd8 This happens because of a race condition between: - The 9p client sending an invalid flush request and later cleaning it up; - The 9p client in p9_read_work() canceled all pending requests. Thread 1 Thread 2 ... p9_client_create() ... p9_fd_create() ... p9_conn_create() ... // start Thread 2 INIT_WORK(&m->rq, p9_read_work); p9_read_work() ... p9_client_rpc() ... ... p9_conn_cancel() ... spin_lock(&m->req_lock); ... p9_fd_cancelled() ... ... spin_unlock(&m->req_lock); // status rewrite p9_client_cb(m->client, req, REQ_STATUS_ERROR) // first remove list_del(&req->req_list); ... spin_lock(&m->req_lock) ... // second remove list_del(&req->req_list); spin_unlock(&m->req_lock) ... Commit 74d6a5d56629 ("9p/trans_fd: Fix concurrency del of req_list in p9_fd_cancelled/p9_read_work") fixes a concurrency issue in the 9p filesystem client where the req_list could be deleted simultaneously by both p9_read_work and p9_fd_cancelled functions, but for the case where req->status equals REQ_STATUS_RCVD. Update the check for req->status in p9_fd_cancelled to skip processing not just received requests, but anything that is not SENT, as whatever changed the state from SENT also removed the request from its list. Found by Linux Verification Center (linuxtesting.org) with Syzkaller. Fixes: afd8d6541155 ("9P: Add cancelled() to the transport functions.") Cc: stable@vger.kernel.org Signed-off-by: Nalivayko Sergey Message-ID: <20250715154815.3501030-1-Sergey.Nalivayko@kaspersky.com> [updated the check from status == RECV || status == ERROR to status != SENT] Signed-off-by: Dominique Martinet diff --git a/net/9p/trans_fd.c b/net/9p/trans_fd.c index 339ec4e54778..8992d8bebbdd 100644 --- a/net/9p/trans_fd.c +++ b/net/9p/trans_fd.c @@ -726,10 +726,10 @@ static int p9_fd_cancelled(struct p9_client *client, struct p9_req_t *req) p9_debug(P9_DEBUG_TRANS, "client %p req %p\n", client, req); spin_lock(&m->req_lock); - /* Ignore cancelled request if message has been received - * before lock. - */ - if (req->status == REQ_STATUS_RCVD) { + /* Ignore cancelled request if status changed since the request was + * processed in p9_client_flush() + */ + if (req->status != REQ_STATUS_SENT) { spin_unlock(&m->req_lock); return 0; } From - Mon Oct 13 15:55:47 2025 X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 Return-Path: Delivered-To: hi@josie.lol Received: from witcher.mxrouting.net by witcher.mxrouting.net with LMTP id yHKaKp4c7WjhQTwAYBR5ng (envelope-from ) for ; Mon, 13 Oct 2025 15:37:02 +0000 Return-path: Envelope-to: hi@josie.lol Delivery-date: Mon, 13 Oct 2025 15:37:02 +0000 Received: from sv.mirrors.kernel.org ([139.178.88.99]) by witcher.mxrouting.net with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.98) (envelope-from ) id 1v8Kbe-0000000GhTJ-0snl for hi@josie.lol; Mon, 13 Oct 2025 15:37:02 +0000 Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 9252D3E5675 for ; Mon, 13 Oct 2025 15:24:07 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 64D443126C1; Mon, 13 Oct 2025 15:10:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="htJcGqaF" X-Original-To: stable@vger.kernel.org Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.14]) (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 592DC30BF72; Mon, 13 Oct 2025 15:10:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.14 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760368241; cv=none; b=VAA6ZPQs/HC4NE2LhnyIPRZKb2I0azeISU3z4F3pmPjdBKrJshMFpKxC5hcMlHtgrGbbW4FscdXMOZjjXlDeLQppaW9Ld+1Ttq94xCDOnmjeSYhfaYrlahMH+OQJKWmay3NtvJs4AY1FapS8VA8Rc7KWhjTWgDtiNcrKYqw9wQI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760368241; c=relaxed/simple; bh=T6rkmZPK9y6R+KhcrUPhsT9aMA6EbLewStHqcb00su4=; h=From:To:Cc:In-Reply-To:References:Subject:Message-Id:Date: MIME-Version:Content-Type; b=iCjpJtMrgHPQl7qi6/dRY0uigiLOG8sOX+zcaX78inMw6mdJUNGNP/eY6ybxYVHZl1Lv4x2B0TnpVB+P4zG6LaJnGrC6Ogj/E0isJ/t8AYCcHrioniqFU5l7hdYepF2fnRSYNGhOk85VmFevpArpogf7XYa1com5RSvoCqEKa+4= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=pass smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=htJcGqaF; arc=none smtp.client-ip=192.198.163.14 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1760368239; x=1791904239; h=from:to:cc:in-reply-to:references:subject:message-id: date:mime-version:content-transfer-encoding; bh=T6rkmZPK9y6R+KhcrUPhsT9aMA6EbLewStHqcb00su4=; b=htJcGqaFMHiVnQ2jZmkoSS6Bf56c3j01bILEJ2ZAvbTOhIxuVJCaxcEA b61TzDuC7HtSxIFsbFvBHeaL+uVCpAEMLlPR/Q98bitoKV/VcddZXwAcU +1HXltSJOdkxqn+fr5y+WuKXuQYOWrhyFV4bhWZ3H3G7j4qinceM2bK+s yygb53j2/UmY5a4+qArtWTSBfw9Mve2a/EZiYwyW/dVrYwM6PArvw/xc2 XBKgoWHTb0w4eqKjgStIZOgLQOFETK0K7XYKK7e4M3yyxe2tjLD//sFpS oJxR9RZHPcAKj1m3cHlMVrKXsNK0YtbpFd3zqYiloRYMAdluG2LsTngsP w==; X-CSE-ConnectionGUID: 8YOEVFqaRdiFcGXNCO4J8w== X-CSE-MsgGUID: MnFvRrpkRDyU/Sz7OKtt3A== X-IronPort-AV: E=McAfee;i="6800,10657,11581"; a="62546045" X-IronPort-AV: E=Sophos;i="6.19,225,1754982000"; d="scan'208";a="62546045" Received: from fmviesa004.fm.intel.com ([10.60.135.144]) by fmvoesa108.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Oct 2025 08:10:38 -0700 X-CSE-ConnectionGUID: KsL7c0fbTSmlIFJzzkaLcQ== X-CSE-MsgGUID: ctslHxUvSiOYZyiW2PB8rg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.19,225,1754982000"; d="scan'208";a="186915218" Received: from ijarvine-mobl1.ger.corp.intel.com (HELO localhost) ([10.245.244.77]) by fmviesa004-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Oct 2025 08:10:35 -0700 From: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= To: Hans de Goede , Armin Wolf , Kurt Borja Cc: platform-driver-x86@vger.kernel.org, Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, stable@vger.kernel.org, Gal Hammer In-Reply-To: <20251013-sleep-fix-v2-1-1ad8bdb79585@gmail.com> References: <20251013-sleep-fix-v2-1-1ad8bdb79585@gmail.com> Subject: Re: [PATCH v2] platform/x86: alienware-wmi-wmax: Fix null pointer derefence in sleep handlers Message-Id: <176036823039.2473.15648931584117338012.b4-ty@linux.intel.com> Date: Mon, 13 Oct 2025 18:10:30 +0300 Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Mailer: b4 0.13.0 X-DKIM: signer='intel.com' status='pass' reason='' DKIMCheck: Server passes DKIM test, 0 Spam score X-DKIM: signer='@intel.com' status='pass' reason='' X-Spam-Score: 0.5 (/) X-Spam-Report: Spam detection software, running on the system "witcher.mxrouting.net", has performed the tests listed below against this email. Information: https://mxroutedocs.com/directadmin/spamfilters/ --- Content analysis details: (0.5 points) --- pts rule name description ---- ---------------------- ----------------------------------------- 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [URIs: intel.com] 0.0 RCVD_IN_DNSWL_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to DNSWL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#DnsBlocklists-dnsbl-block for more information. [139.178.88.99 listed in list.dnswl.org] 1.5 HEADER_FROM_DIFFERENT_DOMAINS From and EnvelopeFrom 2nd level mail domains are different 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -1.0 MAILING_LIST_MULTI Multiple indicators imply a widely-seen list manager -0.0 DKIMWL_WL_HIGH DKIMwl.org - High trust sender SpamTally: Final spam score: 5 On Mon, 13 Oct 2025 00:26:26 -0500, Kurt Borja wrote: > Initialize `awcc` with empty quirks to avoid a null pointer dereference > in sleep handlers for devices without the AWCC interface. > > This also allows some code simplification in alienware_wmax_wmi_init(). > > Thank you for your contribution, it has been applied to my local review-ilpo-fixes branch. Note it will show up in the public platform-drivers-x86/review-ilpo-fixes branch only once I've pushed my local branch there, which might take a while. The list of commits applied: [1/1] platform/x86: alienware-wmi-wmax: Fix null pointer derefence in sleep handlers commit: 5ae9382ac3c56d044ed065d0ba6d8c42139a8f98 -- i. From - Mon Oct 13 15:55:47 2025 X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 Return-Path: Delivered-To: hi@josie.lol Received: from witcher.mxrouting.net by witcher.mxrouting.net with LMTP id 4FuVGpmN7Gj90yoAYBR5ng (envelope-from ) for ; Mon, 13 Oct 2025 05:26:49 +0000 Return-path: Envelope-to: hi@josie.lol Delivery-date: Mon, 13 Oct 2025 05:26:49 +0000 Received: from sv.mirrors.kernel.org ([139.178.88.99]) by witcher.mxrouting.net with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.98) (envelope-from ) id 1v8B57-0000000DYEn-0UR2 for hi@josie.lol; Mon, 13 Oct 2025 05:26:49 +0000 Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 12E473B35E7 for ; Mon, 13 Oct 2025 05:26:48 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id D140A2D12EF; Mon, 13 Oct 2025 05:26:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="koPUogAc" X-Original-To: stable@vger.kernel.org Received: from mail-vk1-f176.google.com (mail-vk1-f176.google.com [209.85.221.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2B58D2C11E5 for ; Mon, 13 Oct 2025 05:26:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.176 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760333205; cv=none; b=HL+UIOOu1oiJUe9hQwyHIeT53of6xAgXGwUbOPl39i7okvgjZ6OqvvvQmD1dyAkm3fI9wwfjPsrVV0mDioQ5Astbk+/IiFKLZbqvMpWoG8j+bz34e67zGJFOLxSoIPHohmDnOY3mahZlrfMzELnj6gBbAqu46GhYS7n3rMmWrls= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760333205; c=relaxed/simple; bh=bte+/wVXcSwCx7MOPocExUhSsc8jEuDiXCklRhPJ27Q=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc; b=OB1T0o+Qt1O20X3HstOTdCQvwBXLA5IR3pnI+rMoQqyBom7fEU2FcKSt3oCJ2V5ZO1uoZ1jJ7q4bNE9CirDDG6i7KcUMM4mjASsX4SmfDtijnWzgO7N49klGWBiwccmIUx2Sb2ODfd5GigjeGMLprzXaNNCMpGHFRVZVH9F+L8I= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=koPUogAc; arc=none smtp.client-ip=209.85.221.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-vk1-f176.google.com with SMTP id 71dfb90a1353d-54bbaca0ee5so1171911e0c.3 for ; Sun, 12 Oct 2025 22:26:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760333203; x=1760938003; darn=vger.kernel.org; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:from:to:cc:subject:date:message-id:reply-to; bh=Vf/bbB2S5/yiMGyiJS9WX49wXVFc70s9KvXRbsVke5k=; b=koPUogAcFjaXU0mvqo1vdCrhXDgRQoj/+6lZZUDDcGugQ7pgKKYKqje597SY4/n0Qq 1+0s9JckCGE+gJ4/V4lPquso5oWb17zVF/tJkJB/NIR0U7/pgMtXV31427CHTeWPpYqQ vl2M/CcInNEif7Iu3UMOl++44yrsmrS6+E4GeHcIvZCyuLCbZsrcr0eQtcnJONdtH5Lg GoJ/0BogwAWJHoUO9ZpiFrZEvdE4nwhI1VDHhT4iN7GvelSIaSaTYfSYZMCygYnpuZPX Frc0Fz98m6jR+Cve3rJaQnqyy9gNBdTvNhCRVAGY1kqNAlIcDdzp4UGPhGdcAUuG4duP DalA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760333203; x=1760938003; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=Vf/bbB2S5/yiMGyiJS9WX49wXVFc70s9KvXRbsVke5k=; b=MYISdDUJEq23oqpKXKrnjWI4D4+i+LUZ+5I3XpBag3natlekGNk6GFFcaH2j0kmWEJ aMYyoqXGV6pe4iQNjpZuXg0fzMgywRC2h0e0X7XLkLEeeS7pl/AnPgMInryudyOTg8CB vrOpvaTQpbKrc2y+P+PFE8nm+w6bQTmniiHRY1OKaFwBUF2pPAHaEj4Yx4DP8VBEBLlb cTz4xgPmJSuxlhjYloulYlJPaFuahO3cM7VO1OBVNywCQedhz/Ovy1C62KHdv/DuOs9U G2vVVp+n7a16j32SipF7ue/uLr9EaqjBN1KeCi9b7JRRgKQl41xoyIW0oKPo8AzmBBcU eaRw== X-Forwarded-Encrypted: i=1; AJvYcCWp8Pb8DF5ta4QxLZHTCNNHJ7t0Z4tPwB/C22BSO5A973qtu3+ijVbCDGGoakKaNpANj8FCxWU=@vger.kernel.org X-Gm-Message-State: AOJu0YyAUNhC+JY+PTUynrD3/zjwbQMkA3vzDv3jxKolyS4NZtt3OKXS ns7omCCQKTe8iBqQZ4eo4oBXX2n2TABUjSJ3Oxv7V/EHCXJ1WQgQMki6 X-Gm-Gg: ASbGnctPTAMMH3kPmg09pGZ1tBaKXiK2Gvw9COWz6MZLvpgWb7M/beEBmmzFJvQMUtr GA2FsY0uJXYInLHQ3PI+hLJNhYY9s9pDOWql+LM4cDjfR+rrjmx01h8mrageHhOCWw1bYJyxSfR zUIE+pLkJNn0nDTRwQpfDdQPk1+hkxQ6GUOQz194h56BWuJgNj9tEQDWjdUbItZMmmWz43XSega 5gdOk8AyK+988z9grodhSkw9MhLROu20A60KbmVjqz9vFJ+bC9nxqzZg6UxKBCOoOvZP2P4p38U 2jrRK3bSyHaFezovuZsR83JJfV8WygO2UtYHQoPw6iXE5PPFyR7u78KMmiRDRpd/WbJ661Ig5u6 rjorlJTBgUZUaN68p2h/tXiPxIrp9tfRfr96FDNfAJPs= X-Google-Smtp-Source: AGHT+IHxXC+pCZQx+aXV0IlhjLPkLiyhSlWgyNUpi8Iml6vF4L9jhh0Rvj5DdpwJ8PedQvRsqfXzrg== X-Received: by 2002:a05:6122:2a0d:b0:554:afe3:1fb1 with SMTP id 71dfb90a1353d-554b8cf023dmr7141600e0c.14.1760333203045; Sun, 12 Oct 2025 22:26:43 -0700 (PDT) Received: from [192.168.100.70] ([2800:bf0:82:3d2:875c:6c76:e06b:3095]) by smtp.gmail.com with ESMTPSA id 71dfb90a1353d-554d80a456csm2823171e0c.14.2025.10.12.22.26.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Oct 2025 22:26:42 -0700 (PDT) From: Kurt Borja Date: Mon, 13 Oct 2025 00:26:26 -0500 Subject: [PATCH v2] platform/x86: alienware-wmi-wmax: Fix null pointer derefence in sleep handlers Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20251013-sleep-fix-v2-1-1ad8bdb79585@gmail.com> X-B4-Tracking: v=1; b=H4sIAIGN7GgC/03MQQrDIBCF4auEWdfiGAzYVe9RsjA6TQaSGDRIS /DutYFCl//j8R2QKDIluDUHRMqcOKw11KUBN9l1JMG+NiipNEpUIs1Em3jyS2gvtem8N8q2UP9 bpDqf1qOvPXHaQ3yfdMbv+lPaPyWjQGHU4BCHjpyl+7hYnq8uLNCXUj56xq9logAAAA== X-Change-ID: 20251012-sleep-fix-5d0596dd92a3 To: Hans de Goede , =?utf-8?q?Ilpo_J=C3=A4rvinen?= , Armin Wolf Cc: platform-driver-x86@vger.kernel.org, Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, stable@vger.kernel.org, Gal Hammer , Kurt Borja X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2073; i=kuurtb@gmail.com; h=from:subject:message-id; bh=bte+/wVXcSwCx7MOPocExUhSsc8jEuDiXCklRhPJ27Q=; b=owGbwMvMwCUmluBs8WX+lTTG02pJDBlveifKcc/+nSOSsjfYylpj8yOhFKW5b119Os6ohc79N l93wV/mjlIWBjEuBlkxRZb2hEXfHkXlvfU7EHofZg4rE8gQBi5OAZjI52uMDCs2x3aqxHp/169R v/Bx8tVU/YU7ArkdNa/7VL67tj/Z0prhf4ik59GDG3/LRu/9KNXfdWJOwlGbyK9/vnYX1z5WUnd NYwcA X-Developer-Key: i=kuurtb@gmail.com; a=openpgp; fpr=54D3BE170AEF777983C3C63B57E3B6585920A69A X-DKIM: signer='gmail.com' status='pass' reason='' DKIMCheck: Server passes DKIM test, 0 Spam score X-Spam-Score: 0.4 (/) X-Spam-Report: Spam detection software, running on the system "witcher.mxrouting.net", has performed the tests listed below against this email. Information: https://mxroutedocs.com/directadmin/spamfilters/ --- Content analysis details: (0.4 points) --- pts rule name description ---- ---------------------- ----------------------------------------- 0.0 RCVD_IN_DNSWL_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to DNSWL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#DnsBlocklists-dnsbl-block for more information. [139.178.88.99 listed in list.dnswl.org] 1.5 HEADER_FROM_DIFFERENT_DOMAINS From and EnvelopeFrom 2nd level mail domains are different 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider [kuurtb[at]gmail.com] -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid 0.0 FREEMAIL_FORGED_FROMDOMAIN 2nd level domains in From and EnvelopeFrom freemail headers are different -1.0 MAILING_LIST_MULTI Multiple indicators imply a widely-seen list manager SpamTally: Final spam score: 4 Initialize `awcc` with empty quirks to avoid a null pointer dereference in sleep handlers for devices without the AWCC interface. This also allows some code simplification in alienware_wmax_wmi_init(). Cc: stable@vger.kernel.org Reported-by: Gal Hammer Tested-by: Gal Hammer Fixes: 07ac275981b1 ("platform/x86: alienware-wmi-wmax: Add support for manual fan control") Signed-off-by: Kurt Borja --- Changes in v2: - Little logic mistake in the `force_gmode` path... (oops) - Link to v1: https://lore.kernel.org/r/20251013-sleep-fix-v1-1-92bc11b6ecae@gmail.com --- drivers/platform/x86/dell/alienware-wmi-wmax.c | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/drivers/platform/x86/dell/alienware-wmi-wmax.c b/drivers/platform/x86/dell/alienware-wmi-wmax.c index 31f9643a6a3b5c2eb74b089dc071964bd6df8b43..cefeef84d85d111e9cc15ebed35fb83f03c41c7c 100644 --- a/drivers/platform/x86/dell/alienware-wmi-wmax.c +++ b/drivers/platform/x86/dell/alienware-wmi-wmax.c @@ -393,7 +393,7 @@ static const enum platform_profile_option awcc_mode_to_platform_profile[AWCC_PRO [AWCC_PROFILE_LEGACY_PERFORMANCE] = PLATFORM_PROFILE_PERFORMANCE, }; -static struct awcc_quirks *awcc; +static struct awcc_quirks *awcc = &empty_quirks; /* * The HDMI mux sysfs node indicates the status of the HDMI input mux. @@ -1680,22 +1680,14 @@ int __init alienware_wmax_wmi_init(void) if (id) awcc = id->driver_data; - if (force_hwmon) { - if (!awcc) - awcc = &empty_quirks; - + if (force_hwmon) awcc->hwmon = true; - } - - if (force_platform_profile) { - if (!awcc) - awcc = &empty_quirks; + if (force_platform_profile) awcc->pprof = true; - } if (force_gmode) { - if (awcc) + if (awcc->pprof) awcc->gmode = true; else pr_warn("force_gmode requires platform profile support\n"); --- base-commit: 3ed17349f18774c24505b0c21dfbd3cc4f126518 change-id: 20251012-sleep-fix-5d0596dd92a3 -- ~ Kurt From - Mon Oct 13 15:55:47 2025 X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 Return-Path: Delivered-To: hi@josie.lol Received: from witcher.mxrouting.net by witcher.mxrouting.net with LMTP id qJHHHPEg7Wg2BT4AYBR5ng (envelope-from ) for ; Mon, 13 Oct 2025 15:55:29 +0000 Return-path: Envelope-to: hi@josie.lol Delivery-date: Mon, 13 Oct 2025 15:55:29 +0000 Received: from dfw.mirrors.kernel.org ([142.0.200.124]) by witcher.mxrouting.net with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.98) (envelope-from ) id 1v8KtV-0000000HKAI-0Nh2 for hi@josie.lol; Mon, 13 Oct 2025 15:55:29 +0000 Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.mirrors.kernel.org (Postfix) with ESMTPS id F3BEA540106 for ; Mon, 13 Oct 2025 15:24:47 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 4C4D530C634; Mon, 13 Oct 2025 15:11:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="uO/8wLJ4" X-Original-To: stable@vger.kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 2410A2FF642 for ; Mon, 13 Oct 2025 15:11:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760368303; cv=none; b=Jn2zPVeAqChsGlClGzf8OzulOn3868x3IaQzbgI2pvLBDz5u9XW8vFp6YA/CQ/RI6WRnb30vhU5+2mo5OsH6lH3pD0lD8xJNgIzRCHe5AM0PUGTL3H8YYXC3JT0ot9Sd1PSFYA81ksdYKLPp7o75KoQq2/xhSj0jSIpjZCr4oPU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760368303; c=relaxed/simple; bh=Vm1mwbp59LdzZ9OFbFKl+sLTDRpySWkcCDczY030Uws=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=sT/CQ/XEcKmlb0r4HtvcwffftIBhsYQr0esQRTRXnqSZk6uZ+Pp2Uh2xXlgjALUg+kuHeSMsD0cIdesK2GAmHCy7BZocq5u4CBDzkHYZO4hTvKjeuMDy6g1sqg8m82fS7s2SVBtGPkwunDnt2xlhZYxxbnlzCUAmH+stbhCGLS0= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=uO/8wLJ4; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 14C2AC4CEFE; Mon, 13 Oct 2025 15:11:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1760368302; bh=Vm1mwbp59LdzZ9OFbFKl+sLTDRpySWkcCDczY030Uws=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=uO/8wLJ4p3kCOOsHSRvP1RzwBGn1ZwbXG3EQ5TWBbgJTqhm9HVFVaijy1Vc+iKgRO O3fV56JvvoVos3QlWVUVX5pu0wrtDDP2/davwwzKH7MqnRkp8pgOPFM44P9HPNlF4N rr8ocrtYYEApUH2HLOJWmgxoGZspGV9GzOfWL5ltCrPvqZOWn6cR/dOzLlzzYhkmpg gBoUklzkWGXVVkFu5DZ+LR3cxK6LC7pWqsIA78L+UKq5KIoiIaNnSDX+Mb/PuzeB9w G5gBcdh/hBvrEe3txPG5hyk20tUXOX9CjAPNkBym4/M8mVbZtcqJUP0IHRUvAI8C72 mQduXo7a/YfFg== From: Sasha Levin To: stable@vger.kernel.org Cc: Sean Christopherson , syzbot+cc2032ba16cc2018ca25@syzkaller.appspotmail.com, Jim Mattson , Sasha Levin Subject: [PATCH 6.1.y] KVM: x86: Don't (re)check L1 intercepts when completing userspace I/O Date: Mon, 13 Oct 2025 11:11:40 -0400 Message-ID: <20251013151140.3383954-1-sashal@kernel.org> X-Mailer: git-send-email 2.51.0 In-Reply-To: <2025101005-married-company-a3fc@gregkh> References: <2025101005-married-company-a3fc@gregkh> Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-DKIM: signer='kernel.org' status='pass' reason='' DKIMCheck: Server passes DKIM test, 0 Spam score X-Spam-Score: -1.2 (-) X-Spam-Report: Spam detection software, running on the system "witcher.mxrouting.net", has performed the tests listed below against this email. Information: https://mxroutedocs.com/directadmin/spamfilters/ --- Content analysis details: (-1.2 points) --- pts rule name description ---- ---------------------- ----------------------------------------- 0.0 RCVD_IN_DNSWL_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to DNSWL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#DnsBlocklists-dnsbl-block for more information. [142.0.200.124 listed in list.dnswl.org] -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -1.0 MAILING_LIST_MULTI Multiple indicators imply a widely-seen list manager -0.0 DKIMWL_WL_HIGH DKIMwl.org - High trust sender SpamTally: Final spam score: -11 From: Sean Christopherson [ Upstream commit e750f85391286a4c8100275516973324b621a269 ] When completing emulation of instruction that generated a userspace exit for I/O, don't recheck L1 intercepts as KVM has already finished that phase of instruction execution, i.e. has already committed to allowing L2 to perform I/O. If L1 (or host userspace) modifies the I/O permission bitmaps during the exit to userspace, KVM will treat the access as being intercepted despite already having emulated the I/O access. Pivot on EMULTYPE_NO_DECODE to detect that KVM is completing emulation. Of the three users of EMULTYPE_NO_DECODE, only complete_emulated_io() (the intended "recipient") can reach the code in question. gp_interception()'s use is mutually exclusive with is_guest_mode(), and complete_emulated_insn_gp() unconditionally pairs EMULTYPE_NO_DECODE with EMULTYPE_SKIP. The bad behavior was detected by a syzkaller program that toggles port I/O interception during the userspace I/O exit, ultimately resulting in a WARN on vcpu->arch.pio.count being non-zero due to KVM no completing emulation of the I/O instruction. WARNING: CPU: 23 PID: 1083 at arch/x86/kvm/x86.c:8039 emulator_pio_in_out+0x154/0x170 [kvm] Modules linked in: kvm_intel kvm irqbypass CPU: 23 UID: 1000 PID: 1083 Comm: repro Not tainted 6.16.0-rc5-c1610d2d66b1-next-vm #74 NONE Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 0.0.0 02/06/2015 RIP: 0010:emulator_pio_in_out+0x154/0x170 [kvm] PKRU: 55555554 Call Trace: kvm_fast_pio+0xd6/0x1d0 [kvm] vmx_handle_exit+0x149/0x610 [kvm_intel] kvm_arch_vcpu_ioctl_run+0xda8/0x1ac0 [kvm] kvm_vcpu_ioctl+0x244/0x8c0 [kvm] __x64_sys_ioctl+0x8a/0xd0 do_syscall_64+0x5d/0xc60 entry_SYSCALL_64_after_hwframe+0x4b/0x53 Reported-by: syzbot+cc2032ba16cc2018ca25@syzkaller.appspotmail.com Closes: https://lore.kernel.org/all/68790db4.a00a0220.3af5df.0020.GAE@google.com Fixes: 8a76d7f25f8f ("KVM: x86: Add x86 callback for intercept check") Cc: stable@vger.kernel.org Cc: Jim Mattson Link: https://lore.kernel.org/r/20250715190638.1899116-1-seanjc@google.com Signed-off-by: Sean Christopherson [ is_guest_mode() was open coded ] Signed-off-by: Sasha Levin --- arch/x86/kvm/emulate.c | 11 ++++------- arch/x86/kvm/kvm_emulate.h | 2 +- arch/x86/kvm/x86.c | 9 ++++++++- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c index 4a43261d25a2a..0cb97e570f63e 100644 --- a/arch/x86/kvm/emulate.c +++ b/arch/x86/kvm/emulate.c @@ -5478,12 +5478,11 @@ void init_decode_cache(struct x86_emulate_ctxt *ctxt) ctxt->mem_read.end = 0; } -int x86_emulate_insn(struct x86_emulate_ctxt *ctxt) +int x86_emulate_insn(struct x86_emulate_ctxt *ctxt, bool check_intercepts) { const struct x86_emulate_ops *ops = ctxt->ops; int rc = X86EMUL_CONTINUE; int saved_dst_type = ctxt->dst.type; - unsigned emul_flags; ctxt->mem_read.pos = 0; @@ -5497,8 +5496,6 @@ int x86_emulate_insn(struct x86_emulate_ctxt *ctxt) rc = emulate_ud(ctxt); goto done; } - - emul_flags = ctxt->ops->get_hflags(ctxt); if (unlikely(ctxt->d & (No64|Undefined|Sse|Mmx|Intercept|CheckPerm|Priv|Prot|String))) { if ((ctxt->mode == X86EMUL_MODE_PROT64 && (ctxt->d & No64)) || @@ -5532,7 +5529,7 @@ int x86_emulate_insn(struct x86_emulate_ctxt *ctxt) fetch_possible_mmx_operand(&ctxt->dst); } - if (unlikely(emul_flags & X86EMUL_GUEST_MASK) && ctxt->intercept) { + if (unlikely(check_intercepts) && ctxt->intercept) { rc = emulator_check_intercept(ctxt, ctxt->intercept, X86_ICPT_PRE_EXCEPT); if (rc != X86EMUL_CONTINUE) @@ -5561,7 +5558,7 @@ int x86_emulate_insn(struct x86_emulate_ctxt *ctxt) goto done; } - if (unlikely(emul_flags & X86EMUL_GUEST_MASK) && (ctxt->d & Intercept)) { + if (unlikely(check_intercepts) && (ctxt->d & Intercept)) { rc = emulator_check_intercept(ctxt, ctxt->intercept, X86_ICPT_POST_EXCEPT); if (rc != X86EMUL_CONTINUE) @@ -5615,7 +5612,7 @@ int x86_emulate_insn(struct x86_emulate_ctxt *ctxt) special_insn: - if (unlikely(emul_flags & X86EMUL_GUEST_MASK) && (ctxt->d & Intercept)) { + if (unlikely(check_intercepts) && (ctxt->d & Intercept)) { rc = emulator_check_intercept(ctxt, ctxt->intercept, X86_ICPT_POST_MEMACCESS); if (rc != X86EMUL_CONTINUE) diff --git a/arch/x86/kvm/kvm_emulate.h b/arch/x86/kvm/kvm_emulate.h index 89246446d6aa9..034cafba2cc62 100644 --- a/arch/x86/kvm/kvm_emulate.h +++ b/arch/x86/kvm/kvm_emulate.h @@ -517,7 +517,7 @@ bool x86_page_table_writing_insn(struct x86_emulate_ctxt *ctxt); #define EMULATION_RESTART 1 #define EMULATION_INTERCEPTED 2 void init_decode_cache(struct x86_emulate_ctxt *ctxt); -int x86_emulate_insn(struct x86_emulate_ctxt *ctxt); +int x86_emulate_insn(struct x86_emulate_ctxt *ctxt, bool check_intercepts); int emulator_task_switch(struct x86_emulate_ctxt *ctxt, u16 tss_selector, int idt_index, int reason, bool has_error_code, u32 error_code); diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 11ca05d830e72..b349e1fbf9dbc 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -8976,7 +8976,14 @@ int x86_emulate_instruction(struct kvm_vcpu *vcpu, gpa_t cr2_or_gpa, ctxt->exception.address = 0; } - r = x86_emulate_insn(ctxt); + /* + * Check L1's instruction intercepts when emulating instructions for + * L2, unless KVM is re-emulating a previously decoded instruction, + * e.g. to complete userspace I/O, in which case KVM has already + * checked the intercepts. + */ + r = x86_emulate_insn(ctxt, is_guest_mode(vcpu) && + !(emulation_type & EMULTYPE_NO_DECODE)); if (r == EMULATION_INTERCEPTED) return 1; -- 2.51.0 From - Mon Oct 13 15:55:47 2025 X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 Return-Path: Delivered-To: hi@josie.lol Received: from witcher.mxrouting.net by witcher.mxrouting.net with LMTP id 4CxwHn/96GimWjUAYBR5ng (envelope-from ) for ; Fri, 10 Oct 2025 12:35:11 +0000 Return-path: Envelope-to: hi@josie.lol Delivery-date: Fri, 10 Oct 2025 12:35:11 +0000 Received: from sv.mirrors.kernel.org ([139.178.88.99]) by witcher.mxrouting.net with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.98) (envelope-from ) id 1v7CL0-0000000FcHv-3pgG for hi@josie.lol; Fri, 10 Oct 2025 12:35:11 +0000 Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id CD390425233 for ; Fri, 10 Oct 2025 12:35:09 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 479F51F3BAC; Fri, 10 Oct 2025 12:35:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="tBPVPqkL" X-Original-To: stable@vger.kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 2171D1BC2A for ; Fri, 10 Oct 2025 12:35:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760099709; cv=none; b=AOhmPdHTXIpi4WrCudrAFVdF5OHfrF/L3VZYZ7Uojg21sVC5bhgItED/NvWnpnx+tge+LBW4t6pjVVcHYyWzH2IA+DlNlAQBarSkIN3KYw6+cKQr5dwiT1b3hHVamUKC9h8V+hmF63Hqf4+wK6IY0OeTWdUIyekOLCSWeogIRRk= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760099709; c=relaxed/simple; bh=PvP03BF7JfcPbLCB4YW57suMHyVX9nufNxDy2eh8ntg=; h=Subject:To:Cc:From:Date:Message-ID:MIME-Version:Content-Type; b=YTsdOGvWzRtslec3R+C/9SbRWrQBJ9ufHEJUixQ8GvWQUczTF88gpWtYcyZw4tRLgylkx4jBpKyJf7Ykd1wx02Vk8MUtCGSiUk1191yaPBudg5VAs+p1c0fZ4FjpOVq9yRxbF42jAmlb0ROw0DqMZ04Lep5jDm0JdnVHjyTRfe4= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b=tBPVPqkL; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3BE3FC4CEF1; Fri, 10 Oct 2025 12:35:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1760099708; bh=PvP03BF7JfcPbLCB4YW57suMHyVX9nufNxDy2eh8ntg=; h=Subject:To:Cc:From:Date:From; b=tBPVPqkLsTrIJlmZ4gtMEMfT8ubzVD5RzhAVMWMvHWRP6HcesAMeDmlEefLduZFHy HkZdcbKJkZnm4eQSbJJ3HQctqBDGFHxXMK9Fhqh4aXXlr7blR9Ttz4LzjPj4R3WLuE 0bA3l55nzdEdrLXqxIMxgAOu+67B/0SBO3AELXRY= Subject: FAILED: patch "[PATCH] KVM: x86: Don't (re)check L1 intercepts when completing" failed to apply to 6.1-stable tree To: seanjc@google.com,jmattson@google.com Cc: From: Date: Fri, 10 Oct 2025 14:35:06 +0200 Message-ID: <2025101005-married-company-a3fc@gregkh> Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: 8bit X-DKIM: signer='linuxfoundation.org' status='pass' reason='' DKIMCheck: Server passes DKIM test, 0 Spam score X-Spam-Score: -0.0 (/) X-Spam-Report: Spam detection software, running on the system "witcher.mxrouting.net", has performed the tests listed below against this email. Information: https://mxroutedocs.com/directadmin/spamfilters/ --- Content analysis details: (-0.0 points) --- pts rule name description ---- ---------------------- ----------------------------------------- 0.0 RCVD_IN_DNSWL_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to DNSWL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#DnsBlocklists-dnsbl-block for more information. [139.178.88.99 listed in list.dnswl.org] 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [URIs: linuxfoundation.org] 1.5 HEADER_FROM_DIFFERENT_DOMAINS From and EnvelopeFrom 2nd level mail domains are different 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -1.0 MAILING_LIST_MULTI Multiple indicators imply a widely-seen list manager -0.4 DKIMWL_WL_HIGH DKIMwl.org - High trust sender SpamTally: Final spam score: 0 The patch below does not apply to the 6.1-stable tree. If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to . To reproduce the conflict and resubmit, you may use the following commands: git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.1.y git checkout FETCH_HEAD git cherry-pick -x e750f85391286a4c8100275516973324b621a269 # git commit -s git send-email --to '' --in-reply-to '2025101005-married-company-a3fc@gregkh' --subject-prefix 'PATCH 6.1.y' HEAD^.. Possible dependencies: thanks, greg k-h ------------------ original commit in Linus's tree ------------------ >From e750f85391286a4c8100275516973324b621a269 Mon Sep 17 00:00:00 2001 From: Sean Christopherson Date: Tue, 15 Jul 2025 12:06:38 -0700 Subject: [PATCH] KVM: x86: Don't (re)check L1 intercepts when completing userspace I/O When completing emulation of instruction that generated a userspace exit for I/O, don't recheck L1 intercepts as KVM has already finished that phase of instruction execution, i.e. has already committed to allowing L2 to perform I/O. If L1 (or host userspace) modifies the I/O permission bitmaps during the exit to userspace, KVM will treat the access as being intercepted despite already having emulated the I/O access. Pivot on EMULTYPE_NO_DECODE to detect that KVM is completing emulation. Of the three users of EMULTYPE_NO_DECODE, only complete_emulated_io() (the intended "recipient") can reach the code in question. gp_interception()'s use is mutually exclusive with is_guest_mode(), and complete_emulated_insn_gp() unconditionally pairs EMULTYPE_NO_DECODE with EMULTYPE_SKIP. The bad behavior was detected by a syzkaller program that toggles port I/O interception during the userspace I/O exit, ultimately resulting in a WARN on vcpu->arch.pio.count being non-zero due to KVM no completing emulation of the I/O instruction. WARNING: CPU: 23 PID: 1083 at arch/x86/kvm/x86.c:8039 emulator_pio_in_out+0x154/0x170 [kvm] Modules linked in: kvm_intel kvm irqbypass CPU: 23 UID: 1000 PID: 1083 Comm: repro Not tainted 6.16.0-rc5-c1610d2d66b1-next-vm #74 NONE Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 0.0.0 02/06/2015 RIP: 0010:emulator_pio_in_out+0x154/0x170 [kvm] PKRU: 55555554 Call Trace: kvm_fast_pio+0xd6/0x1d0 [kvm] vmx_handle_exit+0x149/0x610 [kvm_intel] kvm_arch_vcpu_ioctl_run+0xda8/0x1ac0 [kvm] kvm_vcpu_ioctl+0x244/0x8c0 [kvm] __x64_sys_ioctl+0x8a/0xd0 do_syscall_64+0x5d/0xc60 entry_SYSCALL_64_after_hwframe+0x4b/0x53 Reported-by: syzbot+cc2032ba16cc2018ca25@syzkaller.appspotmail.com Closes: https://lore.kernel.org/all/68790db4.a00a0220.3af5df.0020.GAE@google.com Fixes: 8a76d7f25f8f ("KVM: x86: Add x86 callback for intercept check") Cc: stable@vger.kernel.org Cc: Jim Mattson Link: https://lore.kernel.org/r/20250715190638.1899116-1-seanjc@google.com Signed-off-by: Sean Christopherson diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c index 1349e278cd2a..542d3664afa3 100644 --- a/arch/x86/kvm/emulate.c +++ b/arch/x86/kvm/emulate.c @@ -5107,12 +5107,11 @@ void init_decode_cache(struct x86_emulate_ctxt *ctxt) ctxt->mem_read.end = 0; } -int x86_emulate_insn(struct x86_emulate_ctxt *ctxt) +int x86_emulate_insn(struct x86_emulate_ctxt *ctxt, bool check_intercepts) { const struct x86_emulate_ops *ops = ctxt->ops; int rc = X86EMUL_CONTINUE; int saved_dst_type = ctxt->dst.type; - bool is_guest_mode = ctxt->ops->is_guest_mode(ctxt); ctxt->mem_read.pos = 0; @@ -5160,7 +5159,7 @@ int x86_emulate_insn(struct x86_emulate_ctxt *ctxt) fetch_possible_mmx_operand(&ctxt->dst); } - if (unlikely(is_guest_mode) && ctxt->intercept) { + if (unlikely(check_intercepts) && ctxt->intercept) { rc = emulator_check_intercept(ctxt, ctxt->intercept, X86_ICPT_PRE_EXCEPT); if (rc != X86EMUL_CONTINUE) @@ -5189,7 +5188,7 @@ int x86_emulate_insn(struct x86_emulate_ctxt *ctxt) goto done; } - if (unlikely(is_guest_mode) && (ctxt->d & Intercept)) { + if (unlikely(check_intercepts) && (ctxt->d & Intercept)) { rc = emulator_check_intercept(ctxt, ctxt->intercept, X86_ICPT_POST_EXCEPT); if (rc != X86EMUL_CONTINUE) @@ -5243,7 +5242,7 @@ int x86_emulate_insn(struct x86_emulate_ctxt *ctxt) special_insn: - if (unlikely(is_guest_mode) && (ctxt->d & Intercept)) { + if (unlikely(check_intercepts) && (ctxt->d & Intercept)) { rc = emulator_check_intercept(ctxt, ctxt->intercept, X86_ICPT_POST_MEMACCESS); if (rc != X86EMUL_CONTINUE) diff --git a/arch/x86/kvm/kvm_emulate.h b/arch/x86/kvm/kvm_emulate.h index c1df5acfacaf..7b5ddb787a25 100644 --- a/arch/x86/kvm/kvm_emulate.h +++ b/arch/x86/kvm/kvm_emulate.h @@ -235,7 +235,6 @@ struct x86_emulate_ops { void (*set_nmi_mask)(struct x86_emulate_ctxt *ctxt, bool masked); bool (*is_smm)(struct x86_emulate_ctxt *ctxt); - bool (*is_guest_mode)(struct x86_emulate_ctxt *ctxt); int (*leave_smm)(struct x86_emulate_ctxt *ctxt); void (*triple_fault)(struct x86_emulate_ctxt *ctxt); int (*set_xcr)(struct x86_emulate_ctxt *ctxt, u32 index, u64 xcr); @@ -521,7 +520,7 @@ bool x86_page_table_writing_insn(struct x86_emulate_ctxt *ctxt); #define EMULATION_RESTART 1 #define EMULATION_INTERCEPTED 2 void init_decode_cache(struct x86_emulate_ctxt *ctxt); -int x86_emulate_insn(struct x86_emulate_ctxt *ctxt); +int x86_emulate_insn(struct x86_emulate_ctxt *ctxt, bool check_intercepts); int emulator_task_switch(struct x86_emulate_ctxt *ctxt, u16 tss_selector, int idt_index, int reason, bool has_error_code, u32 error_code); diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index a1c49bc681c4..79057622fa76 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -8470,11 +8470,6 @@ static bool emulator_is_smm(struct x86_emulate_ctxt *ctxt) return is_smm(emul_to_vcpu(ctxt)); } -static bool emulator_is_guest_mode(struct x86_emulate_ctxt *ctxt) -{ - return is_guest_mode(emul_to_vcpu(ctxt)); -} - #ifndef CONFIG_KVM_SMM static int emulator_leave_smm(struct x86_emulate_ctxt *ctxt) { @@ -8558,7 +8553,6 @@ static const struct x86_emulate_ops emulate_ops = { .guest_cpuid_is_intel_compatible = emulator_guest_cpuid_is_intel_compatible, .set_nmi_mask = emulator_set_nmi_mask, .is_smm = emulator_is_smm, - .is_guest_mode = emulator_is_guest_mode, .leave_smm = emulator_leave_smm, .triple_fault = emulator_triple_fault, .set_xcr = emulator_set_xcr, @@ -9143,7 +9137,14 @@ int x86_emulate_instruction(struct kvm_vcpu *vcpu, gpa_t cr2_or_gpa, ctxt->exception.address = 0; } - r = x86_emulate_insn(ctxt); + /* + * Check L1's instruction intercepts when emulating instructions for + * L2, unless KVM is re-emulating a previously decoded instruction, + * e.g. to complete userspace I/O, in which case KVM has already + * checked the intercepts. + */ + r = x86_emulate_insn(ctxt, is_guest_mode(vcpu) && + !(emulation_type & EMULTYPE_NO_DECODE)); if (r == EMULATION_INTERCEPTED) return 1; From - Mon Oct 13 15:55:47 2025 X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 Return-Path: <01020199de3aeee3-eb32875d-6e14-49c4-9fab-ed84971faf72-000000@mail.web.minor-hotels.com> Delivered-To: hi@josie.lol Received: from witcher.mxrouting.net by witcher.mxrouting.net with LMTP id 6NYtBG4d7WjdhjcAYBR5ng (envelope-from <01020199de3aeee3-eb32875d-6e14-49c4-9fab-ed84971faf72-000000@mail.web.minor-hotels.com>) for ; Mon, 13 Oct 2025 15:40:30 +0000 Return-path: <01020199de3aeee3-eb32875d-6e14-49c4-9fab-ed84971faf72-000000@mail.web.minor-hotels.com> Envelope-to: hi@josie.lol Delivery-date: Mon, 13 Oct 2025 15:40:30 +0000 Received: from a55-83.smtp-out.eu-west-1.amazonses.com ([54.240.55.83]) by witcher.mxrouting.net with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.98) (envelope-from <01020199de3aeee3-eb32875d-6e14-49c4-9fab-ed84971faf72-000000@mail.web.minor-hotels.com>) id 1v8Kez-0000000Gob8-1LyW for hi@josie.lol; Mon, 13 Oct 2025 15:40:30 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=tdec6gyzxt74klgqfnnldheyin76fnsc; d=web.minor-hotels.com; t=1760370028; h=Date:From:To:Reply-To:Subject:Content-Type:MIME-VERSION:Message-ID; bh=kVnSbNIKZNAiPOxikL+D/P62aokXmNAFb743wU/1L0E=; b=UHYTtZ+v8sZyIKGFuYd648QCdX/l2vTwr0vhghcdO4UM0f8wMc0fWGcSFA7wids0 vXBzxU3bvuBGtrFRYvKBO4eqfu8RLlXTwzTHES038VjgMSUg6WLtNRpHRb3hetnuq5d w21yPPbC2xK9PFuVLUrK5zINzyuwl8Kxy3YgdDFOHpcFDEDDrgrb2ysRmhpPjcSTzmt 7tN3vYbTghWwLe3BspxQClw6SqtowUKk7Gs+1RLwgmSZ6KwsEUW6sNWjwvn5J3s8ubi yBWB2mELuL//nbJEFEV2q0MV/2Bo/GAw9ldL6TqG3ZTqlVID8PCndwI1dOg5BUB9cpo Cg4+mrzbtw== DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=ihchhvubuqgjsxyuhssfvqohv7z3u4hn; d=amazonses.com; t=1760370028; h=Date:From:To:Reply-To:Subject:Content-Type:MIME-VERSION:Message-ID:Feedback-ID; bh=kVnSbNIKZNAiPOxikL+D/P62aokXmNAFb743wU/1L0E=; b=bTuvOfzi4VJWqndXJ8E8n+AHS24M9wBQSvF5luACQos2GW5LHXEGWRxxNbmemdh4 h9CGtQKBUXN9hH/691MSw/Uuezk4fCll8y2DTwMoT0cKFyICeCemV69HLxxr8ftlIPC 80q2NH5sHRSlnC52veNvNlFylL6IO7gLmdrCoblY= Date: Mon, 13 Oct 2025 15:40:28 +0000 From: Minor Hotels To: hi@josie.lol Reply-To: Minor Hotels Subject: =?UTF-8?B?T25jZS1pbi1hLWxpZmV0aW1lIGV4cGVyaWVuY2VzIHRvIGV4cGxvcmUgd2l0aCBNaW5vciBIb3RlbHM=?= Content-Type: multipart/alternative; boundary="yMKT1508" MIME-VERSION: 1.0 Message-ID: <01020199de3aeee3-eb32875d-6e14-49c4-9fab-ed84971faf72-000000@eu-west-1.amazonses.com> Feedback-ID: ::1.eu-west-1.i7fTDRRRo040McA2oZ+AXJU4ikHELwlvLz343/0ysxE=:AmazonSES X-SES-Outgoing: 2025.10.13-54.240.55.83 X-DKIM: signer='web.minor-hotels.com' status='pass' reason='' DKIMCheck: Server passes DKIM test, 0 Spam score X-DKIM: signer='amazonses.com' status='pass' reason='' X-Spam-Score: 3.2 (+++) X-Spam-Report: Spam detection software, running on the system "witcher.mxrouting.net", has performed the tests listed below against this email. Information: https://mxroutedocs.com/directadmin/spamfilters/ --- Content analysis details: (3.2 points) --- pts rule name description ---- ---------------------- ----------------------------------------- 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [URIs: minorhotels.com] 0.0 RCVD_IN_DNSWL_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to DNSWL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#DnsBlocklists-dnsbl-block for more information. [54.240.55.83 listed in list.dnswl.org] 0.0 RCVD_IN_MSPIKE_H3 RBL: Good reputation (+3) [54.240.55.83 listed in wl.mailspike.net] 0.7 MPART_ALT_DIFF BODY: HTML and text parts are different 0.1 MIME_HTML_MOSTLY BODY: Multipart message mostly text/html MIME 1.5 HTML_MESSAGE BODY: HTML included in message 1.0 HTML_FONT_LOW_CONTRAST BODY: HTML font color similar or identical to background -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.0 RCVD_IN_MSPIKE_WL Mailspike good senders 0.0 T_KAM_HTML_FONT_INVALID Test for Invalidly Named or Formatted Colors in HTML SpamTally: Final spam score: 32 --yMKT1508 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 --yMKT1508 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: base64 PCFET0NUWVBFIEhUTUw+CjxodG1sPgoKPGhlYWQ+Cgk8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50 LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+Cgk8bWV0YSBuYW1lPSJ2 aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCwg bWF4aW11bS1zY2FsZT0xLjAsIG1pbmltdW0tc2NhbGU9MS4wLCB1c2VyLXNjYWxhYmxlPW5vIj4K CTxtZXRhIG5hbWU9ImZvcm1hdC1kZXRlY3Rpb24iIGNvbnRlbnQ9InRlbGVwaG9uZT1ubyI+CgoJ PHRpdGxlPk1pbm9yIEhvdGVsczwvdGl0bGU+Cgk8IS0tU3R5bGVzLS0+CQoJPHN0eWxlIHR5cGU9 InRleHQvY3NzIj4KCi8qUkVTRVRFTyovCi8qR2VuZXJhbCovCiogewoJYm94LXNpemluZzogYm9y ZGVyLWJveDsKCWxldHRlci1zcGFjaW5nOiBub3JtYWw7CgkvKmxpbmUtaGVpZ2h0OiAxMDAlOyov Cgltc28tbGluZS1oZWlnaHQtcnVsZTogZXhhY3RseSFpbXBvcnRhbnQ7Cn0KYm9keSB7Cglmb250 LWZhbWlseTogQXJpYWwsIHNhbnMtc2VyaWY7IAoJZm9udC1zaXplOiAxMHB4OwkKCW1hcmdpbjog MCAhaW1wb3J0YW50OyAKCXBhZGRpbmc6IDAgIWltcG9ydGFudDsgCgl3aWR0aDogMTAwJSAhaW1w b3J0YW50OwoJLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQgIWltcG9ydGFudDsK CS1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlICFpbXBvcnRhbnQ7Cn0KdGFibGUuY29udGFpbmVy IHsKCWJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7Cglmb250LWZhbWlseTogQXJpYWwsIHNhbnMt c2VyaWY7Cglmb250LXNpemU6MTBweDsKfQoKZGl2IHsKbWFyZ2luOiAwICFpbXBvcnRhbnQ7IApw YWRkaW5nOiAwICFpbXBvcnRhbnQ7IAoKfQoKLypPdXRsb29rKi8KdGFibGUgewoJYm9yZGVyLWNv bGxhcHNlOiBjb2xsYXBzZTsKCW1zby10YWJsZS1sc3BhY2U6IC0xcHg7Cgltc28tdGFibGUtcnNw YWNlOiAtMXB4Owp9CnRhYmxlIHRkIHsKCWJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Cgltc28t bGluZS1oZWlnaHQtcnVsZTogZXhhY3RseSAhaW1wb3J0YW50Owp9CnAsIGZvbnQsIHNwYW4gewoJ bWFyZ2luOiAwOwoJcGFkZGluZzogMDsKfQoKLypZYWhvbyBjZW50cmFyKi8KI3lpdjAxNTgxNzI2 NTYgdGFibGUgeyBtYXJnaW46MCBhdXRvO30KI3lpdjMwMjEzMDk3NzYgdGFibGUgeyBtYXJnaW46 MCBhdXRvO30KLnRocmVhZC1pdGVtLmV4cGFuZGVkIC50aHJlYWQtYm9keSAuYm9keSwgLm1zZy1i b2R5IHsgbWFyZ2luOiAwIGF1dG87fQoKLypHbWFpbCBsaW5lLWhlaWdodCovCi5hM3MsIC5nNiB7 CiAgICBmb250OiBzbWFsbC8xLjIgQXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7Cn0KLypFbmxh Y2VzIG5vIG1vcmFkb3MqLwphIHtjb2xvcjogI2ZmZmZmZjt9CgphW2hyZWZePSJ0ZWwiXSwKYVto cmVmXj0ic21zIl0gewogICAgICAgIGNvbG9yOiAjZmZmZmZmIWltcG9ydGFudDsKICAgICAgICBj b2xvcjogI2ZmZmZmZiFpbXBvcnRhbnQ7Cn0KCi8qRW5sYWNlcyBubyBtb3JhZG9zKi8KCgouZGF0 YXByb3RlY3Rpb24gewoJY29sb3I6ICNmZmZmZmYhaW1wb3J0YW50Owp9CgovKkNvbGxlY3Rpb24q LwouQ08gYVtocmVmXj0idGVsIl0sCi5DTyBhW2hyZWZePSJzbXMiXSB7Cgljb2xvcjogIzlkMjIz NSAhaW1wb3J0YW50Owp9Ci5DTyBhLmJ0bjpob3ZlcnsKCWJhY2tncm91bmQtY29sb3I6ICM3ZTE1 MzMgIWltcG9ydGFudDsKfQoKCi8qQ09OVEVOSURPIE9DVUxUTyBFTiBERVNLVE9QIC0gdmlzaWJs ZSBtb2JpbGUqLwoqW2NsYXNzPSJkZXNrdG9wSGlkZSJdLAouZGVza3RvcEhpZGUgewogICAgbWF4 LWhlaWdodDowOyAvKiBHbWFpbCovCiAgICBkaXNwbGF5Om5vbmU7IC8qIEdlbmVyaWMqLwogICAg bXNvLWhpZGU6YWxsOyAvKiBPdXRsb29rIGNsaWVudHMqLwogICAgb3ZlcmZsb3c6aGlkZGVuOyAv KiBHZW5lcmljICovCgl2aXNpYmlsaXR5OiBjb2xsYXBzZTsKICAgIC8qZm9udC1zaXplOjA7ICBC ZSBjYXJlZnVsIHdpdGggdGhpcyBvbmUsIG9ubHkgdXNlIGlmIGFic29sdXRlbHkgcmVxdWlyZWQg Ki8KfSAKCi8qKipUSVZPTEkqKiovCi5UaXZvbGkgLmNlbnR1cnlUZXh0IHNwYW4gewoJZm9udC1m YW1pbHk6IENlbnR1cnkgR290aGljLCBDZW50dXJ5R290aGljLCBBcHBsZUdvdGhpYywgQXJpYWws IHNhbnMtc2VyaWY7Cglmb250LXdlaWdodDogNTAwOwoJZm9udC1zdHlsZTogbm9ybWFsOwp9Ci5U aXZvbGkgLnNpZ25hdHVyZSB7CgkJY29sb3I6ICMxMTI2M2EgIWltcG9ydGFudDsKCX0KCQouVGl2 b2xpIC51bnN1YnNjcmliZSwKLlRpdm9saSAudW5zdWJzY3JpYmUgYXsKCWNvbG9yOiAjMTEyNjNh ICFpbXBvcnRhbnQ7Cn0KLlRpdm9saU9yYW5nZSB7Cgljb2xvcjogI0NDNzQyQzsKfQouVGl2b2xp Qmx1ZSB7Cgljb2xvcjogIzAwMjYzZTsKfQoKCi8qKkRldmljZSBMKiovCkBtZWRpYSBvbmx5IHNj cmVlbiBhbmQgKG1heC13aWR0aDogNjQ5cHgpIHsKCSogeyAtd2Via2l0LXRleHQtc2l6ZS1hZGp1 c3Q6IG5vbmUgIWltcG9ydGFudDsgfQoJCgkuZGV2aWNlV2lkdGgge3dpZHRoOjEwMCUhaW1wb3J0 YW50OyBwYWRkaW5nOjAhaW1wb3J0YW50O30KCS5kZXZpY2VXaWR0aDk1IHt3aWR0aDo5NSUgIWlt cG9ydGFudDt9CgkuZGV2aWNlV2lkdGhUZXh0IHt3aWR0aDo5MCUgIWltcG9ydGFudDt9CiAgICAg ICAgLmRldmljZVdpZHRoODAge3dpZHRoOjgwJSAhaW1wb3J0YW50O30KCS5kZXZpY2VDZW50ZXIg e3RleHQtYWxpZ246Y2VudGVyICFpbXBvcnRhbnQ7fQoJLmRldmljZVdpZHRoNzB7d2lkdGg6NzAl IWltcG9ydGFudDt9CgkuZGV2aWNlV2lkdGg1NXt3aWR0aDo1NSUhaW1wb3J0YW50O30KCS5kZXZp Y2VXaWR0aDUwe3dpZHRoOjUwJSFpbXBvcnRhbnQ7fQoJLmRldmljZVdpZHRoMzB7d2lkdGg6MzAl IWltcG9ydGFudDt9CgkubG9nb01vYmlsZXt3aWR0aDoyMDBweCFpbXBvcnRhbnQ7fQoJCiAgICAg ICAgIC5kZXZpY2VDZW50ZXJCbG9jayB7ZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsgd2lkdGg6 IDcwJSAhaW1wb3J0YW50OyB0ZXh0LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDsgfQogICAgICAg ICAudHJpYW5nbGUtbW9iaWxlIHt3aWR0aDo0cHggIWltcG9ydGFudDt9CgogICAgICAgICAuZGV2 aWNlQmxvY2syNSB7ZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsgIH0KCgkvKkRpc3BsYXkgTm9u ZSovCgkuZGV2aWNlSGlkZXsKCQlkaXNwbGF5Om5vbmUgIWltcG9ydGFudDsKCX0KCQoJaW1nLmRl dmljZVdpZHRoIHsKCSAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50OwoJICAgIGRpc3BsYXk6IGJs b2NrOwoJICAgIG1hcmdpbjogMCBhdXRvOwoJfQoKCS8qV0VCIFZFUlNJT04qLwoJLndlYnZlcnNp b24gdGR7CgkJd2lkdGg6MTAwJSAhaW1wb3J0YW50OwkKCX0KCS53ZWJ2ZXJzaW9uIHRkLmRlc2Ny aXB0aW9uewoJCWRpc3BsYXk6bm9uZTsJCgl9CgkKCS8qSEVBREVSCgkuaGVhZGVyQ08gdGR7CgkJ cGFkZGluZzogMjRweCAhaW1wb3J0YW50OwoJfQoJLmhlYWRlckNPIHRkIGltZyB7CgkJbWF4LXdp ZHRoOjEzN3B4OwoJfSovCgkKCQoJCgkuVGl2b2xpIC5oZWFkbGluZSBzcGFuIHsKCQlmb250LXNp emU6IDIwcHggIWltcG9ydGFudDsKCQlsZXR0ZXItc3BhY2luZzogMTBweCAhaW1wb3J0YW50OwoJ CW1hcmdpbi1yaWdodDogLTEzcHggIWltcG9ydGFudDsJCQoJfQoJLlRpdm9saSAuaGVhZGxpbmUg dGQuaGlnaGxpZ2h0CXsKCQlsaW5lLWhlaWdodDogNDRweCAhaW1wb3J0YW50OwoJfQoJLlRpdm9s aSAuaGVhZGxpbmUgdGQuaGlnaGxpZ2h0IHNwYW4gewoJCWZvbnQtc2l6ZTogNDBweCAhaW1wb3J0 YW50OwoJCWxldHRlci1zcGFjaW5nOiAyMHB4ICFpbXBvcnRhbnQ7CgkJbWFyZ2luLXJpZ2h0OiAt MjNweCAhaW1wb3J0YW50OwoJfQoJLlRpdm9saSB0YWJsZS5idG4gewoJCW1heC13aWR0aDogODAl OwoJfQoJLlRpdm9saSB0YWJsZS5idG4gYSB7CgkJZm9udC1zaXplOiAyZW0gIWltcG9ydGFudDsK CQlsZXR0ZXItc3BhY2luZzogMTBweCAhaW1wb3J0YW50OyAKCQlwYWRkaW5nOiA4cHggMTVweCAh aW1wb3J0YW50OwoJfQoJCgkvKiBSUlNTICovCgl0YWJsZS5kZXZpY2VTTSB7CgkJd2lkdGg6IDc1 JSFpbXBvcnRhbnQ7Cgl9Cgl0YWJsZS5kZXZpY2VTTSAuYXBwcyB0YWJsZTpmaXJzdC1jaGlsZHsK CQltaW4td2lkdGg6IDI0MHB4ICFpbXBvcnRhbnQ7CgkJd2lkdGg6IDc1JSFpbXBvcnRhbnQ7Cgl9 CgkvKiBSUlNTIGRlc2RlIDQ1NAoJdGFibGUuZGV2aWNlU00gewoJCXdpZHRoOiA4MCUgIWltcG9y dGFudDsKCX0KCXRhYmxlLmRldmljZVNNIC5hcHBzIHRhYmxlOmZpcnN0LWNoaWxkewoJCXdpZHRo OiA4NSUgIWltcG9ydGFudDsKCX0qLwoJCgkKCQoJLypGT09URVIqLwoJaW1nLnNlcGFyYWRvcl9s b2dvcyB7CgkgICAgZGlzcGxheTogbm9uZTsKCX0KfQkKCgovKipEZXZpY2UgTSoqLyAvKmZvcm1l ciA0MTQqLwpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ4MHB4KSB7CgkKCS5k ZXZpY2VXaWR0aC1jb2wtMiwKCS5kZXZpY2VXaWR0aDUwIHt3aWR0aDo1MCUhaW1wb3J0YW50OyBw YWRkaW5nOjA7fQoJCgkuZGV2aWNlQmxvY2t7CgkJZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsK CX0KCQoJLypIRUFERVIqLwkKCS5oZWFkZXJDTyB0ZCB7CgkJcGFkZGluZzogMCAxNnB4ICFpbXBv cnRhbnQ7Cgl9CgkuaGVhZGVyQ08gdGQ6bGFzdC1jaGlsZCB7CgkJcGFkZGluZzogMTBweCAxNnB4 ICFpbXBvcnRhbnQ7Cgl9CgkvKi5oZWFkZXJDTyB0ZCB7CgkJcGFkZGluZzogNXB4IDE2cHggIWlt cG9ydGFudDsKCX0KCS5oZWFkZXJDTyB0ZCBpbWcgewoJCW1heC13aWR0aDoxMzdweDsKCX0qLwoJ CgkKCS8qQk9UT05FUyBSRVNQT05TSVZFKi8KCQoJdGFibGUuYnRuIGEgewoJCWZvbnQtc2l6ZTog MjBweCAhaW1wb3J0YW50OwoJCXBhZGRpbmc6IDhweCAxNXB4ICFpbXBvcnRhbnQ7Cgl9CgoJdGFi bGUuYnRuLWNvbHVtbnMgYSB7CgkJZm9udC1zaXplOiAxMHB4ICFpbXBvcnRhbnQ7CgkJcGFkZGlu ZzogMnB4IDVweCAhaW1wb3J0YW50OwoJfQoJLkIyQiB0YWJsZS5idG4gewoJCXdpZHRoOiA3MCUg IWltcG9ydGFudDsKCX0KCS5CMkIgdGFibGUuYnRuIGEgewoJCWZvbnQtc2l6ZTogMTdweCAhaW1w b3J0YW50OwoJCXBhZGRpbmc6IDEycHggMTVweCAhaW1wb3J0YW50OwoJfQoJLkIyQiB0YWJsZS5i dG5Mb25nIHsKCQl3aWR0aDogOTAlICFpbXBvcnRhbnQ7Cgl9CgkuZGVzdGluYXRpb24gdGFibGUu YnRuIHsKCQl3aWR0aDogYXV0byFpbXBvcnRhbnQ7Cgl9CgkuZGVzdGluYXRpb24gdGFibGUuYnRu IGEgewoJCWZvbnQtc2l6ZTogMTZweCAhaW1wb3J0YW50OwoJCXBhZGRpbmc6IDEwcHggMTRweCA5 cHggMTBweCAhaW1wb3J0YW50OwoJfQoJdGFibGUuQ09idG4gYSB7CgkJcGFkZGluZzogNXB4IDM2 cHggIWltcG9ydGFudDsKCX0KCS5UaXZvbGkgdGFibGUuYnRuIHsKCQltYXgtd2lkdGg6IDgwJSAh aW1wb3J0YW50OwoJfQoJCgoJLypUZXh0Ki8KCS5kZXN0aW5hdGlvbiAubmFtZSB7CgkJZm9udC1z aXplOiA0MHB4OwoJfQoJLmhvdGVsIC5uYW1lIHsKCQkKCX0KCQoJLmRldmljZU1fdGV4dDM1IHsK CQkJZm9udC1zaXplOiAzNXB4ICFpbXBvcnRhbnQ7Cgl9CgkuZGV2aWNlTV90ZXh0MjUgewoJCWZv bnQtc2l6ZTogMjRweCAhaW1wb3J0YW50OwoJfQoJLmRldmljZU1fdGV4dDIwIHsKCQlmb250LXNp emU6IDIwcHggIWltcG9ydGFudDsKCX0KCS5kZXZpY2VNX3RleHQxOCB7CgkJZm9udC1zaXplOiAx OHB4ICFpbXBvcnRhbnQ7Cgl9CgkuZGV2aWNlTV90ZXh0MTUgewoJCWZvbnQtc2l6ZTogMTVweCAh aW1wb3J0YW50OwoJfQoJLmRldmljZU1fdGV4dDEyIHsKCQlmb250LXNpemU6IDEycHggIWltcG9y dGFudDsKICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxMnB4ICFpbXBvcnRhbnQ7IAoJfQog ICAgICAgIC5kZXZpY2VNX3RleHQxMCB7CgkJZm9udC1zaXplOiAxMHB4ICFpbXBvcnRhbnQ7Cgl9 CgkKCS5DTyAuaGVhZGxpbmUgewoJCWZvbnQtc2l6ZTogMjhweCAhaW1wb3J0YW50OwoJCWxpbmUt aGVpZ2h0OiAzMnB4ICFpbXBvcnRhbnQ7Cgl9CgogICAgICAgIC5kZXZpY2VNX2xpbmUxNCB7CgkJ bGluZS1oZWlnaHQ6IDE0cHggIWltcG9ydGFudDsKCX0KCS8qRk9PVEVSKi8KCS5DTyBpbWcuZmVl bCB7CgkJd2lkdGg6IDEzMHB4ICFpbXBvcnRhbnQ7Cgl9CgkKCWltZy5zZXBhcmFkb3JfbG9nb3N7 CgkJZGlzcGxheTogbm9uZTsJCgl9CgkudGV4dG9sZWdhbHsKCQlmb250LXNpemU6IDEwcHghaW1w b3J0YW50OwkKCX0KfQogCiAvKipEZXZpY2UgWE0qKi8KIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQg KG1heC13aWR0aDogNDE0cHgpIHsgCgkuZGV2aWNlV2lkdGhNLCAKCS5kZXZpY2VNV2lkdGgJe3dp ZHRoOjEwMCUhaW1wb3J0YW50OyBwYWRkaW5nOjAhaW1wb3J0YW50O30KCS5kZXZpY2VXaWR0aE1U ZXh0LAoJLmRldmljZU1XaWR0aFRleHR7d2lkdGg6OTAlICFpbXBvcnRhbnQ7fQogCgkvKi5oZWFk ZXJDTyB0ZDpmaXJzdC1jaGlsZCBpbWcgewoJCXdpZHRoOiAxMzdweCAhaW1wb3J0YW50OwoJfQoJ LmhlYWRlckNPIHRkOmxhc3QtY2hpbGQgaW1nIHsKCQl3aWR0aDogNzhweCAhaW1wb3J0YW50OwoJ fSovCiAKCS5kZXZpY2VYTV90ZXh0NTAgewoJCWZvbnQtc2l6ZTogNTBweCAhaW1wb3J0YW50OwoJ CWxpbmUtaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7Cgl9CgkuZGV2aWNlWE1fdGV4dDQwIHsKCQlm b250LXNpemU6IDQwcHggIWltcG9ydGFudDsKCQlsaW5lLWhlaWdodDogYXV0byAhaW1wb3J0YW50 OwoJfQoJLmRldmljZVhNX3RleHQzNSB7CgkJZm9udC1zaXplOiAzNXB4ICFpbXBvcnRhbnQ7CgkJ bGluZS1oZWlnaHQ6IGF1dG8gIWltcG9ydGFudDsKCX0KCS5kZXZpY2VYTV90ZXh0MzAgewoJCWZv bnQtc2l6ZTogMzBweCAhaW1wb3J0YW50OwoJCWxpbmUtaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7 Cgl9CgkuZGV2aWNlWE1fdGV4dDI1IHsKCQlmb250LXNpemU6IDI1cHggIWltcG9ydGFudDsKCQls aW5lLWhlaWdodDogYXV0byAhaW1wb3J0YW50OwoJfQoJLmRldmljZVhNX3RleHQyMCB7CgkJZm9u dC1zaXplOiAyMHB4ICFpbXBvcnRhbnQ7CgkJbGluZS1oZWlnaHQ6IGF1dG8gIWltcG9ydGFudDsK CX0KCS5kZXZpY2VYTV90ZXh0MTYgewoJCWZvbnQtc2l6ZTogMTZweCAhaW1wb3J0YW50OwoJCWxp bmUtaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7Cgl9CgkuZGV2aWNlWE1fdGV4dDEzIHsKCQlmb250 LXNpemU6IDEzcHggIWltcG9ydGFudDsKCQlsaW5lLWhlaWdodDogYXV0byAhaW1wb3J0YW50OwoJ fQoJCgkKCS5UaXZvbGkgLmhlYWRsaW5lIHNwYW4gewoJCWZvbnQtc2l6ZTogMThweCAhaW1wb3J0 YW50OwoJCWxldHRlci1zcGFjaW5nOiA2cHggIWltcG9ydGFudDsKCQltYXJnaW4tcmlnaHQ6IC04 cHggIWltcG9ydGFudDsJCQoJfQoJLlRpdm9saSAuaGVhZGxpbmUgdGQuaGlnaGxpZ2h0CXsKCQls aW5lLWhlaWdodDogMzRweCAhaW1wb3J0YW50OwoJfQoJLlRpdm9saSAuaGVhZGxpbmUgdGQuaGln aGxpZ2h0IHNwYW4gewoJCWZvbnQtc2l6ZTogMzdweCAhaW1wb3J0YW50OwoJCWxldHRlci1zcGFj aW5nOiAxMXB4ICFpbXBvcnRhbnQ7CgkJbWFyZ2luLXJpZ2h0OiAtMTRweCAhaW1wb3J0YW50OwoJ fQoJLlRpdm9saSB0YWJsZS5idG4gYSB7CgkJZm9udC1zaXplOiAxLjZlbSAhaW1wb3J0YW50OwoJ CWxldHRlci1zcGFjaW5nOiAxMHB4ICFpbXBvcnRhbnQ7CgkJcGFkZGluZzogOHB4IDEzcHggIWlt cG9ydGFudDsKCX0KIAogfQogCi8qKkRldmljZSBTKiovCkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQg KG1heC13aWR0aDogMzYwcHgpIHsKCS5kZXZpY2VXaWR0aFMge3dpZHRoOjEwMCUhaW1wb3J0YW50 OyBwYWRkaW5nOjAhaW1wb3J0YW50O30KCS5kZXZpY2VXaWR0aFRleHRTLCAuZGV2aWNlV2lkdGhT VGV4dCB7d2lkdGg6OTAlICFpbXBvcnRhbnQ7fQoJCgkvKkRpc3BsYXkgTm9uZSovCgkuZGV2aWNl U0hpZGV7CgkJZGlzcGxheTpub25lICFpbXBvcnRhbnQ7Cgl9CgkKCS5kZXZpY2VTX3RleHQyMCB7 CgkJZm9udC1zaXplOiAyMHB4ICFpbXBvcnRhbnQ7Cgl9CgkuZGV2aWNlU190ZXh0MTUgewoJCWZv bnQtc2l6ZTogMTVweCAhaW1wb3J0YW50OwoJfQoJLmRldmljZVNfdGV4dDEyIHsKCQlmb250LXNp emU6IDEycHggIWltcG9ydGFudDsKCX0KCQoJdGFibGUuYnRuU21hbGwgYSB7CgkJZm9udC1zaXpl OiAxNXB4ICFpbXBvcnRhbnQ7CgkJcGFkZGluZzogMCA4cHggMnB4IDhweCAhaW1wb3J0YW50OwoJ fQoJCQoJLypIRUFERVIqLwoJdGQubG9nb19uaHIsCgl0ZC5oZWFkZXJfcmlnaHR7CgkJd2lkdGg6 IDUwJSAhaW1wb3J0YW50OwoJCXBhZGRpbmc6IDAgIWltcG9ydGFudDsKCX0KCXRkLmxvZ29fbmhy IGltZ3sKCQl3aWR0aDogOTklICFpbXBvcnRhbnQ7CQoJfQoJLmhlYWRlcl9yaWdodCBpbWd7CgkJ d2lkdGg6IDcwJSAhaW1wb3J0YW50OwoJfQoJCgkvKkJPVE9ORVMqLwoJLyp0YWJsZS5idG4gewoJ CXdpZHRoOiA5MCUhaW1wb3J0YW50OwoJfSovCgl0YWJsZS5sb25nQnRuIHsKCQl3aWR0aDogOTAl IWltcG9ydGFudDsKCX0KCS8qLmRlc3RpbmF0aW9uIHRhYmxlLmJ0biB7CgkJd2lkdGg6IDkwJSFp bXBvcnRhbnQ7Cgl9Ki8KCQoJLyogUlJTUyAqLwoJdGFibGUuZGV2aWNlU00gewoJCXdpZHRoOiA5 MCUgIWltcG9ydGFudDsKCX0KCXRhYmxlLmRldmljZVNNIC5hcHBzIHRhYmxlOmZpcnN0LWNoaWxk ewoJCXdpZHRoOiA5OSUgIWltcG9ydGFudDsKCX0KCQoJLypGT09URVIqLwkKCWltZy5tYXJnaW5f bWludXN7CgkJbWFyZ2luLXRvcDogMCFpbXBvcnRhbnQ7CgkJbWFyZ2luLWJvdHRvbTogLTEwcHgh aW1wb3J0YW50OwoJfQkKCn0KCi8qKkRldmljZSBYUyoqLwpAbWVkaWEgb25seSBzY3JlZW4gYW5k IChtYXgtd2lkdGg6IDMyMHB4KSB7CgkuZGV2aWNlV2lkdGhYU3t3aWR0aDoxMDAlIWltcG9ydGFu dDsgcGFkZGluZzowO30KCS5kZXZpY2VXaWR0aFRleHRYU3t3aWR0aDo5MCUhaW1wb3J0YW50OyBw YWRkaW5nOjA7fQoJCgkvKkRpc3BsYXkgTm9uZSovCgkuZGV2aWNlSGlkZVhTewoJCWRpc3BsYXk6 IG5vbmUhaW1wb3J0YW50OwoJfQoJCgkvKkJPVE9ORVMgUkVTUE9OU0lWRSovCgl0YWJsZS5idG4g YSB7CgkJZm9udC1zaXplOiAxNnB4ICFpbXBvcnRhbnQ7CgkJcGFkZGluZzogMHB4OwoJfQp9Cgo8 L3N0eWxlPgoKCjxzdHlsZT4KCS5zaWduYXR1cmUgewoJCWNvbG9yOiAjMDAzYTcwICFpbXBvcnRh bnQ7IC8qSEVYIHBhcmEgTkhDb2xlY3Rpb246ICM5ZDIyMzUqLwoJfQoJCgkudW5zdWJzY3JpYmUs CgkudW5zdWJzY3JpYmUgYXsKCQljb2xvcjogIzAwM2E3MCAhaW1wb3J0YW50OyAvKkhFWCBwYXJh IE5IQ29sZWN0aW9uOiAjOWQyMjM1Ki8gLypIRVggZ3JpczogIzU0NzY3NyovCgl9Cjwvc3R5bGU+ CjwvaGVhZD48Ym9keT4KCjwhLS1DT05URU5ULS0+CjxkaXYgY2xhc3M9ImVtYWlsLWNvbnRlbnQt d3JhcHBlciBCMkMiPgogICAgPGRpdiBjbGFzcz0iZW1haWwtY29udGVudCI+CgkKCQk8IS0tW2lm IChndGUgbXNvIDkpfChJRSldPgoJCTx0YWJsZSB3aWR0aD0iNjUwIiBhbGlnbj0iY2VudGVyIiBj ZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGJvcmRlcj0iMCI+CgkJCTx0cj4KCQkJCTx0 ZD4KCQkJPCFbZW5kaWZdLS0+CiAgICAgICAgCgkJCTx0YWJsZSBjbGFzcz0iY29udGFpbmVyIiBz dHlsZT0iZm9udC1mYW1pbHk6IGFyaWFsLCBzYW5zLXNlcmlmOyBtYXgtd2lkdGg6NjUwcHg7IiB3 aWR0aD0iMTAwJSIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBib3JkZXI9IjAiIGJn Y29sb3I9IiNmZmZmZmYiIGFsaWduPSJjZW50ZXIiPgoJCQkJPHRib2R5Pjx0cj4KCQkJCQk8dGQg d2lkdGg9IjEwMCUiIHZhbGlnbj0idG9wIj48cCBzdHlsZT0iZGlzcGxheTpub25lIj48aW1nIHNy Yz0iaHR0cHM6Ly9kaWdpdGFsLm5oLWhvdGVscy5jb206NDQzL3NhcC9wdWJsaWMvY3Vhbi9saW5r LzEwMC9DQ0ZGQ0IyMTMwQ0YyMDZENTc0MzE1Q0Y0MzJGQTQxM0U2MDk2NEQxL3BpeGVsLmdpZiIg V0lEVEg9IjEiIEhFSUdIVD0iMSIgQk9SREVSPSIwIiBBTFQ9IiIgLz48IS0tW2lmIG1zb10+PHRh YmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBhbGlnbj0ibGVm dCIgc3R5bGU9Im1zby10YWJsZS1sc3BhY2U6MHB0OyAgbXNvLXRhYmxlLXJzcGFjZTowcHQ7IGJv cmRlci1jb2xsYXBzZTogY29sbGFwc2U7IHdpZHRoOiAxMDAlIj48dHI+PHRkIHN0eWxlPSJ3aWR0 aDogMTAwJTsiPjwhW2VuZGlmXS0tPjxkaXYgc3R5bGU9ImZsb2F0OiBsZWZ0OyB3aWR0aDogMTAw JSIgY2xhc3M9InNhcE1rdEJsb2NrIj48IS0tUFJFVklFVy0tPgo8dGFibGUgY2xhc3M9ImRldmlj ZVdpZHRoIiB3aWR0aD0iNjUwIiBhbGlnbj0iY2VudGVyIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5n PSIwIiBjZWxscGFkZGluZz0iMCIgYmdjb2xvcj0iI2ZkZjZmMCI+Cjx0Ym9keT4KPHRyPgo8dGQg aGVpZ2h0PSIxMCIgc3R5bGU9ImZvbnQtc2l6ZTogMXB4OyBsaW5lLWhlaWdodDogMXB4OyI+Jm5i c3A7PC90ZD4KPC90cj4KPHRyPgo8dGQ+Cjx0YWJsZSBjbGFzcz0iZGV2aWNlV2lkdGhUZXh0IiB3 aWR0aD0iNjUwIiBhbGlnbj0iY2VudGVyIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxs c3BhY2luZz0iMCI+Cjx0Ym9keSBhbGlnbj0iY2VudGVyIj4KPHRyPgo8dGQ+Cjx0YWJsZSBjbGFz cz0iZGV2aWNlV2lkdGhUZXh0IiB3aWR0aD0iNTg1IiBhbGlnbj0iY2VudGVyIiBzdHlsZT0iYm9y ZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgZm9udC1mYW1pbHk6IENhbGlicmksIHNhbnMtc2VyaWY7 IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxs c3BhY2luZz0iMCI+Cjx0Ym9keSBhbGlnbj0iY2VudGVyIj4KPHRyPgo8dGQgYWxpZ249ImxlZnQi IHdpZHRoPSI3OSUiIHN0eWxlPSJib3gtc2l6aW5nOiBib3JkZXItYm94OyI+PHNwYW4gc3R5bGU9 ImZvbnQtZmFtaWx5OiBBcmlhbDsgbGluZS1oZWlnaHQ6IDIwcHg7IGZvbnQtc2l6ZTogMTBweDsg Y29sb3I6ICMxMzIxM2M7Ij5UUk9QSUNBTCBST0FEIFRSSVBTLCBMT1NUIENJVFkgVFJFS1MsIFZJ TlRBR0UgVFJBSU4gRElOSU5HIEFORCBNT1JFPC9zcGFuPjwvdGQ+Cjx0ZCBhbGlnbj0iY2VudGVy IiB3aWR0aD0iMTAiIHN0eWxlPSJib3gtc2l6aW5nOiBib3JkZXItYm94OyI+PC90ZD4KPHRkIGFs aWduPSJyaWdodCIgd2lkdGg9IjIwMCIgc3R5bGU9ImJveC1zaXppbmc6IGJvcmRlci1ib3g7Ij48 IS0tUElYRUwgQ2FtcGHDsWEtLT48aW1nIHNyYz0iaHR0cHM6Ly9hZC5kb3VibGVjbGljay5uZXQv ZGRtL2FkL04zNzIwNS4xOTE5MDYzTkgtSE9URUxFUy5FUzE5NzkvQjk2NzUwMzQuMjYzOTI5Mjg3 O3N6PTF4MTtvcmQ9JTVCdGltZXN0YW1wJTVEO2RjX2xhdD07ZGNfcmRpZD07dGFnX2Zvcl9jaGls ZF9kaXJlY3RlZF90cmVhdG1lbnQ9O3RmdWE9PyIgYm9yZGVyPSIwIiBhbHQ9IkFkdmVydGlzZW1l bnQiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+IDwhLS1QSVhFTCBSZXRhcmdldGluZyAtLSBOTyBF RElUQVItLT48aW1nIHNyYz0iIyIgYm9yZGVyPSIwIiBhbHQ9IiIgd2lkdGg9IjEiIGhlaWdodD0i MSIgLz4gPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBBcmlhbDsgdGV4dC10cmFuc2Zvcm06IHVw cGVyY2FzZTsgY29sb3I6ICMxMzIxM2M7IGxpbmUtaGVpZ2h0OiAyMHB4OyBmb250LXNpemU6IDEw cHg7Ij48YSBocmVmPSJodHRwczovL2RpZ2l0YWwubmgtaG90ZWxzLmNvbTo0NDMvc2FwL3B1Ymxp Yy9jdWFuL2xpbmsvMTAwL0NDRkZDQjIxMzBDRjIwNkQ1NzQzMTVDRjQzMkZBNDEzRTYwOTY0RDE/ X1ZfPTImX0sxMV89RjI4NEJFRjEwRTREQTQ0RUQ5N0EyRUFDQ0M5OUI4RUM2RDIwMkFDMCZfTDU0 QUQxRjIwNF89YzJObGJtRnlhVzg5VFV4RFVFY21kR0Z5WjJWMFBXaDBkSEJ6T2k4dlptcGlhRzFo ZERsa2JDNWxlR1ZqZFhSbExXRndhUzVsZFMxM1pYTjBMVEV1WVcxaGVtOXVZWGR6TG1OdmJTOVRT RkEvYzJGd0xXOTFkR0p2ZFc1a0xXbGtQVU5EUmtaRFFqSXhNekJEUmpJd05rUTFOelF6TVRWRFJq UXpNa1pCTkRFelJUWXdPVFkwUkRFJl9LMTNfPTM2NSZfSzE0Xz0wYTNlNWJkMWQyNmVhYTI4MDA4 ZThkNTdkYWUwZjQyMWJhM2ViY2UwZjhhMTFiNTVhZTA4NTRiYTE3ZjQ4NDI5IiBzdHlsZT0iZm9u dC1mYW1pbHk6IEFyaWFsOyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyBjb2xvcjogIzEzMjEz YzsgbGluZS1oZWlnaHQ6IDIwcHg7IGZvbnQtc2l6ZTogMTBweDsgdGV4dC1kZWNvcmF0aW9uOiBu b25lOyI+VklFVyBJTiBCUk9XU0VSPC9hPjwvc3Bhbj48L3RkPgo8L3RyPgo8L3Rib2R5Pgo8L3Rh YmxlPgo8L3RkPgo8L3RyPgo8L3Rib2R5Pgo8L3RhYmxlPgo8L3RkPgo8L3RyPgo8L3Rib2R5Pgo8 L3RhYmxlPgo8IS0tRGl2aXNvci0tPgo8dGFibGUgY2xhc3M9ImRldmljZVdpZHRoIiB3aWR0aD0i NjUwIiBhbGlnbj0iY2VudGVyIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGlu Zz0iMCIgYmdjb2xvcj0iI2ZkZjZmMCI+Cjx0Ym9keT4KPHRyPgo8dGQgaGVpZ2h0PSI4IiBzdHls ZT0iZm9udC1zaXplOiAxcHg7IGxpbmUtaGVpZ2h0OiAxcHg7Ij4mbmJzcDs8L3RkPgo8L3RyPgo8 dHI+Cjx0ZCBhbGlnbj0iY2VudGVyIj4KPHRhYmxlIGNsYXNzPSJkZXZpY2VXaWR0aDgwIiB3aWR0 aD0iNTkxIiBhbGlnbj0iY2VudGVyIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFk ZGluZz0iMCIgYmdjb2xvcj0iIzEzMjEzYyI+Cjx0Ym9keT4KPHRyPgo8dGQgaGVpZ2h0PSIxIiBz dHlsZT0iZm9udC1zaXplOiAxcHg7IGxpbmUtaGVpZ2h0OiAxcHg7Ij4mbmJzcDs8L3RkPgo8L3Ry Pgo8L3Rib2R5Pgo8L3RhYmxlPgo8L3RkPgo8L3RyPgo8dHI+Cjx0ZCBoZWlnaHQ9IjE1IiBzdHls ZT0iZm9udC1zaXplOiAxcHg7IGxpbmUtaGVpZ2h0OiAxcHg7Ij4mbmJzcDs8L3RkPgo8L3RyPgo8 L3Rib2R5Pgo8L3RhYmxlPjwvZGl2PjwhLS1baWYgbXNvXT48L3RkPjwvdHI+PC90YWJsZT48IVtl bmRpZl0tLT48IS0tW2lmIG1zb10+PHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNl bGxzcGFjaW5nPSIwIiBhbGlnbj0ibGVmdCIgc3R5bGU9Im1zby10YWJsZS1sc3BhY2U6MHB0OyAg bXNvLXRhYmxlLXJzcGFjZTowcHQ7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7IHdpZHRoOiAx MDAlIj48dHI+PHRkIHN0eWxlPSJ3aWR0aDogMTAwJTsiPjwhW2VuZGlmXS0tPjxkaXYgc3R5bGU9 ImZsb2F0OiBsZWZ0OyB3aWR0aDogMTAwJSIgY2xhc3M9InNhcE1rdEJsb2NrIj48IS0tSEVBREVS LS0+Cjx0YWJsZSBjbGFzcz0iZGV2aWNlV2lkdGgiIHdpZHRoPSI2NTAiIGFsaWduPSJjZW50ZXIi IGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBiZ2NvbG9yPSIjZmRm NmYwIj4KPHRib2R5Pgo8dHI+Cjx0ZCBoZWlnaHQ9IjI1IiBzdHlsZT0iZm9udC1zaXplOiAxcHg7 IGxpbmUtaGVpZ2h0OiAxcHg7Ij4mbmJzcDs8L3RkPgo8L3RyPgo8dHI+Cjx0ZD4KPHRhYmxlIHdp ZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxs cGFkZGluZz0iMCI+Cjx0Ym9keT4KPHRyPgo8dGQgYWxpZ249ImNlbnRlciI+CjxhIHJlbD0ibm9v cGVuZXIgbm9yZWZlcnJlciIgaHJlZj0iaHR0cHM6Ly9kaWdpdGFsLm5oLWhvdGVscy5jb206NDQz L3NhcC9wdWJsaWMvY3Vhbi9saW5rLzEwMC9DQ0ZGQ0IyMTMwQ0YyMDZENTc0MzE1Q0Y0MzJGQTQx M0U2MDk2NEQxP19WXz0yJl9LMTFfPTk3OUNBQzQxMEMzOUU4M0JDN0I1RDJGNTNGNTkzQzM5M0I0 NDYxNzQmX0w1NEFEMUYyMDRfPWMyTmxibUZ5YVc4OVRVeERVRWNtZEdGeVoyVjBQV2gwZEhCek9p OHZkM2QzTG0xcGJtOXlhRzkwWld4ekxtTnZiVDkxZEcxZmMyOTFjbU5sUFc1bGQzTnNaWFIwWlhJ bWRYUnRYMjFsWkdsMWJUMWxiV0ZwYkNaMWRHMWZZMkZ0Y0dGcFoyNDlaVzFoYVd4cGJtZGZhVzUw WlhKdVlXd21kWFJ0WDNSbGNtMDlSVlZCVFRJd01qVm9aV0ZrWlhKbWIyOTBaWEltYzJGd0xXOTFk R0p2ZFc1a0xXbGtQVU5EUmtaRFFqSXhNekJEUmpJd05rUTFOelF6TVRWRFJqUXpNa1pCTkRFelJU WXdPVFkwUkRFJl9LMTNfPTM2NSZfSzE0Xz1kZGYzNTMwY2FmMGQ0ZWRmN2I0NTkxYmE5YWIyNjI3 OGYyZGFhZDViNDBlMWJiNGFjNzdhZTlkYjUwOWI5ZGRhIiB0YXJnZXQ9Il9ibGFuayI+PGltZyBj bGFzcz0iZGV2aWNlV2lkdGg1MCIgc3JjPSJodHRwczovL2luZm8ubmgtaG90ZWxzLmNvbS9jYW1w YWlnbi8yMDI1LzAzbWlub3JsYXVuY2gxL21pbm9yYmx1ZS5wbmciIGJvcmRlcj0iMCIgYWx0PSJN aW5vciBIb3RlbHMiIHRpdGxlPSJNaW5vciBIb3RlbHMiIHdpZHRoPSIxNzUiIHN0eWxlPSJkaXNw bGF5OiBibG9jazsgbWFyZ2luOiAwIGF1dG87IG9wYWNpdHk6IDE7Ij48L2E+PC90ZD4KPC90cj4K PHRyPgo8dGQgaGVpZ2h0PSI0MCIgc3R5bGU9ImZvbnQtc2l6ZTogMXB4OyBsaW5lLWhlaWdodDog MXB4OyI+Jm5ic3A7PC90ZD4KPC90cj4KPC90Ym9keT4KPC90YWJsZT4KPC90ZD4KPC90cj4KPC90 Ym9keT4KPC90YWJsZT48L2Rpdj48IS0tW2lmIG1zb10+PC90ZD48L3RyPjwvdGFibGU+PCFbZW5k aWZdLS0+PCEtLVtpZiBtc29dPjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxs c3BhY2luZz0iMCIgYWxpZ249ImxlZnQiIHN0eWxlPSJtc28tdGFibGUtbHNwYWNlOjBwdDsgIG1z by10YWJsZS1yc3BhY2U6MHB0OyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyB3aWR0aDogMTAw JSI+PHRyPjx0ZCBzdHlsZT0id2lkdGg6IDEwMCU7Ij48IVtlbmRpZl0tLT48ZGl2IHN0eWxlPSJm bG9hdDogbGVmdDsgd2lkdGg6IDEwMCUiIGNsYXNzPSJzYXBNa3RCbG9jayI+PHRhYmxlIGNsYXNz PSJkZXZpY2VXaWR0aCIgd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiIGJvcmRlcj0iMCIgY2Vs bHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBiZ2NvbG9yPSIjZmRmNmYwIiBzdHlsZT0iYm9y ZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUt cnNwYWNlOiAwcHQ7IHBhZGRpbmc6IDA7IG1hcmdpbjogMDsgZm9udC1zaXplOiAwOyBsaW5lLWhl aWdodDogMDsiPgo8dGJvZHk+Cjx0cj4KPHRkIGhlaWdodD0iMTAiIHN0eWxlPSJmb250LXNpemU6 IDFweDsgbGluZS1oZWlnaHQ6IDFweDsgbXNvLWxpbmUtaGVpZ2h0LXJ1bGU6IGV4YWN0bHk7Ij4m bmJzcDs8L3RkPgo8L3RyPgo8dHI+Cjx0ZD4KPHRhYmxlIGNsYXNzPSJkZXZpY2VXaWR0aCIgd2lk dGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxz cGFjaW5nPSIwIiBzdHlsZT0iYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgcGFkZGluZzogMDsg bWFyZ2luOiAwOyBmb250LXNpemU6IDA7IGxpbmUtaGVpZ2h0OiAwOyI+Cjx0Ym9keT4KPHRyPgo8 dGQ+Cjx0YWJsZSBjbGFzcz0iZGV2aWNlV2lkdGgiIHdpZHRoPSI5MCUiIGFsaWduPSJjZW50ZXIi IGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBzdHlsZT0iYm9yZGVy LWNvbGxhcHNlOiBjb2xsYXBzZTsgZm9udC1mYW1pbHk6IENhbGlicmksIHNhbnMtc2VyaWY7IGZv bnQtc2l6ZTogMDsgbGluZS1oZWlnaHQ6IDA7Ij4KPHRib2R5Pgo8dHI+Cjx0ZCBhbGlnbj0ibGVm dCIgd2lkdGg9IjQ1JSI+PGltZyBjbGFzcz0iZGV2aWNlV2lkdGgiIHNyYz0iaHR0cHM6Ly9pbmZv Lm5oLWhvdGVscy5jb20vY2FtcGFpZ24vMjAyNS8wMG1pbm9ydGVtcGxhdGUvaGVhZGVyLWRpc2Nv dmVyeS1ibHVlLnBuZyIgYm9yZGVyPSIwIiBhbHQ9Ik1pbm9yIERJU0NPVkVSWSIgdGl0bGU9Ik1p bm9yIERJU0NPVkVSWSIgd2lkdGg9IjIxMCIgc3R5bGU9ImRpc3BsYXk6IGJsb2NrOyBvcGFjaXR5 OiAxOyIgLz48L3RkPgo8dGQgd2lkdGg9IjEwIiBzdHlsZT0iZm9udC1zaXplOiAxcHg7IGxpbmUt aGVpZ2h0OiAxcHg7Ij4mbmJzcDs8L3RkPgo8dGQgYWxpZ249InJpZ2h0IiBzdHlsZT0iZm9udC1m YW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOyBjb2xvcjogIzEzMjEzYzsgZm9udC1zaXplOiAxNnB4 OyBsaW5lLWhlaWdodDogMjBweDsiPjczNDQ5MzAyPC90ZD4KPC90cj4KPC90Ym9keT4KPC90YWJs ZT4KPC90ZD4KPC90cj4KPC90Ym9keT4KPC90YWJsZT4KPC90ZD4KPC90cj4KPC90Ym9keT4KPC90 YWJsZT4KPHRhYmxlIGNsYXNzPSJkZXZpY2VXaWR0aCIgd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50 ZXIiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBiZ2NvbG9yPSIj ZmRmNmYwIiBzdHlsZT0iYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgbXNvLXRhYmxlLWxzcGFj ZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IHBhZGRpbmc6IDA7IG1hcmdpbjogMDsgZm9u dC1zaXplOiAwOyBsaW5lLWhlaWdodDogMDsiPgo8dGJvZHk+Cjx0cj4KPHRkIGhlaWdodD0iNSIg c3R5bGU9ImZvbnQtc2l6ZTogMXB4OyBsaW5lLWhlaWdodDogMXB4OyBtc28tbGluZS1oZWlnaHQt cnVsZTogZXhhY3RseTsiPiZuYnNwOzwvdGQ+CjwvdHI+Cjx0cj4KPHRkPgo8dGFibGUgY2xhc3M9 ImRldmljZVdpZHRoIiB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciIgYm9yZGVyPSIwIiBjZWxs cGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHN0eWxlPSJib3JkZXItY29sbGFwc2U6IGNvbGxh cHNlOyBwYWRkaW5nOiAwOyBtYXJnaW46IDA7IGZvbnQtc2l6ZTogMDsgbGluZS1oZWlnaHQ6IDA7 Ij4KPHRib2R5Pgo8dHI+Cjx0ZD4KPHRhYmxlIGNsYXNzPSJkZXZpY2VXaWR0aCIgd2lkdGg9Ijkw JSIgYWxpZ249ImNlbnRlciIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9 IjAiIHN0eWxlPSJib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyBmb250LWZhbWlseTogQ2FsaWJy aSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAwOyBsaW5lLWhlaWdodDogMDsiPgo8dGJvZHk+Cjx0 cj4KPHRkIGFsaWduPSJsZWZ0IiB3aWR0aD0iNDklIiBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFs LCBzYW5zLXNlcmlmOyBjb2xvcjogIzEzMjEzYzsgZm9udC1zaXplOiAxNnB4OyBsaW5lLWhlaWdo dDogMjBweDsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsiPlNJTFZFUjwvdGQ+Cjx0ZCB3aWR0 aD0iMTAiIHN0eWxlPSJmb250LXNpemU6IDFweDsgbGluZS1oZWlnaHQ6IDFweDsiPiZuYnNwOzwv dGQ+Cjx0ZCBhbGlnbj0icmlnaHQiIHN0eWxlPSJmb250LWZhbWlseTogQXJpYWwsIHNhbnMtc2Vy aWY7IGNvbG9yOiAjMTMyMTNjOyBmb250LXNpemU6IDE2cHg7IGxpbmUtaGVpZ2h0OiAyMHB4OyI+ Sm9zZXBoaW5lIFBmZWlmZmVyPC90ZD4KPC90cj4KPC90Ym9keT4KPC90YWJsZT4KPC90ZD4KPC90 cj4KPC90Ym9keT4KPC90YWJsZT4KPC90ZD4KPC90cj4KPHRyPgo8dGQgaGVpZ2h0PSIxMCIgc3R5 bGU9ImZvbnQtc2l6ZTogMXB4OyBsaW5lLWhlaWdodDogMXB4OyBtc28tbGluZS1oZWlnaHQtcnVs ZTogZXhhY3RseTsiPiZuYnNwOzwvdGQ+CjwvdHI+CjwvdGJvZHk+CjwvdGFibGU+PC9kaXY+PCEt LVtpZiBtc29dPjwvdGQ+PC90cj48L3RhYmxlPjwhW2VuZGlmXS0tPjwhLS1baWYgbXNvXT48dGFi bGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGFsaWduPSJsZWZ0 IiBzdHlsZT0ibXNvLXRhYmxlLWxzcGFjZTowcHQ7ICBtc28tdGFibGUtcnNwYWNlOjBwdDsgYm9y ZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgd2lkdGg6IDEwMCUiPjx0cj48dGQgc3R5bGU9IndpZHRo OiAxMDAlOyI+PCFbZW5kaWZdLS0+PGRpdiBzdHlsZT0iZmxvYXQ6IGxlZnQ7IHdpZHRoOiAxMDAl IiBjbGFzcz0ic2FwTWt0QmxvY2siPjwhLS1NQUlOLS0+Cjx0YWJsZSBjbGFzcz0iZGV2aWNlV2lk dGggZGFya21vZGUiIHdpZHRoPSI2NTAiIGFsaWduPSJjZW50ZXIiIGJvcmRlcj0iMCIgY2VsbHNw YWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBzdHlsZT0icGFkZGluZzogMDsgbWFyZ2luOiAwOyBm b250LXNpemU6IDA7IGxpbmUtaGVpZ2h0OiAwOyIgYmdjb2xvcj0iI2ZkZjZmMCI+Cjx0Ym9keT4K PHRyPgo8dGQ+PGEgcmVsPSJub29wZW5lciBub3JlZmVycmVyIiBocmVmPSJodHRwczovL2RpZ2l0 YWwubmgtaG90ZWxzLmNvbTo0NDMvc2FwL3B1YmxpYy9jdWFuL2xpbmsvMTAwL0NDRkZDQjIxMzBD RjIwNkQ1NzQzMTVDRjQzMkZBNDEzRTYwOTY0RDE/X1ZfPTImX0sxMV89NjZFQ0FBRTE3QTVEODIx RkZBNEE1MjE2N0Y1M0EzNzQ5NkQwMzVFNSZfTDU0QUQxRjIwNF89YzJObGJtRnlhVzg5VFV4RFVF Y21kR0Z5WjJWMFBXaDBkSEJ6T2k4dmQzZDNMbTFwYm05eWFHOTBaV3h6TG1OdmJTOWxiaTlpYkc5 bkwybHVjM0JwY21GMGFXOXVMMlJsWm1sdWFYUnBkbVV0WW5WamEyVjBMV3hwYzNRdFpYaHdaWEpw Wlc1alpYTXRZWEp2ZFc1a0xYUm9aUzEzYjNKc1pEOTFkRzFmYzI5MWNtTmxQVzVsZDNOc1pYUjBa WEltZFhSdFgyMWxaR2wxYlQxbGJXRnBiQ1oxZEcxZlkyRnRjR0ZwWjI0OVpXMWhhV3hwYm1kZllX MWxZVjh5TURJMVVUUXRNVE14TUY5RlZVRk5MVTlqZEMxRmVIUnlZVzl5WkdsdVlYSjVYMDFJWDBW RVRWOUZUaVp6WVhBdGIzVjBZbTkxYm1RdGFXUTlRME5HUmtOQ01qRXpNRU5HTWpBMlJEVTNORE14 TlVOR05ETXlSa0UwTVRORk5qQTVOalJFTVEmX0sxM189MzY1Jl9LMTRfPTk1YTAxYzRiMzk4Y2M3 MjQxZmVjNTBiNDAyNDAyYWFlNDY0OGRmNzhhNDc5YzMzMjA2Yjg3MjU1YjE1ZGQwM2QiIHRhcmdl dD0iX2JsYW5rIj48aW1nIGNsYXNzPSJkZXZpY2VXaWR0aCIgc3JjPSJodHRwczovL2luZm8ubmgt aG90ZWxzLmNvbS9jYW1wYWlnbi8yMDI1LzEwbWluaG90ZXh0ZXhwL21haW4uZ2lmIiBib3JkZXI9 IjAiIGFsdD0iICIgdGl0bGU9IiAiIHdpZHRoPSI2NTAiIHN0eWxlPSJkaXNwbGF5OiBibG9jazsg bWFyZ2luOiAwOyBvcGFjaXR5OiAxOyBwYWRkaW5nOiAwOyBmb250LXNpemU6IDA7IGxpbmUtaGVp Z2h0OiAwOyI+PC9hPjwvdGQ+CjwvdHI+CjwvdGJvZHk+CjwvdGFibGU+CjwhLS1TRUNPTkQgSEVB RExJTkUtLT4KPHRhYmxlIGNsYXNzPSJkZXZpY2VXaWR0aCIgYm9yZGVyPSIwIiBjZWxsc3BhY2lu Zz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIiBiZ2NvbG9y PSIjZmRmNmYwIj4KPHRib2R5IGFsaWduPSJjZW50ZXIiPgo8dHI+Cjx0ZD4KPHRhYmxlIGNsYXNz PSJkZXZpY2VXaWR0aFRleHQiIHdpZHRoPSI5MCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAi IGNlbGxwYWRkaW5nPSIwIiBhbGlnbj0iY2VudGVyIj4KPHRib2R5Pgo8dHI+Cjx0ZCBoZWlnaHQ9 IjI1IiBzdHlsZT0iZm9udC1zaXplOiAxcHg7IGxpbmUtaGVpZ2h0OiAxcHg7Ij4mbmJzcDs8L3Rk Pgo8L3RyPgo8dHI+Cjx0ZCBhbGlnbj0iY2VudGVyIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6 IEFyaWFsOyBjb2xvcjogIzEzMjEzYzsgZm9udC1zaXplOiAyNnB4OyB0ZXh0LWFsaWduOiBjZW50 ZXI7Ij48Yj5Zb3VyIE5leHQgR3JlYXQgRXNjYXBlOiBBbmNpZW50IFJ1aW5zLCBXaWxkbGlmZSBX b25kZXJzLCBhbmQgU2t5LUhpZ2gmbmJzcDtXaW5lIDwvYj48L3NwYW4+PC90ZD4KPC90cj4KPC90 Ym9keT4KPC90YWJsZT4KPC90ZD4KPC90cj4KPHRyPgo8dGQgaGVpZ2h0PSIyNSIgc3R5bGU9ImZv bnQtc2l6ZTogMXB4OyBsaW5lLWhlaWdodDogMXB4OyI+Jm5ic3A7PC90ZD4KPC90cj4KPC90Ym9k eT4KPC90YWJsZT4KPHRhYmxlIGNsYXNzPSJkZXZpY2VXaWR0aCIgYm9yZGVyPSIwIiBjZWxsc3Bh Y2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIiBiZ2Nv bG9yPSIjZmRmNmYwIj4KPHRib2R5IGFsaWduPSJjZW50ZXIiPgo8dHI+Cjx0ZD4KPHRhYmxlIGNs YXNzPSJkZXZpY2VXaWR0aFRleHQiIHdpZHRoPSI4MCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9 IjAiIGNlbGxwYWRkaW5nPSIwIiBhbGlnbj0iY2VudGVyIj4KPHRib2R5Pgo8dHI+Cjx0ZCBoZWln aHQ9IjAiIHN0eWxlPSJmb250LXNpemU6IDFweDsgbGluZS1oZWlnaHQ6IDFweDsiPiZuYnNwOzwv dGQ+CjwvdHI+Cjx0cj4KPHRkIGFsaWduPSJjZW50ZXIiIHN0eWxlPSJjb2xvcjogIzEzMjEzYzsg Zm9udC1zaXplOiAxOHB4OyBsaW5lLWhlaWdodDogMjJweDsgdGV4dC1hbGlnbjogY2VudGVyOyIg Y2xhc3M9ImhlYWRsaW5lIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IFNpdGthIEJhbm5lciBS ZWd1bGFyOyI+Q2xpbWIgUGVydSZyc3F1bztzIGFuY2llbnQgcnVpbnMsIHdpdG5lc3MgQWZyaWNh JnJzcXVvO3MgR3JlYXQgTWlncmF0aW9uLCBkaW5lIGFib2FyZCBhIHZpbnRhZ2UgdHJhaW4gb3Zl ciBWaWN0b3JpYSBGYWxscywgc29hciBhYm92ZSB2aW5leWFyZHMgaW4gSHVuZ2FyeSBhbmQmbmJz cDttb3JlLjwvc3Bhbj48L3RkPgo8L3RyPgo8dHI+Cjx0ZCBoZWlnaHQ9IjI1IiBzdHlsZT0iZm9u dC1zaXplOiAxcHg7IGxpbmUtaGVpZ2h0OiAxcHg7Ij4mbmJzcDs8L3RkPgo8L3RyPgo8L3Rib2R5 Pgo8L3RhYmxlPgo8L3RkPgo8L3RyPgo8L3Rib2R5Pgo8L3RhYmxlPgo8IS0tQm90w7NuIC0tPgo8 dGFibGUgY2xhc3M9ImRldmljZVdpZHRoIiB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciIgYm9y ZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGJnY29sb3I9IiNmZGY2ZjAi Pgo8dGJvZHkgYWxpZ249ImNlbnRlciI+Cjx0cj4KPHRkIGhlaWdodD0iMCIgc3R5bGU9ImZvbnQt c2l6ZTogMXB4OyBsaW5lLWhlaWdodDogMXB4OyI+Jm5ic3A7PC90ZD4KPC90cj4KPHRyPgo8dGQ+ Cjx0YWJsZSBjbGFzcz0iYnRuIiBhbGlnbj0iY2VudGVyIiBzdHlsZT0iYm94LXNpemluZzogYm9y ZGVyLWJveDsgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZSAhaW1wb3J0YW50OyBtYXJnaW4tbGVm dDogYXV0bzsgbWFyZ2luLXJpZ2h0OiBhdXRvOyB3aWR0aDogYXV0bzsiIGJvcmRlcj0iMCIgY2Vs bHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIj4KPHRib2R5Pgo8dHI+Cjx0ZCBhbGlnbj0iY2Vu dGVyIiB2YWxpZ249ImNlbnRlciIgc3R5bGU9ImJhY2tncm91bmQ6ICMxMzIxM2M7IGJvcmRlci1y YWRpdXM6IDFweDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgdGV4dC1hbGlnbjogY2VudGVyOyB2 ZXJ0aWNhbC1hbGlnbjogdG9wOyI+PGEgcmVsPSJub29wZW5lciBub3JlZmVycmVyIiBocmVmPSJo dHRwczovL2RpZ2l0YWwubmgtaG90ZWxzLmNvbTo0NDMvc2FwL3B1YmxpYy9jdWFuL2xpbmsvMTAw L0NDRkZDQjIxMzBDRjIwNkQ1NzQzMTVDRjQzMkZBNDEzRTYwOTY0RDE/X1ZfPTImX0sxMV89Q0Uy NTNENEZGMkVFMjdFRjE4MEJBOUMzQjgzOEY5OTlDNkQ1ODZFQyZfTDU0QUQxRjIwNF89YzJObGJt RnlhVzg5VFV4RFVFY21kR0Z5WjJWMFBXaDBkSEJ6T2k4dmQzZDNMbTFwYm05eWFHOTBaV3h6TG1O dmJTOWxiaTlpYkc5bkwybHVjM0JwY21GMGFXOXVMMlJsWm1sdWFYUnBkbVV0WW5WamEyVjBMV3hw YzNRdFpYaHdaWEpwWlc1alpYTXRZWEp2ZFc1a0xYUm9aUzEzYjNKc1pEOTFkRzFmYzI5MWNtTmxQ VzVsZDNOc1pYUjBaWEltZFhSdFgyMWxaR2wxYlQxbGJXRnBiQ1oxZEcxZlkyRnRjR0ZwWjI0OVpX MWhhV3hwYm1kZllXMWxZVjh5TURJMVVUUXRNVE14TUY5RlZVRk5MVTlqZEMxRmVIUnlZVzl5Wkds dVlYSjVYMDFJWDBWRVRWOUZUaVp6WVhBdGIzVjBZbTkxYm1RdGFXUTlRME5HUmtOQ01qRXpNRU5H TWpBMlJEVTNORE14TlVOR05ETXlSa0UwTVRORk5qQTVOalJFTVEmX0sxM189MzY1Jl9LMTRfPTdm YmJkYzU5MTlkOWM3NjJiOWM2OGM4MWUyMDhjZjAzYmI4N2RhMWU4NmQ2NDk5YWJmMmY4NDg4OWY1 ZjQzMWMiIHRhcmdldD0iX2JsYW5rIiB0aXRsZT0iICIgc3R5bGU9ImJhY2tncm91bmQ6ICMxMzIx M2M7IGJvcmRlcjogNnB4IHNvbGlkICMxMzIxM2M7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IGNv bG9yOiAjZmZmZmZmOyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGJsb2NrOyBmb250LXNpemU6 IDE0cHg7IHBhZGRpbmc6IDEwcHggNTBweCAxMHB4IDUwcHg7IG1hcmdpbjogMDsgbXNvLXBhZGRp bmctYWx0OiA4OyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNh c2U7IGZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij48 IS0tW2lmIG1zb10+Jm5ic3A7Jnp3bmo7Jm5ic3A7Jnp3bmo7Jm5ic3A7Jnp3bmo7Jm5ic3A7Jnp3 bmo7Jm5ic3A7Jnp3bmo7Jm5ic3A7Jnp3bmo7Jm5ic3A7Jnp3bmo7Jm5ic3A7Jnp3bmo7PCFbZW5k aWZdLS0+U1RBUlQgWU9VUiBKT1VSTkVZPCEtLVtpZiBtc29dPiZuYnNwOyZ6d25qOyZuYnNwOyZ6 d25qOyZuYnNwOyZ6d25qOyZuYnNwOyZ6d25qOyZuYnNwOyZ6d25qOyZuYnNwOyZ6d25qOyZuYnNw OyZ6d25qOyZuYnNwOyZ6d25qOzwhW2VuZGlmXS0tPjwvYT48L3RkPgo8L3RyPgo8L3Rib2R5Pgo8 L3RhYmxlPgo8L3RkPgo8L3RyPgo8dHI+Cjx0ZCBoZWlnaHQ9IjAiIHN0eWxlPSJmb250LXNpemU6 IDFweDsgbGluZS1oZWlnaHQ6IDFweDsiPiZuYnNwOzwvdGQ+CjwvdHI+CjwvdGJvZHk+CjwvdGFi bGU+CjwhLS0vQm90w7NuLS0+Cjx0YWJsZSBjbGFzcz0iZGV2aWNlV2lkdGgiIHdpZHRoPSIxMDAl IiBhbGlnbj0iY2VudGVyIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0i MCIgYmdjb2xvcj0iI2ZkZjZmMCI+Cjx0Ym9keSBhbGlnbj0iY2VudGVyIj4KPHRyPgo8dGQgaGVp Z2h0PSIzMCIgc3R5bGU9ImZvbnQtc2l6ZTogMXB4OyBsaW5lLWhlaWdodDogMXB4OyI+Jm5ic3A7 PC90ZD4KPC90cj4KPC90Ym9keT4KPC90YWJsZT4KPCEtLUlNRy0tPgo8dGFibGUgY2xhc3M9ImRl dmljZVdpZHRoIGRhcmttb2RlIiB3aWR0aD0iNjUwIiBhbGlnbj0iY2VudGVyIiBib3JkZXI9IjAi IGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgc3R5bGU9InBhZGRpbmc6IDA7IG1hcmdp bjogMDsgZm9udC1zaXplOiAwOyBsaW5lLWhlaWdodDogMDsiIGJnY29sb3I9IiNmZmZmZmYiPgo8 dGJvZHk+Cjx0cj4KPHRkPjxjZW50ZXI+PGEgcmVsPSJub29wZW5lciBub3JlZmVycmVyIiBocmVm PSJodHRwczovL2RpZ2l0YWwubmgtaG90ZWxzLmNvbTo0NDMvc2FwL3B1YmxpYy9jdWFuL2xpbmsv MTAwL0NDRkZDQjIxMzBDRjIwNkQ1NzQzMTVDRjQzMkZBNDEzRTYwOTY0RDE/X1ZfPTImX0sxMV89 NDlCQzQxN0Y5MUE4OTJFQzZFRUJEQkFEODczNEY1OTU2NzE5QzY2QiZfTDU0QUQxRjIwNF89YzJO bGJtRnlhVzg5VFV4RFVFY21kR0Z5WjJWMFBXaDBkSEJ6T2k4dmQzZDNMbTFwYm05eWFHOTBaV3h6 TG1OdmJTOWxiaTlpYkc5bkwybHVjM0JwY21GMGFXOXVMM1Z1Wm05eVoyVjBkR0ZpYkdVdGRISnBj SE10WW1WemRDMXdiR0ZqWlhNdGJHRjBhVzR0WVcxbGNtbGpZVDkxZEcxZmMyOTFjbU5sUFc1bGQz TnNaWFIwWlhJbWRYUnRYMjFsWkdsMWJUMWxiV0ZwYkNaMWRHMWZZMkZ0Y0dGcFoyNDlaVzFoYVd4 cGJtZGZZVzFsWVY4eU1ESTFVVFF0TVRNeE1GOUZWVUZOTFU5amRDMUZlSFJ5WVc5eVpHbHVZWEo1 WDAxSVgwVkVUVjlGVGlaellYQXRiM1YwWW05MWJtUXRhV1E5UTBOR1JrTkNNakV6TUVOR01qQTJS RFUzTkRNeE5VTkdORE15UmtFME1UTkZOakE1TmpSRU1RJl9LMTNfPTM2NSZfSzE0Xz02Y2MwNTk3 MWYxNjEzZTQ1M2Y2MTk5MjlmYzlkNzY5Y2RkZjRlZmZlMjI1MTc3YTFjMTJlZTIzNzA0MDA0NTc0 IiB0YXJnZXQ9Il9ibGFuayI+PGltZyBjbGFzcz0iZGV2aWNlV2lkdGgiIHNyYz0iaHR0cHM6Ly9p bmZvLm5oLWhvdGVscy5jb20vY2FtcGFpZ24vMjAyNS8xMG1pbmhvdGV4dGV4cC9lcGljLnBuZyIg Ym9yZGVyPSIwIiBhbHQ9IiAiIHRpdGxlPSIgIiB3aWR0aD0iMzkwIiBzdHlsZT0iZGlzcGxheTog YmxvY2s7IG1hcmdpbjogMDsgb3BhY2l0eTogMTsgcGFkZGluZzogMDsgZm9udC1zaXplOiAwOyBs aW5lLWhlaWdodDogMDsiPjwvYT48L2NlbnRlcj48L3RkPgo8L3RyPgo8L3Rib2R5Pgo8L3RhYmxl Pgo8IS0tQkxPQ0sgRSBCT1JERVItLT4KPHRhYmxlIGNsYXNzPSJkZXZpY2VXaWR0aCIgd2lkdGg9 IjEwMCUiIGFsaWduPSJjZW50ZXIiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRk aW5nPSIwIj4KPHRib2R5Pgo8dHI+Cjx0ZD4KPHRhYmxlIGNsYXNzPSJkZXZpY2VXaWR0aCIgd2lk dGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxw YWRkaW5nPSIwIiBiZ2NvbG9yPSIjZmZmZmZmIj4KPHRib2R5Pgo8dHI+Cjx0ZCBoZWlnaHQ9IjAi IHN0eWxlPSJmb250LXNpemU6IDFweDsgbGluZS1oZWlnaHQ6IDFweDsiPiZuYnNwOzwvdGQ+Cjwv dHI+Cjx0cj4KPHRkIGFsaWduPSJjZW50ZXIiPjxhIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciIg aHJlZj0iaHR0cHM6Ly9kaWdpdGFsLm5oLWhvdGVscy5jb206NDQzL3NhcC9wdWJsaWMvY3Vhbi9s aW5rLzEwMC9DQ0ZGQ0IyMTMwQ0YyMDZENTc0MzE1Q0Y0MzJGQTQxM0U2MDk2NEQxP19WXz0yJl9L MTFfPTlFNzFDOEVGRDM1RjhBRjIyMTRDNzQ4REQ2QUFEM0EyOEZCQzE3MTYmX0w1NEFEMUYyMDRf PWMyTmxibUZ5YVc4OVRVeERVRWNtZEdGeVoyVjBQV2gwZEhCek9pOHZkM2QzTG0xcGJtOXlhRzkw Wld4ekxtTnZiUzlsYmk5aWJHOW5MMmx1YzNCcGNtRjBhVzl1TDNWdVptOXlaMlYwZEdGaWJHVXRk SEpwY0hNdFltVnpkQzF3YkdGalpYTXRiR0YwYVc0dFlXMWxjbWxqWVQ5MWRHMWZjMjkxY21ObFBX NWxkM05zWlhSMFpYSW1kWFJ0WDIxbFpHbDFiVDFsYldGcGJDWjFkRzFmWTJGdGNHRnBaMjQ5Wlcx aGFXeHBibWRmWVcxbFlWOHlNREkxVVRRdE1UTXhNRjlGVlVGTkxVOWpkQzFGZUhSeVlXOXlaR2x1 WVhKNVgwMUlYMFZFVFY5RlRpWnpZWEF0YjNWMFltOTFibVF0YVdROVEwTkdSa05DTWpFek1FTkdN akEyUkRVM05ETXhOVU5HTkRNeVJrRTBNVE5GTmpBNU5qUkVNUSZfSzEzXz0zNjUmX0sxNF89NWM2 YWEwZmIwMGJjODRkNzc2MDM5ODcwZGQ2YTczYWFmODFmZmY2NWU5YWMwODQ0NDVlNmE4MmRkYzYw NTc0NSIgdGFyZ2V0PSJfYmxhbmsiPjxpbWcgY2xhc3M9ImRldmljZVdpZHRoVGV4dCIgc3JjPSJo dHRwczovL2luZm8ubmgtaG90ZWxzLmNvbS9jYW1wYWlnbi8yMDI1LzEwbWluaG90ZXh0ZXhwL2xh dGluLWFtZXJpY2EuanBnIiBib3JkZXI9IjAiIGFsdD0iICIgdGl0bGU9IiAiIHdpZHRoPSI2NTAi IHN0eWxlPSJkaXNwbGF5OiBibG9jazsgbWFyZ2luOiAwIGF1dG87IG9wYWNpdHk6IDE7Ij48L2E+ PC90ZD4KPC90cj4KPC90Ym9keT4KPC90YWJsZT4KPC90ZD4KPC90cj4KPC90Ym9keT4KPC90YWJs ZT4KPHRhYmxlIGNsYXNzPSJkZXZpY2VXaWR0aCIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIg Y2VsbHBhZGRpbmc9IjAiIHdpZHRoPSI5MCUiIGJnY29sb3I9IiNmZmZmZmYiIGFsaWduPSJjZW50 ZXIiPgo8dGJvZHk+Cjx0cj4KPHRkPgo8dGFibGUgY2xhc3M9ImRldmljZVdpZHRoVGV4dCIgd2lk dGg9IjkwJSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGFsaWdu PSJjZW50ZXIiPgo8dGJvZHk+Cjx0cj4KPHRkIGhlaWdodD0iMjUiIHN0eWxlPSJmb250LXNpemU6 IDFweDsgbGluZS1oZWlnaHQ6IDFweDsiPiZuYnNwOzwvdGQ+CjwvdHI+Cjx0cj4KPHRkIGFsaWdu PSJjZW50ZXIiIHN0eWxlPSJjb2xvcjogIzEzMjEzYzsgZm9udC1zaXplOiAyMnB4OyB0ZXh0LWFs aWduOiBjZW50ZXI7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFsOyBmb250LXdlaWdo dDogYm9sZDsiPkxhdGluIEFtZXJpY2EgTGlrZSBZb3UmcnNxdW87dmUgTmV2ZXIgU2VlbjogRml2 ZSBPbmNlLWluLWEtTGlmZXRpbWUmbmJzcDtUcmlwcyA8L3NwYW4+PC90ZD4KPC90cj4KPHRyPgo8 dGQgaGVpZ2h0PSIyMCIgc3R5bGU9ImZvbnQtc2l6ZTogMXB4OyBsaW5lLWhlaWdodDogMXB4OyI+ Jm5ic3A7PC90ZD4KPC90cj4KPHRyPgo8dGQgYWxpZ249ImNlbnRlciIgc3R5bGU9ImNvbG9yOiAj MTMyMTNjOyBmb250LXNpemU6IDE4cHg7IGxpbmUtaGVpZ2h0OiAyMnB4OyB0ZXh0LWFsaWduOiBj ZW50ZXI7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IFNpdGthIEJhbm5lciBSZWd1bGFyOyI+ VHJlayB0aHJvdWdoIENvbG9tYmlhJnJzcXVvO3MgTG9zdCBDaXR5LCBleHBsb3JlIENoaWxlJnJz cXVvO3Mgb3RoZXJ3b3JsZGx5IGRlc2VydCBsYW5kc2NhcGVzIGFuZCBkcmlmdCB0b3dhcmRzIHRo ZSB1bnRvdWNoZWQmbmJzcDtHYWwmYWFjdXRlO3BhZ29zLiA8L3NwYW4+PC90ZD4KPC90cj4KPHRy Pgo8dGQgaGVpZ2h0PSIwIiBzdHlsZT0iZm9udC1zaXplOiAxcHg7IGxpbmUtaGVpZ2h0OiAxcHg7 Ij4mbmJzcDs8L3RkPgo8L3RyPgo8L3Rib2R5Pgo8L3RhYmxlPgo8L3RkPgo8L3RyPgo8dHI+Cjx0 ZCBoZWlnaHQ9IjI1IiBzdHlsZT0iZm9udC1zaXplOiAxcHg7IGxpbmUtaGVpZ2h0OiAxcHg7Ij4m bmJzcDs8L3RkPgo8L3RyPgo8L3Rib2R5Pgo8L3RhYmxlPgo8dGFibGUgY2xhc3M9ImRldmljZVdp ZHRoVGV4dCIgd2lkdGg9IjkwJSIgYWxpZ249ImNlbnRlciIgYm9yZGVyPSIwIiBjZWxsc3BhY2lu Zz0iMCIgY2VsbHBhZGRpbmc9IjAiIGJnY29sb3I9IiNmZmZmZmYiPgo8dGJvZHkgYWxpZ249ImNl bnRlciI+Cjx0cj4KPHRkIGhlaWdodD0iMCIgc3R5bGU9ImZvbnQtc2l6ZTogMXB4OyBsaW5lLWhl aWdodDogMXB4OyI+Jm5ic3A7PC90ZD4KPC90cj4KPHRyPgo8dGQ+Cjx0YWJsZSBjbGFzcz0iYnRu IiBhbGlnbj0iY2VudGVyIiBzdHlsZT0iYm94LXNpemluZzogYm9yZGVyLWJveDsgYm9yZGVyLWNv bGxhcHNlOiBzZXBhcmF0ZSAhaW1wb3J0YW50OyBtYXJnaW4tbGVmdDogYXV0bzsgbWFyZ2luLXJp Z2h0OiBhdXRvOyB3aWR0aDogYXV0bzsiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxw YWRkaW5nPSIwIj4KPHRib2R5Pgo8dHI+Cjx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249ImNlbnRl ciIgc3R5bGU9ImJhY2tncm91bmQ6ICMxMzIxM2M7IGJvcmRlci1yYWRpdXM6IDFweDsgYm94LXNp emluZzogYm9yZGVyLWJveDsgdGV4dC1hbGlnbjogY2VudGVyOyB2ZXJ0aWNhbC1hbGlnbjogdG9w OyI+PGEgcmVsPSJub29wZW5lciBub3JlZmVycmVyIiBocmVmPSJodHRwczovL2RpZ2l0YWwubmgt aG90ZWxzLmNvbTo0NDMvc2FwL3B1YmxpYy9jdWFuL2xpbmsvMTAwL0NDRkZDQjIxMzBDRjIwNkQ1 NzQzMTVDRjQzMkZBNDEzRTYwOTY0RDE/X1ZfPTImX0sxMV89MjdCNzkwOTgyNTU1NzM3QTM4RDgy RjJFN0NENzY4OTIzMEVENzdDMCZfTDU0QUQxRjIwNF89YzJObGJtRnlhVzg5VFV4RFVFY21kR0Z5 WjJWMFBXaDBkSEJ6T2k4dmQzZDNMbTFwYm05eWFHOTBaV3h6TG1OdmJTOWxiaTlpYkc5bkwybHVj M0JwY21GMGFXOXVMM1Z1Wm05eVoyVjBkR0ZpYkdVdGRISnBjSE10WW1WemRDMXdiR0ZqWlhNdGJH RjBhVzR0WVcxbGNtbGpZVDkxZEcxZmMyOTFjbU5sUFc1bGQzTnNaWFIwWlhJbWRYUnRYMjFsWkds MWJUMWxiV0ZwYkNaMWRHMWZZMkZ0Y0dGcFoyNDlaVzFoYVd4cGJtZGZZVzFsWVY4eU1ESTFVVFF0 TVRNeE1GOUZWVUZOTFU5amRDMUZlSFJ5WVc5eVpHbHVZWEo1WDAxSVgwVkVUVjlGVGlaellYQXRi M1YwWW05MWJtUXRhV1E5UTBOR1JrTkNNakV6TUVOR01qQTJSRFUzTkRNeE5VTkdORE15UmtFME1U TkZOakE1TmpSRU1RJl9LMTNfPTM2NSZfSzE0Xz02Njk0ZDk0NTZlNDAzYzQ1Y2Y3MTRhYThlYWM3 YTBlZGUzYjg5ZjJhMWZjNjM0OWEzOWUxZTE2MjdmMTVlYWMzIiB0YXJnZXQ9Il9ibGFuayIgdGl0 bGU9IiAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjMTMyMTNjOyBib3JkZXI6IDZweCBzb2xpZCAjMTMy MTNjOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyBjb2xvcjogI2ZmZmZmZjsgY3Vyc29yOiBwb2lu dGVyOyBkaXNwbGF5OiBibG9jazsgZm9udC1zaXplOiAxNnB4OyBwYWRkaW5nOiA1cHggMTBweCA1 cHggMTBweDsgbWFyZ2luOiAwOyBtc28tcGFkZGluZy1hbHQ6IDY7IHRleHQtZGVjb3JhdGlvbjog bm9uZTsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5z LXNlcmlmOyI+PCEtLVtpZiBtc29dPiZuYnNwOyZ6d25qOyZuYnNwOyZ6d25qOyZuYnNwOyZ6d25q OyZuYnNwOyZ6d25qOyZuYnNwOyZ6d25qOyZuYnNwOyZ6d25qOyZuYnNwOyZ6d25qOyZuYnNwOyZ6 d25qOzwhW2VuZGlmXS0tPkVYUExPUkUgTEFUSU4gQU1FUklDQTwhLS1baWYgbXNvXT4mbmJzcDsm enduajsmbmJzcDsmenduajsmbmJzcDsmenduajsmbmJzcDsmenduajsmbmJzcDsmenduajsmbmJz cDsmenduajsmbmJzcDsmenduajsmbmJzcDsmenduajs8IVtlbmRpZl0tLT48L2E+PC90ZD4KPC90 cj4KPC90Ym9keT4KPC90YWJsZT4KPC90ZD4KPC90cj4KPHRyPgo8dGQgaGVpZ2h0PSI1MCIgc3R5 bGU9ImZvbnQtc2l6ZTogMXB4OyBsaW5lLWhlaWdodDogMXB4OyI+Jm5ic3A7PC90ZD4KPC90cj4K PC90Ym9keT4KPC90YWJsZT4KPCEtLUJMT0NLIEUgQk9SREVSLS0+Cjx0YWJsZSBjbGFzcz0iZGV2 aWNlV2lkdGgiIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIiBib3JkZXI9IjAiIGNlbGxzcGFj aW5nPSIwIiBjZWxscGFkZGluZz0iMCI+Cjx0Ym9keT4KPHRyPgo8dGQ+Cjx0YWJsZSBjbGFzcz0i ZGV2aWNlV2lkdGgiIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIiBib3JkZXI9IjAiIGNlbGxz cGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgYmdjb2xvcj0iI2ZmZmZmZiI+Cjx0Ym9keT4KPHRy Pgo8dGQgaGVpZ2h0PSIwIiBzdHlsZT0iZm9udC1zaXplOiAxcHg7IGxpbmUtaGVpZ2h0OiAxcHg7 Ij4mbmJzcDs8L3RkPgo8L3RyPgo8dHI+Cjx0ZCBhbGlnbj0iY2VudGVyIj48YSByZWw9Im5vb3Bl bmVyIG5vcmVmZXJyZXIiIGhyZWY9Imh0dHBzOi8vZGlnaXRhbC5uaC1ob3RlbHMuY29tOjQ0My9z YXAvcHVibGljL2N1YW4vbGluay8xMDAvQ0NGRkNCMjEzMENGMjA2RDU3NDMxNUNGNDMyRkE0MTNF NjA5NjREMT9fVl89MiZfSzExXz0zMDdCNjJCNzlENDQwMEIwRUVBODQyMUI5Q0NEMENGOTUxMERF MzhCJl9MNTRBRDFGMjA0Xz1jMk5sYm1GeWFXODlUVXhEVUVjbWRHRnlaMlYwUFdoMGRIQnpPaTh2 ZDNkM0xtMXBibTl5YUc5MFpXeHpMbU52YlM5bGJpOWliRzluTDNSeVlYWmxiQzEwZVhCbGN5OWla WE4wTFhKdllXUXRkSEpwY0Mxa1pYTjBhVzVoZEdsdmJuTS9kWFJ0WDNOdmRYSmpaVDF1WlhkemJH VjBkR1Z5Sm5WMGJWOXRaV1JwZFcwOVpXMWhhV3dtZFhSdFgyTmhiWEJoYVdkdVBXVnRZV2xzYVc1 blgyRnRaV0ZmTWpBeU5WRTBMVEV6TVRCZlJWVkJUUzFQWTNRdFJYaDBjbUZ2Y21ScGJtRnllVjlO U0Y5RlJFMWZSVTRtYzJGd0xXOTFkR0p2ZFc1a0xXbGtQVU5EUmtaRFFqSXhNekJEUmpJd05rUTFO elF6TVRWRFJqUXpNa1pCTkRFelJUWXdPVFkwUkRFJl9LMTNfPTM2NSZfSzE0Xz05MzRiNTk5MzFh MTFmOWEyZTU4Nzc3ZjE0NmY5MzViNWQwNDdkMjQzYjhjMjFhYmQ1YjNkM2RiYTU3NTYwNjIzIiB0 YXJnZXQ9Il9ibGFuayIgdGl0bGU9IiAiPjxpbWcgY2xhc3M9ImRldmljZVdpZHRoVGV4dCIgc3Jj PSJodHRwczovL2luZm8ubmgtaG90ZWxzLmNvbS9jYW1wYWlnbi8yMDI1LzEwbWluaG90ZXh0ZXhw L251ZXZhLmpwZyIgYm9yZGVyPSIwIiBhbHQ9IiAiIHRpdGxlPSIgIiB3aWR0aD0iNjUwIiBzdHls ZT0iZGlzcGxheTogYmxvY2s7IG1hcmdpbjogMCBhdXRvOyBvcGFjaXR5OiAxOyI+PC9hPjwvdGQ+ CjwvdHI+CjwvdGJvZHk+CjwvdGFibGU+CjwvdGQ+CjwvdHI+CjwvdGJvZHk+CjwvdGFibGU+Cjx0 YWJsZSBjbGFzcz0iZGV2aWNlV2lkdGgiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxw YWRkaW5nPSIwIiB3aWR0aD0iOTAlIiBiZ2NvbG9yPSIjZmZmZmZmIiBhbGlnbj0iY2VudGVyIj4K PHRib2R5Pgo8dHI+Cjx0ZD4KPHRhYmxlIGNsYXNzPSJkZXZpY2VXaWR0aFRleHQiIHdpZHRoPSI5 MCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBhbGlnbj0iY2Vu dGVyIj4KPHRib2R5Pgo8dHI+Cjx0ZCBoZWlnaHQ9IjI1IiBzdHlsZT0iZm9udC1zaXplOiAxcHg7 IGxpbmUtaGVpZ2h0OiAxcHg7Ij4mbmJzcDs8L3RkPgo8L3RyPgo8dHI+Cjx0ZCBhbGlnbj0iY2Vu dGVyIiBzdHlsZT0iY29sb3I6ICMxMzIxM2M7IGZvbnQtc2l6ZTogMjJweDsgdGV4dC1hbGlnbjog Y2VudGVyOyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBBcmlhbDsgZm9udC13ZWlnaHQ6IGJv bGQ7Ij5Zb3VyIEpvdXJuZXkgb2YgYSBMaWZldGltZTogVGhlIFdvcmxkJnJzcXVvO3MgR3JlYXRl c3QgUm9hZCZuYnNwO1RyaXBzIDwvc3Bhbj48L3RkPgo8L3RyPgo8dHI+Cjx0ZCBoZWlnaHQ9IjIw IiBzdHlsZT0iZm9udC1zaXplOiAxcHg7IGxpbmUtaGVpZ2h0OiAxcHg7Ij4mbmJzcDs8L3RkPgo8 L3RyPgo8dHI+Cjx0ZCBhbGlnbj0iY2VudGVyIiBzdHlsZT0iY29sb3I6ICMxMzIxM2M7IGZvbnQt c2l6ZTogMThweDsgbGluZS1oZWlnaHQ6IDIycHg7IHRleHQtYWxpZ246IGNlbnRlcjsiPjxzcGFu IHN0eWxlPSJmb250LWZhbWlseTogU2l0a2EgQmFubmVyIFJlZ3VsYXI7Ij5DcnVpc2UgdHJvcGlj YWwgY29hc3RzIGluIE1hdXJpdGl1cywgd2luZCB0aHJvdWdoIEV1cm9wZSZyc3F1bztzIHN0b3J5 Ym9vayBtb3VudGFpbnMsIGFuZCBjaGFzZSB3aGFsZXMgYW5kIHdhdGVyZmFsbHMgYWNyb3NzIEF1 c3RyYWxpYSBhbmQgTmV3Jm5ic3A7WmVhbGFuZC48L3NwYW4+PC90ZD4KPC90cj4KPHRyPgo8dGQg aGVpZ2h0PSIwIiBzdHlsZT0iZm9udC1zaXplOiAxcHg7IGxpbmUtaGVpZ2h0OiAxcHg7Ij4mbmJz cDs8L3RkPgo8L3RyPgo8L3Rib2R5Pgo8L3RhYmxlPgo8L3RkPgo8L3RyPgo8dHI+Cjx0ZCBoZWln aHQ9IjI1IiBzdHlsZT0iZm9udC1zaXplOiAxcHg7IGxpbmUtaGVpZ2h0OiAxcHg7Ij4mbmJzcDs8 L3RkPgo8L3RyPgo8L3Rib2R5Pgo8L3RhYmxlPgo8dGFibGUgY2xhc3M9ImRldmljZVdpZHRoVGV4 dCIgd2lkdGg9IjkwJSIgYWxpZ249ImNlbnRlciIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIg Y2VsbHBhZGRpbmc9IjAiIGJnY29sb3I9IiNmZmZmZmYiPgo8dGJvZHkgYWxpZ249ImNlbnRlciI+ Cjx0cj4KPHRkIGhlaWdodD0iMCIgc3R5bGU9ImZvbnQtc2l6ZTogMXB4OyBsaW5lLWhlaWdodDog MXB4OyI+Jm5ic3A7PC90ZD4KPC90cj4KPHRyPgo8dGQ+Cjx0YWJsZSBjbGFzcz0iYnRuIiBhbGln bj0iY2VudGVyIiBzdHlsZT0iYm94LXNpemluZzogYm9yZGVyLWJveDsgYm9yZGVyLWNvbGxhcHNl OiBzZXBhcmF0ZSAhaW1wb3J0YW50OyBtYXJnaW4tbGVmdDogYXV0bzsgbWFyZ2luLXJpZ2h0OiBh dXRvOyB3aWR0aDogYXV0bzsiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5n PSIwIj4KPHRib2R5Pgo8dHI+Cjx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249ImNlbnRlciIgc3R5 bGU9ImJhY2tncm91bmQ6ICMxMzIxM2M7IGJvcmRlci1yYWRpdXM6IDFweDsgYm94LXNpemluZzog Ym9yZGVyLWJveDsgdGV4dC1hbGlnbjogY2VudGVyOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyI+PGEg cmVsPSJub29wZW5lciBub3JlZmVycmVyIiBocmVmPSJodHRwczovL2RpZ2l0YWwubmgtaG90ZWxz LmNvbTo0NDMvc2FwL3B1YmxpYy9jdWFuL2xpbmsvMTAwL0NDRkZDQjIxMzBDRjIwNkQ1NzQzMTVD RjQzMkZBNDEzRTYwOTY0RDE/X1ZfPTImX0sxMV89N0M2MkFCMzQ3MDhEOUQxMkU3RTgzQkMwNTM4 RUEzNEQwN0U1NTMwNSZfTDU0QUQxRjIwNF89YzJObGJtRnlhVzg5VFV4RFVFY21kR0Z5WjJWMFBX aDBkSEJ6T2k4dmQzZDNMbTFwYm05eWFHOTBaV3h6TG1OdmJTOWxiaTlpYkc5bkwzUnlZWFpsYkMx MGVYQmxjeTlpWlhOMExYSnZZV1F0ZEhKcGNDMWtaWE4wYVc1aGRHbHZibk0vZFhSdFgzTnZkWEpq WlQxdVpYZHpiR1YwZEdWeUpuVjBiVjl0WldScGRXMDlaVzFoYVd3bWRYUnRYMk5oYlhCaGFXZHVQ V1Z0WVdsc2FXNW5YMkZ0WldGZk1qQXlOVkUwTFRFek1UQmZSVlZCVFMxUFkzUXRSWGgwY21GdmNt UnBibUZ5ZVY5TlNGOUZSRTFmUlU0bWMyRndMVzkxZEdKdmRXNWtMV2xrUFVORFJrWkRRakl4TXpC RFJqSXdOa1ExTnpRek1UVkRSalF6TWtaQk5ERXpSVFl3T1RZMFJERSZfSzEzXz0zNjUmX0sxNF89 MDQzM2FjN2I1YzkyODg2YmYwNzcyMGEyMTE3YWNhZDEzNzMxY2FkNGY5YzY0YjlmYjg2ZGMyNjQw ZjJhY2U5OCIgdGFyZ2V0PSJfYmxhbmsiIHRpdGxlPSIgIiBzdHlsZT0iYmFja2dyb3VuZDogIzEz MjEzYzsgYm9yZGVyOiA2cHggc29saWQgIzEzMjEzYzsgYm94LXNpemluZzogYm9yZGVyLWJveDsg Y29sb3I6ICNmZmZmZmY7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogYmxvY2s7IGZvbnQtc2l6 ZTogMTZweDsgcGFkZGluZzogNXB4IDEwcHggNXB4IDEwcHg7IG1hcmdpbjogMDsgbXNvLXBhZGRp bmctYWx0OiA2OyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNh c2U7IGZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjsiPjwhLS1baWYgbXNvXT4mbmJzcDsm enduajsmbmJzcDsmenduajsmbmJzcDsmenduajsmbmJzcDsmenduajsmbmJzcDsmenduajsmbmJz cDsmenduajsmbmJzcDsmenduajsmbmJzcDsmenduajs8IVtlbmRpZl0tLT5ISVQgVEhFIE9QRU4g Uk9BRDwhLS1baWYgbXNvXT4mbmJzcDsmenduajsmbmJzcDsmenduajsmbmJzcDsmenduajsmbmJz cDsmenduajsmbmJzcDsmenduajsmbmJzcDsmenduajsmbmJzcDsmenduajsmbmJzcDsmenduajs8 IVtlbmRpZl0tLT48L2E+PC90ZD4KPC90cj4KPC90Ym9keT4KPC90YWJsZT4KPC90ZD4KPC90cj4K PHRyPgo8dGQgaGVpZ2h0PSIwIiBzdHlsZT0iZm9udC1zaXplOiAxcHg7IGxpbmUtaGVpZ2h0OiAx cHg7Ij4mbmJzcDs8L3RkPgo8L3RyPgo8L3Rib2R5Pgo8L3RhYmxlPgo8IS0tSU1HLS0+Cjx0YWJs ZSBjbGFzcz0iZGV2aWNlV2lkdGggZGFya21vZGUiIHdpZHRoPSI2NTAiIGFsaWduPSJjZW50ZXIi IGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBzdHlsZT0icGFkZGlu ZzogMDsgbWFyZ2luOiAwOyBmb250LXNpemU6IDA7IGxpbmUtaGVpZ2h0OiAwOyIgYmdjb2xvcj0i I2ZmZmZmZiI+Cjx0Ym9keT4KPHRyPgo8dGQ+PGNlbnRlcj48YSByZWw9Im5vb3BlbmVyIG5vcmVm ZXJyZXIiIGhyZWY9Imh0dHBzOi8vZGlnaXRhbC5uaC1ob3RlbHMuY29tOjQ0My9zYXAvcHVibGlj L2N1YW4vbGluay8xMDAvQ0NGRkNCMjEzMENGMjA2RDU3NDMxNUNGNDMyRkE0MTNFNjA5NjREMT9f Vl89MiZfSzExXz04NTIwQjgwNDlCNDg0REVCREI1QkJDRTg5NjEyODY0MDZDMUFDN0M3Jl9MNTRB RDFGMjA0Xz1jMk5sYm1GeWFXODlUVXhEVUVjbWRHRnlaMlYwUFdoMGRIQnpPaTh2ZDNkM0xtMXBi bTl5YUc5MFpXeHpMbU52YlM5bGJpOWliRzluTDJsdWMzQnBjbUYwYVc5dUwyUmhibU5wYm1jdGFH OXNhV1JoZVhNdGJXOTJaUzEwY21GdWMyWnZjbTB0Wm1WbGJDMWhiR2wyWlQ5MWRHMWZjMjkxY21O bFBXNWxkM05zWlhSMFpYSW1kWFJ0WDIxbFpHbDFiVDFsYldGcGJDWjFkRzFmWTJGdGNHRnBaMjQ5 WlcxaGFXeHBibWRmWVcxbFlWOHlNREkxVVRRdE1UTXhNRjlGVlVGTkxVOWpkQzFGZUhSeVlXOXla R2x1WVhKNVgwMUlYMFZFVFY5RlRpWnpZWEF0YjNWMFltOTFibVF0YVdROVEwTkdSa05DTWpFek1F TkdNakEyUkRVM05ETXhOVU5HTkRNeVJrRTBNVE5GTmpBNU5qUkVNUSZfSzEzXz0zNjUmX0sxNF89 OTQ3MDIxMTZlYTk4Zjk3YjM3ZDA3NzE0ZjMyODEwNWJmMDc4Mzk0OTQ5MGI2ODJkYTY1NGUyYmYx NDgwMWRjZiIgdGFyZ2V0PSJfYmxhbmsiPjxpbWcgY2xhc3M9ImRldmljZVdpZHRoIiBzcmM9Imh0 dHBzOi8vaW5mby5uaC1ob3RlbHMuY29tL2NhbXBhaWduLzIwMjUvMTBtaW5ob3RleHRleHAvbW9t ZW50cy5wbmciIGJvcmRlcj0iMCIgYWx0PSIgIiB0aXRsZT0iICIgd2lkdGg9IjM5MCIgc3R5bGU9 ImRpc3BsYXk6IGJsb2NrOyBtYXJnaW46IDA7IG9wYWNpdHk6IDE7IHBhZGRpbmc6IDA7IGZvbnQt c2l6ZTogMDsgbGluZS1oZWlnaHQ6IDA7Ij48L2E+PC9jZW50ZXI+PC90ZD4KPC90cj4KPC90Ym9k eT4KPC90YWJsZT4KPCEtLUJMT0NLIEMgMiBDT0xVTU5TLS0+IDwhLS1Sb3cgMS0tPgo8dGFibGUg Y2xhc3M9ImRldmljZVdpZHRoVGV4dCIgd2lkdGg9IjY1MCIgYmdjb2xvcj0iI2ZmZmZmZiIgYWxp Z249ImNlbnRlciIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPgo8 dGJvZHk+Cjx0cj4KPHRkIGhlaWdodD0iMCIgc3R5bGU9ImZvbnQtc2l6ZTogMXB4OyBsaW5lLWhl aWdodDogMXB4OyI+Jm5ic3A7PC90ZD4KPC90cj4KPHRyPgo8dGQgYWxpZ249ImNlbnRlciI+Cjx0 YWJsZSBjbGFzcz0iZGV2aWNlV2lkdGgiIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIiBib3Jk ZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+Cjx0Ym9keT4KPHRyIGFsaWdu PSJjZW50ZXIiPgo8dGQ+PCEtLSAxIGxlZnQgLS0+Cjx0YWJsZSBjbGFzcz0iZGV2aWNlV2lkdGgi IGFsaWduPSJsZWZ0IiB3aWR0aD0iNDklIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxs cGFkZGluZz0iMCIgYmdjb2xvcj0iI2ZhZjdmMiIgc3R5bGU9ImZsb2F0OiBsZWZ0OyI+Cjx0Ym9k eT4KPHRyIGFsaWduPSJsZWZ0Ij4KPHRkPjxhIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciIgaHJl Zj0iaHR0cHM6Ly9kaWdpdGFsLm5oLWhvdGVscy5jb206NDQzL3NhcC9wdWJsaWMvY3Vhbi9saW5r LzEwMC9DQ0ZGQ0IyMTMwQ0YyMDZENTc0MzE1Q0Y0MzJGQTQxM0U2MDk2NEQxP19WXz0yJl9LMTFf PUIzNTU2MTEwQjUzNkVGRDVEQzg4MUVBRTQ5OEE4NDdBMjM2Q0E4RDEmX0w1NEFEMUYyMDRfPWMy TmxibUZ5YVc4OVRVeERVRWNtZEdGeVoyVjBQV2gwZEhCek9pOHZkM2QzTG0xcGJtOXlhRzkwWld4 ekxtTnZiUzlsYmk5aWJHOW5MMmx1YzNCcGNtRjBhVzl1TDJSaGJtTnBibWN0YUc5c2FXUmhlWE10 Ylc5MlpTMTBjbUZ1YzJadmNtMHRabVZsYkMxaGJHbDJaVDkxZEcxZmMyOTFjbU5sUFc1bGQzTnNa WFIwWlhJbWRYUnRYMjFsWkdsMWJUMWxiV0ZwYkNaMWRHMWZZMkZ0Y0dGcFoyNDlaVzFoYVd4cGJt ZGZZVzFsWVY4eU1ESTFVVFF0TVRNeE1GOUZWVUZOTFU5amRDMUZlSFJ5WVc5eVpHbHVZWEo1WDAx SVgwVkVUVjlGVGlaellYQXRiM1YwWW05MWJtUXRhV1E5UTBOR1JrTkNNakV6TUVOR01qQTJSRFUz TkRNeE5VTkdORE15UmtFME1UTkZOakE1TmpSRU1RJl9LMTNfPTM2NSZfSzE0Xz0wZjI2MGJlNzlj ZTQ2ZmNhZGYwM2M4MDA1Mzk3YzMzMTgyMjc0MGUyYmFjMjZkZTk5ZjcxNTM0YWNmNTYzODliIiB0 YXJnZXQ9Il9ibGFuayI+PGltZyBjbGFzcz0iZGV2aWNlV2lkdGgiIHNyYz0iaHR0cHM6Ly9pbmZv Lm5oLWhvdGVscy5jb20vY2FtcGFpZ24vMjAyNS8xMG1pbmhvdGV4dGV4cC9uaG93LWZyYW5rdXJ0 LmpwZyIgYm9yZGVyPSIwIiBhbHQ9IiAiIHdpZHRoPSIxMDAlIiBzdHlsZT0iZGlzcGxheTogYmxv Y2s7IG1hcmdpbjogMCBhdXRvOyI+PC9hPjwvdGQ+CjwvdHI+Cjx0cj4KPHRkIGhlaWdodD0iMjUi IHN0eWxlPSJmb250LXNpemU6IDFweDsgbGluZS1oZWlnaHQ6IDFweDsiPiZuYnNwOzwvdGQ+Cjwv dHI+Cjx0cj4KPHRkPgo8dGFibGUgY2xhc3M9ImRldmljZVdpZHRoIiB3aWR0aD0iOTAlIiBiZ2Nv bG9yPSIjZmFmN2YyIiBhbGlnbj0iY2VudGVyIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBj ZWxscGFkZGluZz0iMCI+Cjx0Ym9keT4KPHRyPgo8dGQgYWxpZ249ImNlbnRlciIgc3R5bGU9ImNv bG9yOiAjMTMyMTNjOyBmb250LXNpemU6IDIwcHg7IGxpbmUtaGVpZ2h0OiAyN3B4OyB0ZXh0LWFs aWduOiBjZW50ZXI7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFsOyBmb250LXdlaWdo dDogYm9sZDsiPk1vdmUsIFRyYW5zZm9ybSwgYW5kIEZlZWwgQWxpdmUgd2l0aCZuYnNwO0RhbmNl IDwvc3Bhbj48L3RkPgo8L3RyPgo8dHI+Cjx0ZCBoZWlnaHQ9IjE1IiBzdHlsZT0iZm9udC1zaXpl OiAxcHg7IGxpbmUtaGVpZ2h0OiAxcHg7Ij4mbmJzcDs8L3RkPgo8L3RyPgo8dHI+Cjx0ZCBhbGln bj0iY2VudGVyIiBzdHlsZT0iY29sb3I6ICMxMzIxM2M7IGZvbnQtc2l6ZTogMThweDsgbGluZS1o ZWlnaHQ6IDIycHg7IHRleHQtYWxpZ246IGNlbnRlcjsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWls eTogU2l0a2EgQmFubmVyIFJlZ3VsYXI7Ij5FeHBlcmllbmNlIG9uZS1vZi1hLWtpbmQgc3RheXMg aW4gbmhvdyZyc3F1bztzIG1vc3QgY3JlYXRpdmVseSBkZXNpZ25lZCBob3RlbHMsIHdoZXJlIG1v dmVtZW50IGZ1ZWxzIGNyZWF0aXZpdHkgYW5kIGJvb3N0cyZuYnNwO3dlbGwtYmVpbmcuPC9zcGFu PjwvdGQ+CjwvdHI+Cjx0cj4KPHRkIGhlaWdodD0iMjUiIHN0eWxlPSJmb250LXNpemU6IDFweDsg bGluZS1oZWlnaHQ6IDFweDsiPiZuYnNwOzwvdGQ+CjwvdHI+Cjx0cj4KPHRkPgo8dGFibGUgY2xh c3M9ImJ0biIgYWxpZ249ImNlbnRlciIgc3R5bGU9ImJveC1zaXppbmc6IGJvcmRlci1ib3g7IGJv cmRlci1jb2xsYXBzZTogc2VwYXJhdGUgIWltcG9ydGFudDsgbWFyZ2luLWxlZnQ6IGF1dG87IG1h cmdpbi1yaWdodDogYXV0bzsgd2lkdGg6IGF1dG87IiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIw IiBjZWxscGFkZGluZz0iMCI+Cjx0Ym9keT4KPHRyPgo8dGQgYWxpZ249ImNlbnRlciIgdmFsaWdu PSJjZW50ZXIiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjMTMyMTNjOyBib3JkZXItcmFkaXVzOiAxcHg7 IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IHRleHQtYWxpZ246IGNlbnRlcjsgdmVydGljYWwtYWxp Z246IHRvcDsiPjxhIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciIgaHJlZj0iaHR0cHM6Ly9kaWdp dGFsLm5oLWhvdGVscy5jb206NDQzL3NhcC9wdWJsaWMvY3Vhbi9saW5rLzEwMC9DQ0ZGQ0IyMTMw Q0YyMDZENTc0MzE1Q0Y0MzJGQTQxM0U2MDk2NEQxP19WXz0yJl9LMTFfPTM4MUY3RTYxMjVDQzNE RTI5QTBERjk3QjdBMDNEQUNCQ0EzNkU5NjkmX0w1NEFEMUYyMDRfPWMyTmxibUZ5YVc4OVRVeERV RWNtZEdGeVoyVjBQV2gwZEhCek9pOHZkM2QzTG0xcGJtOXlhRzkwWld4ekxtTnZiUzlsYmk5aWJH OW5MMmx1YzNCcGNtRjBhVzl1TDJSaGJtTnBibWN0YUc5c2FXUmhlWE10Ylc5MlpTMTBjbUZ1YzJa dmNtMHRabVZsYkMxaGJHbDJaVDkxZEcxZmMyOTFjbU5sUFc1bGQzTnNaWFIwWlhJbWRYUnRYMjFs WkdsMWJUMWxiV0ZwYkNaMWRHMWZZMkZ0Y0dGcFoyNDlaVzFoYVd4cGJtZGZZVzFsWVY4eU1ESTFV VFF0TVRNeE1GOUZWVUZOTFU5amRDMUZlSFJ5WVc5eVpHbHVZWEo1WDAxSVgwVkVUVjlGVGlaellY QXRiM1YwWW05MWJtUXRhV1E5UTBOR1JrTkNNakV6TUVOR01qQTJSRFUzTkRNeE5VTkdORE15UmtF ME1UTkZOakE1TmpSRU1RJl9LMTNfPTM2NSZfSzE0Xz00ZTY3M2QxZDA4ZTJkNTNmZjcwNjI1ZWUx YTljZWJkNzE0MWE4ZmNkYzNiYzFjNWU0NjhiODI4MDcxZDliZDQxIiB0YXJnZXQ9Il9ibGFuayIg dGl0bGU9IkJ1dHRvbiIgY2xhc3M9ImRldmljZU1fdGV4dDEwIiBzdHlsZT0iYmFja2dyb3VuZDog IzEzMjEzYzsgYm9yZGVyOiA2cHggc29saWQgIzEzMjEzYzsgYm94LXNpemluZzogYm9yZGVyLWJv eDsgY29sb3I6ICNmZmZmZmY7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogYmxvY2s7IGZvbnQt c2l6ZTogMTZweDsgcGFkZGluZzogNXB4IDEwcHggNXB4IDEwcHg7IG1hcmdpbjogMDsgbXNvLXBh ZGRpbmctYWx0OiA2OyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IHRleHQtdHJhbnNmb3JtOiB1cHBl cmNhc2U7IGZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjsiPjwhLS1baWYgbXNvXT4mbmJz cDsmenduajsmbmJzcDsmenduajsmbmJzcDsmenduajsmbmJzcDsmenduajsmbmJzcDsmenduajsm bmJzcDsmenduajsmbmJzcDsmenduajsmbmJzcDsmenduajs8IVtlbmRpZl0tLT5EQU5DRSBOSE9X PCEtLVtpZiBtc29dPiZuYnNwOyZ6d25qOyZuYnNwOyZ6d25qOyZuYnNwOyZ6d25qOyZuYnNwOyZ6 d25qOyZuYnNwOyZ6d25qOyZuYnNwOyZ6d25qOyZuYnNwOyZ6d25qOyZuYnNwOyZ6d25qOzwhW2Vu ZGlmXS0tPjwvYT48L3RkPgo8L3RyPgo8L3Rib2R5Pgo8L3RhYmxlPgo8L3RkPgo8L3RyPgo8dHI+ Cjx0ZCBoZWlnaHQ9IjMwIiBzdHlsZT0iZm9udC1zaXplOiAxcHg7IGxpbmUtaGVpZ2h0OiAxcHg7 Ij4mbmJzcDs8L3RkPgo8L3RyPgo8L3Rib2R5Pgo8L3RhYmxlPgo8L3RkPgo8L3RyPgo8L3Rib2R5 Pgo8L3RhYmxlPgo8IS0tIC9sZWZ0IC0tPiA8IS0tIDIgcmlnaHQgLS0+Cjx0YWJsZSBjbGFzcz0i ZGV2aWNlV2lkdGgiIGFsaWduPSJyaWdodCIgd2lkdGg9IjQ5JSIgYm9yZGVyPSIwIiBjZWxsc3Bh Y2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGJnY29sb3I9IiNmYWY3ZjIiIHN0eWxlPSJmbG9hdDog cmlnaHQ7Ij4KPHRib2R5Pgo8dHIgYWxpZ249InJpZ2h0Ij4KPHRkPjxhIHJlbD0ibm9vcGVuZXIg bm9yZWZlcnJlciIgaHJlZj0iaHR0cHM6Ly9kaWdpdGFsLm5oLWhvdGVscy5jb206NDQzL3NhcC9w dWJsaWMvY3Vhbi9saW5rLzEwMC9DQ0ZGQ0IyMTMwQ0YyMDZENTc0MzE1Q0Y0MzJGQTQxM0U2MDk2 NEQxP19WXz0yJl9LMTFfPUNCMjRCQTdDRDU0NTg3M0NGRTQzMzM0RTk3MDI2RjVCQjkyNjBFRTEm X0w1NEFEMUYyMDRfPWMyTmxibUZ5YVc4OVRVeERVRWNtZEdGeVoyVjBQV2gwZEhCek9pOHZkM2Qz TG0xcGJtOXlhRzkwWld4ekxtTnZiUzlsYmk5aWJHOW5MM0JzWVdObGN5OWlZVzVuYTI5ckwyWjFi aTEwYUdsdVozTXRkRzh0Wkc4L2RYUnRYM052ZFhKalpUMXVaWGR6YkdWMGRHVnlKblYwYlY5dFpX UnBkVzA5WlcxaGFXd21kWFJ0WDJOaGJYQmhhV2R1UFdWdFlXbHNhVzVuWDJGdFpXRmZNakF5TlZF MExURXpNVEJmUlZWQlRTMVBZM1F0UlhoMGNtRnZjbVJwYm1GeWVWOU5TRjlGUkUxZlJVNG1jMkZ3 TFc5MWRHSnZkVzVrTFdsa1BVTkRSa1pEUWpJeE16QkRSakl3TmtRMU56UXpNVFZEUmpRek1rWkJO REV6UlRZd09UWTBSREUmX0sxM189MzY1Jl9LMTRfPTdlODQ4YzVkNDk3OTFiNjViNWU3MjUxMzFj NTU2MDZhNjUyZWYzYzA5ZmIzYzk3MGNhZGZlY2RiZTIzMDc0M2IiIHRhcmdldD0iX2JsYW5rIj48 aW1nIGNsYXNzPSJkZXZpY2VXaWR0aCIgc3JjPSJodHRwczovL2luZm8ubmgtaG90ZWxzLmNvbS9j YW1wYWlnbi8yMDI1LzEwbWluaG90ZXh0ZXhwL2Jhbmdrb2suZ2lmIiBib3JkZXI9IjAiIGFsdD0i ICIgd2lkdGg9IjEwMCUiIHN0eWxlPSJkaXNwbGF5OiBibG9jazsgbWFyZ2luOiAwIGF1dG87Ij48 L2E+PC90ZD4KPC90cj4KPHRyPgo8dGQgaGVpZ2h0PSIyNSIgc3R5bGU9ImZvbnQtc2l6ZTogMXB4 OyBsaW5lLWhlaWdodDogMXB4OyI+Jm5ic3A7PC90ZD4KPC90cj4KPHRyPgo8dGQ+Cjx0YWJsZSBj bGFzcz0iZGV2aWNlV2lkdGgiIHdpZHRoPSI5MCUiIGJnY29sb3I9IiNmYWY3ZjIiIGFsaWduPSJj ZW50ZXIiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIj4KPHRib2R5 Pgo8dHI+Cjx0ZCBhbGlnbj0iY2VudGVyIiBzdHlsZT0iY29sb3I6ICMxMzIxM2M7IGZvbnQtc2l6 ZTogMjBweDsgbGluZS1oZWlnaHQ6IDI3cHg7IHRleHQtYWxpZ246IGNlbnRlcjsiPjxzcGFuIHN0 eWxlPSJmb250LWZhbWlseTogQXJpYWw7IGZvbnQtd2VpZ2h0OiBib2xkOyI+QmFuZ2tvayBCZXlv bmQgPGJyIGNsYXNzPSJkZXZpY2VIaWRlIj50aGUmbmJzcDtPcmRpbmFyeSA8L3NwYW4+PC90ZD4K PC90cj4KPHRyPgo8dGQgaGVpZ2h0PSIxNSIgc3R5bGU9ImZvbnQtc2l6ZTogMXB4OyBsaW5lLWhl aWdodDogMXB4OyI+Jm5ic3A7PC90ZD4KPC90cj4KPHRyPgo8dGQgYWxpZ249ImNlbnRlciIgc3R5 bGU9ImNvbG9yOiAjMTMyMTNjOyBmb250LXNpemU6IDE4cHg7IGxpbmUtaGVpZ2h0OiAyMnB4OyB0 ZXh0LWFsaWduOiBjZW50ZXI7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IFNpdGthIEJhbm5l ciBSZWd1bGFyOyI+U3RlcCBvZmYgdGhlIHRvdXJpc3QgdHJhaWwgYW5kIGRpdmUgaW50byBjcmVh dGl2ZSB3b3Jrc2hvcHMsIGJ1enppbmcgZGlzdHJpY3RzIGFuZCByb29mdG9wIHN1cnByaXNlcyBm b3IgYSBzaWRlIG9mIEJhbmdrb2sgZmV3IGV2ZXImbmJzcDtzZWUuPC9zcGFuPjwvdGQ+CjwvdHI+ Cjx0cj4KPHRkIGhlaWdodD0iMjUiIHN0eWxlPSJmb250LXNpemU6IDFweDsgbGluZS1oZWlnaHQ6 IDFweDsiPiZuYnNwOzwvdGQ+CjwvdHI+Cjx0cj4KPHRkPgo8dGFibGUgY2xhc3M9ImJ0biIgYWxp Z249ImNlbnRlciIgc3R5bGU9ImJveC1zaXppbmc6IGJvcmRlci1ib3g7IGJvcmRlci1jb2xsYXBz ZTogc2VwYXJhdGUgIWltcG9ydGFudDsgbWFyZ2luLWxlZnQ6IGF1dG87IG1hcmdpbi1yaWdodDog YXV0bzsgd2lkdGg6IGF1dG87IiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGlu Zz0iMCI+Cjx0Ym9keT4KPHRyPgo8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJjZW50ZXIiIHN0 eWxlPSJiYWNrZ3JvdW5kOiAjMTMyMTNjOyBib3JkZXItcmFkaXVzOiAxcHg7IGJveC1zaXppbmc6 IGJvcmRlci1ib3g7IHRleHQtYWxpZ246IGNlbnRlcjsgdmVydGljYWwtYWxpZ246IHRvcDsiPjxh IHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciIgaHJlZj0iaHR0cHM6Ly9kaWdpdGFsLm5oLWhvdGVs cy5jb206NDQzL3NhcC9wdWJsaWMvY3Vhbi9saW5rLzEwMC9DQ0ZGQ0IyMTMwQ0YyMDZENTc0MzE1 Q0Y0MzJGQTQxM0U2MDk2NEQxP19WXz0yJl9LMTFfPTdCOTI0MkU3MEM3RjIxM0Q2MTU0MUYyODRE N0IzMDUyRjk3QTYwNjgmX0w1NEFEMUYyMDRfPWMyTmxibUZ5YVc4OVRVeERVRWNtZEdGeVoyVjBQ V2gwZEhCek9pOHZkM2QzTG0xcGJtOXlhRzkwWld4ekxtTnZiUzlsYmk5aWJHOW5MM0JzWVdObGN5 OWlZVzVuYTI5ckwyWjFiaTEwYUdsdVozTXRkRzh0Wkc4L2RYUnRYM052ZFhKalpUMXVaWGR6YkdW MGRHVnlKblYwYlY5dFpXUnBkVzA5WlcxaGFXd21kWFJ0WDJOaGJYQmhhV2R1UFdWdFlXbHNhVzVu WDJGdFpXRmZNakF5TlZFMExURXpNVEJmUlZWQlRTMVBZM1F0UlhoMGNtRnZjbVJwYm1GeWVWOU5T RjlGUkUxZlJVNG1jMkZ3TFc5MWRHSnZkVzVrTFdsa1BVTkRSa1pEUWpJeE16QkRSakl3TmtRMU56 UXpNVFZEUmpRek1rWkJOREV6UlRZd09UWTBSREUmX0sxM189MzY1Jl9LMTRfPTNkMzVhMGQ1N2Jk MmE2Yzg0MDU0ODM0OTFmYmIwNzM3ZGY2NDQ5ZjkwNDZlOGE5NGE4ZjViZDhlODg5MmE3M2MiIHRh cmdldD0iX2JsYW5rIiB0aXRsZT0iQnV0dG9uIiBjbGFzcz0iZGV2aWNlTV90ZXh0MTAiIHN0eWxl PSJiYWNrZ3JvdW5kOiAjMTMyMTNjOyBib3JkZXI6IDZweCBzb2xpZCAjMTMyMTNjOyBib3gtc2l6 aW5nOiBib3JkZXItYm94OyBjb2xvcjogI2ZmZmZmZjsgY3Vyc29yOiBwb2ludGVyOyBkaXNwbGF5 OiBibG9jazsgZm9udC1zaXplOiAxNnB4OyBwYWRkaW5nOiA1cHggMTBweCA1cHggMTBweDsgbWFy Z2luOiAwOyBtc28tcGFkZGluZy1hbHQ6IDY7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgdGV4dC10 cmFuc2Zvcm06IHVwcGVyY2FzZTsgZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOyI+PCEt LVtpZiBtc29dPiZuYnNwOyZ6d25qOyZuYnNwOyZ6d25qOyZuYnNwOyZ6d25qOyZuYnNwOyZ6d25q OyZuYnNwOyZ6d25qOyZuYnNwOyZ6d25qOyZuYnNwOyZ6d25qOyZuYnNwOyZ6d25qOzwhW2VuZGlm XS0tPlRSQVZFTCBCRVlPTkQ8IS0tW2lmIG1zb10+Jm5ic3A7Jnp3bmo7Jm5ic3A7Jnp3bmo7Jm5i c3A7Jnp3bmo7Jm5ic3A7Jnp3bmo7Jm5ic3A7Jnp3bmo7Jm5ic3A7Jnp3bmo7Jm5ic3A7Jnp3bmo7 Jm5ic3A7Jnp3bmo7PCFbZW5kaWZdLS0+PC9hPjwvdGQ+CjwvdHI+CjwvdGJvZHk+CjwvdGFibGU+ CjwvdGQ+CjwvdHI+Cjx0cj4KPHRkIGhlaWdodD0iMzAiIHN0eWxlPSJmb250LXNpemU6IDFweDsg bGluZS1oZWlnaHQ6IDFweDsiPiZuYnNwOzwvdGQ+CjwvdHI+CjwvdGJvZHk+CjwvdGFibGU+Cjwv dGQ+CjwvdHI+CjwvdGJvZHk+CjwvdGFibGU+CjwhLS0gL3JpZ2h0IC0tPjwvdGQ+CjwvdHI+Cjx0 cj4KPHRkIGhlaWdodD0iMjUiIHN0eWxlPSJmb250LXNpemU6IDFweDsgbGluZS1oZWlnaHQ6IDFw eDsiPiZuYnNwOzwvdGQ+CjwvdHI+CjwvdGJvZHk+CjwvdGFibGU+CjwvdGQ+CjwvdHI+CjwvdGJv ZHk+CjwvdGFibGU+CjwhLS0vUm93IDEtLT4KPHRhYmxlIGNsYXNzPSJkZXZpY2VXaWR0aFRleHQi IHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBj ZWxscGFkZGluZz0iMCI+Cjx0Ym9keSBhbGlnbj0iY2VudGVyIj4KPHRyPgo8dGQgaGVpZ2h0PSIz MCIgc3R5bGU9ImZvbnQtc2l6ZTogMXB4OyBsaW5lLWhlaWdodDogMXB4OyI+Jm5ic3A7PC90ZD4K PC90cj4KPC90Ym9keT4KPC90YWJsZT4KPCEtLUJMT0NLIEUgQk9SREVSLS0+Cjx0YWJsZSBjbGFz cz0iZGV2aWNlV2lkdGgiIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIiBib3JkZXI9IjAiIGNl bGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+Cjx0Ym9keT4KPHRyPgo8dGQ+Cjx0YWJsZSBj bGFzcz0iZGV2aWNlV2lkdGgiIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIiBib3JkZXI9IjAi IGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgYmdjb2xvcj0iI2ZmZmZmZiI+Cjx0Ym9k eT4KPHRyPgo8dGQgaGVpZ2h0PSIwIiBzdHlsZT0iZm9udC1zaXplOiAxcHg7IGxpbmUtaGVpZ2h0 OiAxcHg7Ij4mbmJzcDs8L3RkPgo8L3RyPgo8dHI+Cjx0ZCBhbGlnbj0iY2VudGVyIj48YSByZWw9 Im5vb3BlbmVyIG5vcmVmZXJyZXIiIGhyZWY9Imh0dHBzOi8vZGlnaXRhbC5uaC1ob3RlbHMuY29t OjQ0My9zYXAvcHVibGljL2N1YW4vbGluay8xMDAvQ0NGRkNCMjEzMENGMjA2RDU3NDMxNUNGNDMy RkE0MTNFNjA5NjREMT9fVl89MiZfSzExXz1DOTFERjNFM0UwMTU3MzcyMTI1OTc3RTUxRDBBQ0VC QjFFMzg2NzBCJl9MNTRBRDFGMjA0Xz1jMk5sYm1GeWFXODlUVXhEVUVjbWRHRnlaMlYwUFdoMGRI QnpPaTh2ZDNkM0xtMXBibTl5YUc5MFpXeHpMbU52YlM5bGJpOWliRzluTDNSeVlYWmxiQzEwZVhC bGN5OTFibWx4ZFdVdGJIVjRkWEo1TFhSeVlYWmxiQzFsZUhCbGNtbGxibU5sY3o5MWRHMWZjMjkx Y21ObFBXNWxkM05zWlhSMFpYSW1kWFJ0WDIxbFpHbDFiVDFsYldGcGJDWjFkRzFmWTJGdGNHRnBa MjQ5WlcxaGFXeHBibWRmWVcxbFlWOHlNREkxVVRRdE1UTXhNRjlGVlVGTkxVOWpkQzFGZUhSeVlX OXlaR2x1WVhKNVgwMUlYMFZFVFY5RlRpWnpZWEF0YjNWMFltOTFibVF0YVdROVEwTkdSa05DTWpF ek1FTkdNakEyUkRVM05ETXhOVU5HTkRNeVJrRTBNVE5GTmpBNU5qUkVNUSZfSzEzXz0zNjUmX0sx NF89NjcwYmNkZmVkN2FkNWRlNzZhNmE3NWJjNGJhNjI3NTRkYmRlZWZiMmRkNjg1ZTEzM2JkOWM3 ZjlkYWI2ZTk1OCIgdGFyZ2V0PSJfYmxhbmsiIHRpdGxlPSIgIj48aW1nIGNsYXNzPSJkZXZpY2VX aWR0aFRleHQiIHNyYz0iaHR0cHM6Ly9pbmZvLm5oLWhvdGVscy5jb20vY2FtcGFpZ24vMjAyNS8x MG1pbmhvdGV4dGV4cC90aW1lLmdpZiIgYm9yZGVyPSIwIiBhbHQ9IiAiIHRpdGxlPSIgIiB3aWR0 aD0iNjUwIiBzdHlsZT0iZGlzcGxheTogYmxvY2s7IG1hcmdpbjogMCBhdXRvOyBvcGFjaXR5OiAx OyI+PC9hPjwvdGQ+CjwvdHI+CjwvdGJvZHk+CjwvdGFibGU+CjwvdGQ+CjwvdHI+CjwvdGJvZHk+ CjwvdGFibGU+Cjx0YWJsZSBjbGFzcz0iZGV2aWNlV2lkdGgiIGJvcmRlcj0iMCIgY2VsbHNwYWNp bmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iOTAlIiBiZ2NvbG9yPSIjZmZmZmZmIiBhbGln bj0iY2VudGVyIj4KPHRib2R5Pgo8dHI+Cjx0ZD4KPHRhYmxlIGNsYXNzPSJkZXZpY2VXaWR0aFRl eHQiIHdpZHRoPSI5MCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIw IiBhbGlnbj0iY2VudGVyIj4KPHRib2R5Pgo8dHI+Cjx0ZCBoZWlnaHQ9IjI1IiBzdHlsZT0iZm9u dC1zaXplOiAxcHg7IGxpbmUtaGVpZ2h0OiAxcHg7Ij4mbmJzcDs8L3RkPgo8L3RyPgo8dHI+Cjx0 ZCBhbGlnbj0iY2VudGVyIiBzdHlsZT0iY29sb3I6ICMxMzIxM2M7IGZvbnQtc2l6ZTogMjJweDsg dGV4dC1hbGlnbjogY2VudGVyOyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBBcmlhbDsgZm9u dC13ZWlnaHQ6IGJvbGQ7Ij5UYWtlIFRpbWUgZm9yIGEgTGl0dGxlIEluZHVsZ2VuY2UgPC9zcGFu PjwvdGQ+CjwvdHI+Cjx0cj4KPHRkIGhlaWdodD0iMjAiIHN0eWxlPSJmb250LXNpemU6IDFweDsg bGluZS1oZWlnaHQ6IDFweDsiPiZuYnNwOzwvdGQ+CjwvdHI+Cjx0cj4KPHRkIGFsaWduPSJjZW50 ZXIiIHN0eWxlPSJjb2xvcjogIzEzMjEzYzsgZm9udC1zaXplOiAxOHB4OyBsaW5lLWhlaWdodDog MjJweDsgdGV4dC1hbGlnbjogY2VudGVyOyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBTaXRr YSBCYW5uZXIgUmVndWxhcjsiPkxpdmUgYSBsaXR0bGUgYW5kIGluZHVsZ2UgeW91cnNlbGYgaW4g YSBiaXQgb2YgZ2xvYmFsIGRpbmluZywgdHJhdmVsIHNob3BwaW5nIGFuZCBmYW1pbHkgYWR2ZW50 dXJlcyBhcm91bmQgdGhlIHdvcmxkLjwvc3Bhbj48L3RkPgo8L3RyPgo8dHI+Cjx0ZCBoZWlnaHQ9 IjAiIHN0eWxlPSJmb250LXNpemU6IDFweDsgbGluZS1oZWlnaHQ6IDFweDsiPiZuYnNwOzwvdGQ+ CjwvdHI+CjwvdGJvZHk+CjwvdGFibGU+CjwvdGQ+CjwvdHI+Cjx0cj4KPHRkIGhlaWdodD0iMjUi IHN0eWxlPSJmb250LXNpemU6IDFweDsgbGluZS1oZWlnaHQ6IDFweDsiPiZuYnNwOzwvdGQ+Cjwv dHI+CjwvdGJvZHk+CjwvdGFibGU+Cjx0YWJsZSBjbGFzcz0iZGV2aWNlV2lkdGhUZXh0IiB3aWR0 aD0iOTAlIiBhbGlnbj0iY2VudGVyIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFk ZGluZz0iMCIgYmdjb2xvcj0iI2ZmZmZmZiI+Cjx0Ym9keSBhbGlnbj0iY2VudGVyIj4KPHRyPgo8 dGQgaGVpZ2h0PSIwIiBzdHlsZT0iZm9udC1zaXplOiAxcHg7IGxpbmUtaGVpZ2h0OiAxcHg7Ij4m bmJzcDs8L3RkPgo8L3RyPgo8dHI+Cjx0ZD4KPHRhYmxlIGNsYXNzPSJidG4iIGFsaWduPSJjZW50 ZXIiIHN0eWxlPSJib3gtc2l6aW5nOiBib3JkZXItYm94OyBib3JkZXItY29sbGFwc2U6IHNlcGFy YXRlICFpbXBvcnRhbnQ7IG1hcmdpbi1sZWZ0OiBhdXRvOyBtYXJnaW4tcmlnaHQ6IGF1dG87IHdp ZHRoOiBhdXRvOyIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPgo8 dGJvZHk+Cjx0cj4KPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0iY2VudGVyIiBzdHlsZT0iYmFj a2dyb3VuZDogIzEzMjEzYzsgYm9yZGVyLXJhZGl1czogMXB4OyBib3gtc2l6aW5nOiBib3JkZXIt Ym94OyB0ZXh0LWFsaWduOiBjZW50ZXI7IHZlcnRpY2FsLWFsaWduOiB0b3A7Ij48YSByZWw9Im5v b3BlbmVyIG5vcmVmZXJyZXIiIGhyZWY9Imh0dHBzOi8vZGlnaXRhbC5uaC1ob3RlbHMuY29tOjQ0 My9zYXAvcHVibGljL2N1YW4vbGluay8xMDAvQ0NGRkNCMjEzMENGMjA2RDU3NDMxNUNGNDMyRkE0 MTNFNjA5NjREMT9fVl89MiZfSzExXz02MUZEQTBENUYyQzYzNjVBRUQ5QUYyMTUxN0QwMzhEN0VE RDkxOURFJl9MNTRBRDFGMjA0Xz1jMk5sYm1GeWFXODlUVXhEVUVjbWRHRnlaMlYwUFdoMGRIQnpP aTh2ZDNkM0xtMXBibTl5YUc5MFpXeHpMbU52YlM5bGJpOWliRzluTDNSeVlYWmxiQzEwZVhCbGN5 OTFibWx4ZFdVdGJIVjRkWEo1TFhSeVlYWmxiQzFsZUhCbGNtbGxibU5sY3o5MWRHMWZjMjkxY21O bFBXNWxkM05zWlhSMFpYSW1kWFJ0WDIxbFpHbDFiVDFsYldGcGJDWjFkRzFmWTJGdGNHRnBaMjQ5 WlcxaGFXeHBibWRmWVcxbFlWOHlNREkxVVRRdE1UTXhNRjlGVlVGTkxVOWpkQzFGZUhSeVlXOXla R2x1WVhKNVgwMUlYMFZFVFY5RlRpWnpZWEF0YjNWMFltOTFibVF0YVdROVEwTkdSa05DTWpFek1F TkdNakEyUkRVM05ETXhOVU5HTkRNeVJrRTBNVE5GTmpBNU5qUkVNUSZfSzEzXz0zNjUmX0sxNF89 ODk1NTQwY2UzY2RlMjI5MTU2NjEwZjZiMDk1NTM1OWRiOGE3NzA3MmIzMjBkZDNlNjllYTViMzc2 YTYxM2NiNSIgdGFyZ2V0PSJfYmxhbmsiIHRpdGxlPSIgIiBzdHlsZT0iYmFja2dyb3VuZDogIzEz MjEzYzsgYm9yZGVyOiA2cHggc29saWQgIzEzMjEzYzsgYm94LXNpemluZzogYm9yZGVyLWJveDsg Y29sb3I6ICNmZmZmZmY7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogYmxvY2s7IGZvbnQtc2l6 ZTogMTZweDsgcGFkZGluZzogNXB4IDEwcHggNXB4IDEwcHg7IG1hcmdpbjogMDsgbXNvLXBhZGRp bmctYWx0OiA2OyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNh c2U7IGZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjsiPjwhLS1baWYgbXNvXT4mbmJzcDsm enduajsmbmJzcDsmenduajsmbmJzcDsmenduajsmbmJzcDsmenduajsmbmJzcDsmenduajsmbmJz cDsmenduajsmbmJzcDsmenduajsmbmJzcDsmenduajs8IVtlbmRpZl0tLT5JTkRVTEdFIFlPVVJF U0xGPCEtLVtpZiBtc29dPiZuYnNwOyZ6d25qOyZuYnNwOyZ6d25qOyZuYnNwOyZ6d25qOyZuYnNw OyZ6d25qOyZuYnNwOyZ6d25qOyZuYnNwOyZ6d25qOyZuYnNwOyZ6d25qOyZuYnNwOyZ6d25qOzwh W2VuZGlmXS0tPjwvYT48L3RkPgo8L3RyPgo8L3Rib2R5Pgo8L3RhYmxlPgo8L3RkPgo8L3RyPgo8 dHI+Cjx0ZCBoZWlnaHQ9IjAiIHN0eWxlPSJmb250LXNpemU6IDFweDsgbGluZS1oZWlnaHQ6IDFw eDsiPiZuYnNwOzwvdGQ+CjwvdHI+CjwvdGJvZHk+CjwvdGFibGU+CjwhLS1JTUctLT4KPHRhYmxl IGNsYXNzPSJkZXZpY2VXaWR0aCBkYXJrbW9kZSIgd2lkdGg9IjY1MCIgYWxpZ249ImNlbnRlciIg Ym9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHN0eWxlPSJwYWRkaW5n OiAwOyBtYXJnaW46IDA7IGZvbnQtc2l6ZTogMDsgbGluZS1oZWlnaHQ6IDA7IiBiZ2NvbG9yPSIj ZmZmZmZmIj4KPHRib2R5Pgo8dHI+Cjx0ZD48Y2VudGVyPjxpbWcgY2xhc3M9ImRldmljZVdpZHRo IiBzcmM9Imh0dHBzOi8vaW5mby5uaC1ob3RlbHMuY29tL2NhbXBhaWduLzIwMjUvMTBtaW5ob3Rl eHRleHAvbmV3LnBuZyIgYm9yZGVyPSIwIiBhbHQ9IiAiIHRpdGxlPSIgIiB3aWR0aD0iMzkwIiBz dHlsZT0iZGlzcGxheTogYmxvY2s7IG1hcmdpbjogMDsgb3BhY2l0eTogMTsgcGFkZGluZzogMDsg Zm9udC1zaXplOiAwOyBsaW5lLWhlaWdodDogMDsiPjwvY2VudGVyPjwvdGQ+CjwvdHI+CjwvdGJv ZHk+CjwvdGFibGU+Cjx0YWJsZSBjbGFzcz0iZGV2aWNlV2lkdGgiIGJvcmRlcj0iMCIgY2VsbHNw YWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciIgYmdj b2xvcj0iI2ZmZmZmZiI+Cjx0Ym9keSBhbGlnbj0iY2VudGVyIj4KPHRyPgo8dGQ+Cjx0YWJsZSBj bGFzcz0iZGV2aWNlV2lkdGhUZXh0IiB3aWR0aD0iODAlIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5n PSIwIiBjZWxscGFkZGluZz0iMCIgYWxpZ249ImNlbnRlciI+Cjx0Ym9keT4KPHRyPgo8dGQgaGVp Z2h0PSIwIiBzdHlsZT0iZm9udC1zaXplOiAxcHg7IGxpbmUtaGVpZ2h0OiAxcHg7Ij4mbmJzcDs8 L3RkPgo8L3RyPgo8dHI+Cjx0ZCBhbGlnbj0iY2VudGVyIiBzdHlsZT0iY29sb3I6ICMxMzIxM2M7 IGZvbnQtc2l6ZTogMThweDsgbGluZS1oZWlnaHQ6IDIycHg7IHRleHQtYWxpZ246IGNlbnRlcjsi IGNsYXNzPSJoZWFkbGluZSI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBTaXRrYSBCYW5uZXIg UmVndWxhcjsiPkV4cGxvcmUgbmV3IGFkZGl0aW9ucyB0byB0aGUgZ3Jvd2luZyBNaW5vciBIb3Rl bHMgZmFtaWx5LCBmcm9tIEJyYXppbCB0byBJdGFseSBhbmQmbmJzcDtiZXlvbmQuPC9zcGFuPjwv dGQ+CjwvdHI+Cjx0cj4KPHRkIGhlaWdodD0iMjUiIHN0eWxlPSJmb250LXNpemU6IDFweDsgbGlu ZS1oZWlnaHQ6IDFweDsiPiZuYnNwOzwvdGQ+CjwvdHI+CjwvdGJvZHk+CjwvdGFibGU+CjwvdGQ+ CjwvdHI+CjwvdGJvZHk+CjwvdGFibGU+CjwhLS0gVFdPIENPTFVNTiBIT1RFTCBHUklEIHdpdGgg cmVkdWNlZCBzcGFjZSBiZXR3ZWVuIGNvbHVtbnMgLS0+Cjx0YWJsZSBjbGFzcz0iZGV2aWNlV2lk dGgiIHdpZHRoPSI2NTAiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIw IiBhbGlnbj0iY2VudGVyIiBiZ2NvbG9yPSIjZmZmZmZmIiBzdHlsZT0iYm9yZGVyLWNvbGxhcHNl OiBjb2xsYXBzZTsiPgo8dGJvZHk+Cjx0cj48IS0tIENPTFVNTkEgSVpRVUlFUkRBIC0tPgo8dGQg d2lkdGg9IjMyMCIgdmFsaWduPSJ0b3AiIHN0eWxlPSJwYWRkaW5nLXJpZ2h0OiAxMHB4OyI+Cjx0 YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9 IjAiIHN0eWxlPSJib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyI+Cjx0Ym9keT4KPHRyPgo8dGQg c3R5bGU9InBhZGRpbmctdG9wOiAzcHg7Ij48YSByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiIGhy ZWY9Imh0dHBzOi8vZGlnaXRhbC5uaC1ob3RlbHMuY29tOjQ0My9zYXAvcHVibGljL2N1YW4vbGlu ay8xMDAvQ0NGRkNCMjEzMENGMjA2RDU3NDMxNUNGNDMyRkE0MTNFNjA5NjREMT9fVl89MiZfSzEx Xz1FM0RDMzIzMzhGNEMwMkZDQzIxMkY0NDgwOUVGQkVBQzBBQTBBRjQ1Jl9MNTRBRDFGMjA0Xz1j Mk5sYm1GeWFXODlUVXhEVUVjbWRHRnlaMlYwUFdoMGRIQnpPaTh2ZDNkM0xtMXBibTl5YUc5MFpX eHpMbU52YlM5bGJpOWtaWE4wYVc1aGRHbHZibk12WW5KaGVtbHNMM0JoY21FdmRHbDJiMnhwTFcx aGFXOXlZVzVoTFdKbGJHVnRMWEJoY21FdGFHOTBaV3cvZFhSdFgzTnZkWEpqWlQxdVpYZHpiR1Yw ZEdWeUpuVjBiVjl0WldScGRXMDlaVzFoYVd3bWRYUnRYMk5oYlhCaGFXZHVQV1Z0WVdsc2FXNW5Y MkZ0WldGZk1qQXlOVkUwTFRFek1UQmZSVlZCVFMxUFkzUXRSWGgwY21GdmNtUnBibUZ5ZVY5TlNG OUZSRTFmUlU0bWMyRndMVzkxZEdKdmRXNWtMV2xrUFVORFJrWkRRakl4TXpCRFJqSXdOa1ExTnpR ek1UVkRSalF6TWtaQk5ERXpSVFl3T1RZMFJERSZfSzEzXz0zNjUmX0sxNF89NDU3YmRjMDMwOWZj MmE1M2JiZTc0Y2EzZTk1NzRjNDE1YTM3MmJlMzZmZGJjMThkNWQ0ZGFjM2JhNmJkOWQ1OSIgdGFy Z2V0PSJfYmxhbmsiPjxpbWcgc3JjPSJodHRwczovL2luZm8ubmgtaG90ZWxzLmNvbS9jYW1wYWln bi8yMDI1LzEwbWluaG90ZXh0ZXhwL2JlbGVtLmpwZyIgYWx0PSIiIHdpZHRoPSIxMDAlIiBzdHls ZT0iZGlzcGxheTogYmxvY2s7Ij48L2E+PC90ZD4KPC90cj4KPHRyPgo8dGQgc3R5bGU9InBhZGRp bmctdG9wOiAxMnB4OyI+PGEgcmVsPSJub29wZW5lciBub3JlZmVycmVyIiBocmVmPSJodHRwczov L2RpZ2l0YWwubmgtaG90ZWxzLmNvbTo0NDMvc2FwL3B1YmxpYy9jdWFuL2xpbmsvMTAwL0NDRkZD QjIxMzBDRjIwNkQ1NzQzMTVDRjQzMkZBNDEzRTYwOTY0RDE/X1ZfPTImX0sxMV89NDBGOEZERUVC RTA0MjA0RjRGMTI3NTA5MTc1QTM0NDYyQkVBRTM3MyZfTDU0QUQxRjIwNF89YzJObGJtRnlhVzg5 VFV4RFVFY21kR0Z5WjJWMFBXaDBkSEJ6T2k4dmQzZDNMbTFwYm05eWFHOTBaV3h6TG1OdmJTOWxi aTlrWlhOMGFXNWhkR2x2Ym5NdmFYUmhiSGt2Y205dFpTOXVhRzkzTFhKdmJXRS9kWFJ0WDNOdmRY SmpaVDF1WlhkemJHVjBkR1Z5Sm5WMGJWOXRaV1JwZFcwOVpXMWhhV3dtZFhSdFgyTmhiWEJoYVdk dVBXVnRZV2xzYVc1blgyRnRaV0ZmTWpBeU5WRTBMVEV6TVRCZlJWVkJUUzFQWTNRdFJYaDBjbUZ2 Y21ScGJtRnllVjlOU0Y5RlJFMWZSVTRtYzJGd0xXOTFkR0p2ZFc1a0xXbGtQVU5EUmtaRFFqSXhN ekJEUmpJd05rUTFOelF6TVRWRFJqUXpNa1pCTkRFelJUWXdPVFkwUkRFJl9LMTNfPTM2NSZfSzE0 Xz05NmUxNmI3YjczYjg5YjQxOTExNGIwODkwZDc4YmE1Nzg0ZDEwNjdiN2IwOWQ3OWZjNTc1N2Ji MmE4YmIwMzUzIiB0YXJnZXQ9Il9ibGFuayI+PGltZyBzcmM9Imh0dHBzOi8vaW5mby5uaC1ob3Rl bHMuY29tL2NhbXBhaWduLzIwMjUvMTBtaW5ob3RleHRleHAvcm9tYS5qcGciIGFsdD0iIiB3aWR0 aD0iMTAwJSIgc3R5bGU9ImRpc3BsYXk6IGJsb2NrOyI+PC9hPjwvdGQ+CjwvdHI+Cjx0cj4KPHRk IHN0eWxlPSJwYWRkaW5nLXRvcDogMTJweDsiPjxhIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciIg aHJlZj0iaHR0cHM6Ly9kaWdpdGFsLm5oLWhvdGVscy5jb206NDQzL3NhcC9wdWJsaWMvY3Vhbi9s aW5rLzEwMC9DQ0ZGQ0IyMTMwQ0YyMDZENTc0MzE1Q0Y0MzJGQTQxM0U2MDk2NEQxP19WXz0yJl9L MTFfPTFCMUIzODRBMkQxODZDRkVERjQwQTdFMTE3MzEyMUQ0Mjg3QkVBNjcmX0w1NEFEMUYyMDRf PWMyTmxibUZ5YVc4OVRVeERVRWNtZEdGeVoyVjBQV2gwZEhCek9pOHZkM2QzTG0xcGJtOXlhRzkw Wld4ekxtTnZiUzlsYmk5a1pYTjBhVzVoZEdsdmJuTXZibVYzTFhwbFlXeGhibVF2WVhWamEyeGhi bVF2YjJGcmN5MWhkV05yYkdGdVpDMW9iM1JsYkQ5MWRHMWZjMjkxY21ObFBXNWxkM05zWlhSMFpY SW1kWFJ0WDIxbFpHbDFiVDFsYldGcGJDWjFkRzFmWTJGdGNHRnBaMjQ5WlcxaGFXeHBibWRmWVcx bFlWOHlNREkxVVRRdE1UTXhNRjlGVlVGTkxVOWpkQzFGZUhSeVlXOXlaR2x1WVhKNVgwMUlYMFZF VFY5RlRpWnpZWEF0YjNWMFltOTFibVF0YVdROVEwTkdSa05DTWpFek1FTkdNakEyUkRVM05ETXhO VU5HTkRNeVJrRTBNVE5GTmpBNU5qUkVNUSZfSzEzXz0zNjUmX0sxNF89NDUzZjI5YmEyNjlkM2Jm MTk5NzExMTRhN2ZjN2Q4NTIzNzM4ZTc4MDEwYzRlNjhhNzNlMzY4MTZlY2IxMGY5ZCIgdGFyZ2V0 PSJfYmxhbmsiPjxpbWcgc3JjPSJodHRwczovL2luZm8ubmgtaG90ZWxzLmNvbS9jYW1wYWlnbi8y MDI1LzEwbWluaG90ZXh0ZXhwL2F1Y2suanBnIiBhbHQ9IiIgd2lkdGg9IjEwMCUiIHN0eWxlPSJk aXNwbGF5OiBibG9jazsiPjwvYT48L3RkPgo8L3RyPgo8dHI+Cjx0ZCBzdHlsZT0icGFkZGluZy10 b3A6IDEycHg7Ij48YSByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiIGhyZWY9Imh0dHBzOi8vZGln aXRhbC5uaC1ob3RlbHMuY29tOjQ0My9zYXAvcHVibGljL2N1YW4vbGluay8xMDAvQ0NGRkNCMjEz MENGMjA2RDU3NDMxNUNGNDMyRkE0MTNFNjA5NjREMT9fVl89MiZfSzExXz00QzQxODYwRjU2MDk2 RjBBNTFERjZCOTY5NjMxMjJCNDk2N0M0QkQ3Jl9MNTRBRDFGMjA0Xz1jMk5sYm1GeWFXODlUVXhE VUVjbWRHRnlaMlYwUFdoMGRIQnpPaTh2ZDNkM0xtMXBibTl5YUc5MFpXeHpMbU52YlM5bGJpOWta WE4wYVc1aGRHbHZibk12YVhSaGJIa3ZjR0ZzWlhKdGJ5OXVhQzFqYjJ4c1pXTjBhVzl1TFhCaGJH VnliVzh0Y0dGc1lYcDZieTF6YVhSaGJtOC9kWFJ0WDNOdmRYSmpaVDF1WlhkemJHVjBkR1Z5Sm5W MGJWOXRaV1JwZFcwOVpXMWhhV3dtZFhSdFgyTmhiWEJoYVdkdVBXVnRZV2xzYVc1blgyRnRaV0Zm TWpBeU5WRTBMVEV6TVRCZlJWVkJUUzFQWTNRdFJYaDBjbUZ2Y21ScGJtRnllVjlOU0Y5RlJFMWZS VTRtYzJGd0xXOTFkR0p2ZFc1a0xXbGtQVU5EUmtaRFFqSXhNekJEUmpJd05rUTFOelF6TVRWRFJq UXpNa1pCTkRFelJUWXdPVFkwUkRFJl9LMTNfPTM2NSZfSzE0Xz1jMTYxYjJmMDA2ODkyMTNlM2Y4 ZTc2ZmMzZjAzZGFkYmFmYjRiMjdhMmM2YzQ2Yjc3NmRiZGVmYWFkNTE0MGRiIiB0YXJnZXQ9Il9i bGFuayI+PGltZyBzcmM9Imh0dHBzOi8vaW5mby5uaC1ob3RlbHMuY29tL2NhbXBhaWduLzIwMjUv MTBtaW5ob3RleHRleHAvcGFsZXJtby5qcGciIGFsdD0iIiB3aWR0aD0iMTAwJSIgc3R5bGU9ImRp c3BsYXk6IGJsb2NrOyI+PC9hPjwvdGQ+CjwvdHI+CjwvdGJvZHk+CjwvdGFibGU+CjwvdGQ+Cjwh LS0gQ09MVU1OQSBERVJFQ0hBIC0tPgo8dGQgd2lkdGg9IjMyMCIgdmFsaWduPSJ0b3AiIHN0eWxl PSJwYWRkaW5nLWxlZnQ6IDBweDsiPgo8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2Vs bHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBzdHlsZT0iYm9yZGVyLWNvbGxhcHNlOiBjb2xs YXBzZTsiPgo8dGJvZHk+Cjx0cj4KPHRkPjxhIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciIgaHJl Zj0iaHR0cHM6Ly9kaWdpdGFsLm5oLWhvdGVscy5jb206NDQzL3NhcC9wdWJsaWMvY3Vhbi9saW5r LzEwMC9DQ0ZGQ0IyMTMwQ0YyMDZENTc0MzE1Q0Y0MzJGQTQxM0U2MDk2NEQxP19WXz0yJl9LMTFf PTE0MTAyMkIwMzRDRjdDQzlERDM0M0EyNjI5Q0VFOTFGMUQ1QkNCQ0EmX0w1NEFEMUYyMDRfPWMy TmxibUZ5YVc4OVRVeERVRWNtZEdGeVoyVjBQV2gwZEhCek9pOHZkM2QzTG0xcGJtOXlhRzkwWld4 ekxtTnZiUzlsYmk5a1pYTjBhVzVoZEdsdmJuTXZjMlY1WTJobGJHeGxjeTl0WVdobEwyRjJZVzVw TFdKaGNtSmhjbTl1Y3kxelpYbGphR1ZzYkdWekxYSmxjMjl5ZEQ5MWRHMWZjMjkxY21ObFBXNWxk M05zWlhSMFpYSW1kWFJ0WDIxbFpHbDFiVDFsYldGcGJDWjFkRzFmWTJGdGNHRnBaMjQ5WlcxaGFX eHBibWRmWVcxbFlWOHlNREkxVVRRdE1UTXhNRjlGVlVGTkxVOWpkQzFGZUhSeVlXOXlaR2x1WVhK NVgwMUlYMFZFVFY5RlRpWnpZWEF0YjNWMFltOTFibVF0YVdROVEwTkdSa05DTWpFek1FTkdNakEy UkRVM05ETXhOVU5HTkRNeVJrRTBNVE5GTmpBNU5qUkVNUSZfSzEzXz0zNjUmX0sxNF89M2E2ZTZj NDZkMDhmZTgxZGQzOGQ4NjBlNWZmNjdlOGZlYmJkYWQzOGEyMzBjZDk2NmY2NDliZDg0YTI4Y2Ix YiIgdGFyZ2V0PSJfYmxhbmsiPjxpbWcgc3JjPSJodHRwczovL2luZm8ubmgtaG90ZWxzLmNvbS9j YW1wYWlnbi8yMDI1LzEwbWluaG90ZXh0ZXhwL3NleWNoZWxsZXMuanBnIiBhbHQ9IiIgd2lkdGg9 IjEwMCUiIHN0eWxlPSJkaXNwbGF5OiBibG9jazsiPjwvYT48L3RkPgo8L3RyPgo8dHI+Cjx0ZCBz dHlsZT0icGFkZGluZy10b3A6IDlweDsiPjxhIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciIgaHJl Zj0iaHR0cHM6Ly9kaWdpdGFsLm5oLWhvdGVscy5jb206NDQzL3NhcC9wdWJsaWMvY3Vhbi9saW5r LzEwMC9DQ0ZGQ0IyMTMwQ0YyMDZENTc0MzE1Q0Y0MzJGQTQxM0U2MDk2NEQxP19WXz0yJl9LMTFf PUQ0NTFGMTM0MkIwMjEyNzgwRjdDMjRFNzEzQzFBODM4RjYyM0Q3NzYmX0w1NEFEMUYyMDRfPWMy TmxibUZ5YVc4OVRVeERVRWNtZEdGeVoyVjBQV2gwZEhCek9pOHZkM2QzTG0xcGJtOXlhRzkwWld4 ekxtTnZiUzlsYmk5a1pYTjBhVzVoZEdsdmJuTXZZWFZ6ZEhKaGJHbGhMMk55WVdOclpXNWlZV05y TDI5aGEzTXRiR0ZyWlMxamNtRmphMlZ1WW1GamF5MXlaWE52Y25RL2RYUnRYM052ZFhKalpUMXVa WGR6YkdWMGRHVnlKblYwYlY5dFpXUnBkVzA5WlcxaGFXd21kWFJ0WDJOaGJYQmhhV2R1UFdWdFlX bHNhVzVuWDJGdFpXRmZNakF5TlZFMExURXpNVEJmUlZWQlRTMVBZM1F0UlhoMGNtRnZjbVJwYm1G eWVWOU5TRjlGUkUxZlJVNG1jMkZ3TFc5MWRHSnZkVzVrTFdsa1BVTkRSa1pEUWpJeE16QkRSakl3 TmtRMU56UXpNVFZEUmpRek1rWkJOREV6UlRZd09UWTBSREUmX0sxM189MzY1Jl9LMTRfPTkzYmM5 NzZlNWVlZjRiY2FiOTgyNTM4MDZmMjIyNDYxZDg0ZTRmMjE3M2FkYmYwY2Q3NTFjYWI3ZjNkNmRl NmUiIHRhcmdldD0iX2JsYW5rIj48aW1nIHNyYz0iaHR0cHM6Ly9pbmZvLm5oLWhvdGVscy5jb20v Y2FtcGFpZ24vMjAyNS8xMG1pbmhvdGV4dGV4cC9jcmFja2VuYmFjay5qcGciIGFsdD0iIiB3aWR0 aD0iMTAwJSIgc3R5bGU9ImRpc3BsYXk6IGJsb2NrOyI+PC9hPjwvdGQ+CjwvdHI+Cjx0cj4KPHRk IHN0eWxlPSJwYWRkaW5nLXRvcDogOXB4OyI+PGEgcmVsPSJub29wZW5lciBub3JlZmVycmVyIiBo cmVmPSJodHRwczovL2RpZ2l0YWwubmgtaG90ZWxzLmNvbTo0NDMvc2FwL3B1YmxpYy9jdWFuL2xp bmsvMTAwL0NDRkZDQjIxMzBDRjIwNkQ1NzQzMTVDRjQzMkZBNDEzRTYwOTY0RDE/X1ZfPTImX0sx MV89QURCMDIzMjgxNTU4OTFBMDVCOEQzRkY2Qzc4QzM5NTlCQkRFRERCMyZfTDU0QUQxRjIwNF89 YzJObGJtRnlhVzg5VFV4RFVFY21kR0Z5WjJWMFBXaDBkSEJ6T2k4dmQzZDNMbTFwYm05eWFHOTBa V3h6TG1OdmJTOWxiaTlrWlhOMGFXNWhkR2x2Ym5NdlpHVnViV0Z5YXk5amIzQmxibWhoWjJWdUwy NW9MV052Y0dWdWFHRm5aVzR0WjNKaGJtUXRhbTloYm01bFAzVjBiVjl6YjNWeVkyVTlibVYzYzJ4 bGRIUmxjaVoxZEcxZmJXVmthWFZ0UFdWdFlXbHNKblYwYlY5allXMXdZV2xuYmoxbGJXRnBiR2x1 WjE5aGJXVmhYekl3TWpWUk5DMHhNekV3WDBWVlFVMHRUMk4wTFVWNGRISmhiM0prYVc1aGNubGZU VWhmUlVSTlgwVk9Kbk5oY0MxdmRYUmliM1Z1WkMxcFpEMURRMFpHUTBJeU1UTXdRMFl5TURaRU5U YzBNekUxUTBZME16SkdRVFF4TTBVMk1EazJORVF4Jl9LMTNfPTM2NSZfSzE0Xz0wODQ5NWQzMWJk NzUwYWFjZTA1Y2FlMzEzMGU5YzdhMmRlZTkyOTM4OTgwODc3ZjA3MzhkZDg0ZTRmYzdlOWM5IiB0 YXJnZXQ9Il9ibGFuayI+PGltZyBzcmM9Imh0dHBzOi8vaW5mby5uaC1ob3RlbHMuY29tL2NhbXBh aWduLzIwMjUvMTBtaW5ob3RleHRleHAvY29wZW5oYWdlbi5qcGciIGFsdD0iIiB3aWR0aD0iMTAw JSIgc3R5bGU9ImRpc3BsYXk6IGJsb2NrOyI+PC9hPjwvdGQ+CjwvdHI+Cjx0cj4KPHRkIGhlaWdo dD0iMjAiIHN0eWxlPSJmb250LXNpemU6IDA7IGxpbmUtaGVpZ2h0OiAwOyI+Jm5ic3A7PC90ZD4K PC90cj4KPC90Ym9keT4KPC90YWJsZT4KPC90ZD4KPC90cj4KPC90Ym9keT4KPC90YWJsZT48L2Rp dj48IS0tW2lmIG1zb10+PC90ZD48L3RyPjwvdGFibGU+PCFbZW5kaWZdLS0+PCEtLVtpZiBtc29d Pjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgYWxpZ249 ImxlZnQiIHN0eWxlPSJtc28tdGFibGUtbHNwYWNlOjBwdDsgIG1zby10YWJsZS1yc3BhY2U6MHB0 OyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyB3aWR0aDogMTAwJSI+PHRyPjx0ZCBzdHlsZT0i d2lkdGg6IDEwMCU7Ij48IVtlbmRpZl0tLT48ZGl2IHN0eWxlPSJmbG9hdDogbGVmdDsgd2lkdGg6 IDEwMCUiIGNsYXNzPSJzYXBNa3RCbG9jayI+4oCLPCEtLU1EIEJFTkVGSVRTIFggTUVNQkVSLS0+ Cjx0YWJsZSBjbGFzcz0iZGV2aWNlV2lkdGgiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNl bGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI2U2ZGZjZSIgYWxpZ249ImNlbnRl ciI+Cjx0Ym9keT4KPHRyPgo8dGQ+Cjx0YWJsZSB3aWR0aD0iOTAlIiBhbGlnbj0iY2VudGVyIiBi b3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+Cjx0Ym9keT4KPHRyPgo8 dGQgaGVpZ2h0PSI0MCIgc3R5bGU9ImZvbnQtc2l6ZTogMXB4OyBsaW5lLWhlaWdodDogMXB4OyI+ Jm5ic3A7PC90ZD4KPC90cj4KPHRyPgo8dGQgYWxpZ249ImNlbnRlciI+PGEgcmVsPSJub29wZW5l ciBub3JlZmVycmVyIiBocmVmPSJodHRwczovL2RpZ2l0YWwubmgtaG90ZWxzLmNvbTo0NDMvc2Fw L3B1YmxpYy9jdWFuL2xpbmsvMTAwL0NDRkZDQjIxMzBDRjIwNkQ1NzQzMTVDRjQzMkZBNDEzRTYw OTY0RDE/X1ZfPTImX0sxMV89N0UzNjdGMzY2NTFBRjI5RTNEQkMzMDgwNDY0NUY2NzRCQUJDMzlE QiZfTDU0QUQxRjIwNF89YzJObGJtRnlhVzg5VFV4RFVFY21kR0Z5WjJWMFBXaDBkSEJ6T2k4dmQz ZDNMbTFwYm05eWFHOTBaV3h6TG1OdmJTOWxiaTlzYjNsaGJIUjVQM1YwYlY5emIzVnlZMlU5Ym1W M2MyeGxkSFJsY2laMWRHMWZiV1ZrYVhWdFBXVnRZV2xzSm5WMGJWOWpZVzF3WVdsbmJqMWxiV0Zw YkdsdVoxOXBiblJsY201aGJDWjFkRzFmZEdWeWJUMUZWVUZOTWpBeU5XaGxZV1JsY21admIzUmxj aVp6WVhBdGIzVjBZbTkxYm1RdGFXUTlRME5HUmtOQ01qRXpNRU5HTWpBMlJEVTNORE14TlVOR05E TXlSa0UwTVRORk5qQTVOalJFTVEmX0sxM189MzY1Jl9LMTRfPWFkYmVmZGMxNzAxODk3Y2UwNTg5 NjVlZTA5OWQwODRmNDg4YTIyNTFjMDlhYWVjYzRkNDRkMjg3NTZjMzQzYTYiIHRhcmdldD0iX2Js YW5rIiB0aXRsZT0iTWlub3IgRElTQ09WRVJZIj48aW1nIGNsYXNzPSJkZXZpY2VXaWR0aDcwIiBz cmM9Imh0dHBzOi8vaW5mby5uaC1ob3RlbHMuY29tL2NhbXBhaWduLzIwMjUvMDBtaW5vcnRlbXBs YXRlL21kLXRhZ2xpbmUtYmx1ZS5wbmciIGJvcmRlcj0iMCIgYWx0PSJNaW5vciBESVNDT1ZFUlki IHRpdGxlPSJNaW5vciBESVNDT1ZFUlkiIHdpZHRoPSIzODAiIHN0eWxlPSJkaXNwbGF5OiBibG9j azsgbWFyZ2luOiAwIGF1dG87IG9wYWNpdHk6IDE7IiAvPjwvYT48L3RkPgo8L3RyPgo8L3Rib2R5 Pgo8L3RhYmxlPgo8L3RkPgo8L3RyPgo8dHI+Cjx0ZD4KPHRhYmxlIHdpZHRoPSI4NSUiIGJvcmRl cj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBhbGlnbj0iY2VudGVyIj4KPHRi b2R5Pgo8dHI+Cjx0ZCBoZWlnaHQ9IjI1IiBzdHlsZT0iZm9udC1zaXplOiAxcHg7IGxpbmUtaGVp Z2h0OiAxcHg7Ij4mbmJzcDs8L3RkPgo8L3RyPgo8dHI+Cjx0ZCBhbGlnbj0iY2VudGVyIiBzdHls ZT0iY29sb3I6ICMxMzIxM2M7IGZvbnQtc2l6ZTogMTRweDsgbGluZS1oZWlnaHQ6IDE2cHg7IHRl eHQtYWxpZ246IGNlbnRlcjsiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogQXJpYWw7Ij5Zb3Vy IG5leHQgZGlyZWN0IGJvb2tpbmcgY29tZXMgd2l0aCBtb3JlIDxiciBjbGFzcz0iZGV2aWNlSGlk ZSIgLz5tZW1iZXJzLW9ubHkgYmVuZWZpdHM8L3NwYW4+PC90ZD4KPC90cj4KPC90Ym9keT4KPC90 YWJsZT4KPC90ZD4KPC90cj4KPHRyPgo8dGQgaGVpZ2h0PSIzNSIgc3R5bGU9ImZvbnQtc2l6ZTog MXB4OyBsaW5lLWhlaWdodDogMXB4OyI+Jm5ic3A7PC90ZD4KPC90cj4KPC90Ym9keT4KPC90YWJs ZT4KPCEtLU1FTUJFUiBCRU5FRklUUy0tPiA8IS0tUm93IDEtLT4KPHRhYmxlIGNsYXNzPSJkZXZp Y2VXaWR0aCIgd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiIGJvcmRlcj0iMCIgY2VsbHNwYWNp bmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBiZ2NvbG9yPSIjZTZkZmNlIj4KPHRib2R5Pgo8dHI+Cjx0 ZCBoZWlnaHQ9IjEwIiBzdHlsZT0iZm9udC1zaXplOiAxcHg7IGxpbmUtaGVpZ2h0OiAxcHg7Ij4m bmJzcDs8L3RkPgo8L3RyPgo8dHI+Cjx0ZD4KPHRhYmxlIGNsYXNzPSJkZXZpY2VXaWR0aDcwIiB3 aWR0aD0iNjAlIiBhbGlnbj0iY2VudGVyIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxs c3BhY2luZz0iMCI+Cjx0Ym9keSBhbGlnbj0iY2VudGVyIj4KPHRyPgo8dGQ+Cjx0YWJsZSB3aWR0 aD0iMTAwJSIgYWxpZ249ImNlbnRlciIgc3R5bGU9ImJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7 IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxs c3BhY2luZz0iMCI+Cjx0Ym9keSBhbGlnbj0iY2VudGVyIj4KPHRyPgo8dGQgYWxpZ249ImNlbnRl ciIgd2lkdGg9IjEyNSIgc3R5bGU9ImJveC1zaXppbmc6IGJvcmRlci1ib3g7Ij48IS0tTEVGVC0t PiA8IS0tQm90w7NuIC0tPiA8aW1nIGNsYXNzPSJkZXZpY2VXaWR0aFRleHQiIHNyYz0iaHR0cHM6 Ly9pbmZvLm5oLWhvdGVscy5jb20vY2FtcGFpZ24vMjAyNS8wM2Rpc2NvdmVyeWxhdW5jaC9TSUxW RVIucG5nIiBib3JkZXI9IjAiIGFsdD0iSW1hZ2UiIHRpdGxlPSJJbWFnZSIgd2lkdGg9IjEyNSIg c3R5bGU9ImRpc3BsYXk6IGJsb2NrOyBtYXJnaW46IDAgYXV0bzsgb3BhY2l0eTogMTsiIC8+Cjx0 YWJsZSBjbGFzcz0iZGV2aWNlV2lkdGhUZXh0IiB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciIg Ym9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPgo8dGJvZHkgYWxpZ249 ImNlbnRlciI+Cjx0cj4KPHRkIGhlaWdodD0iMTAiIHN0eWxlPSJmb250LXNpemU6IDFweDsgbGlu ZS1oZWlnaHQ6IDFweDsiPiZuYnNwOzwvdGQ+CjwvdHI+Cjx0cj4KPHRkIGFsaWduPSJjZW50ZXIi IHN0eWxlPSJjb2xvcjogIzEzMjEzYzsgZm9udC1zaXplOiAxMnB4OyBsaW5lLWhlaWdodDogMTRw eDsgdGV4dC1hbGlnbjogY2VudGVyOyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBBcmlhbDsi PlNJTFZFUiBUaWVyPC9zcGFuPjwvdGQ+CjwvdHI+Cjx0cj4KPHRkIGhlaWdodD0iMjUiIHN0eWxl PSJmb250LXNpemU6IDFweDsgbGluZS1oZWlnaHQ6IDFweDsiPiZuYnNwOzwvdGQ+CjwvdHI+Cjwv dGJvZHk+CjwvdGFibGU+CjwhLS0vQm90w7NuLS0+PC90ZD4KPHRkIGFsaWduPSJjZW50ZXIiIHdp ZHRoPSIyMCIgc3R5bGU9ImJveC1zaXppbmc6IGJvcmRlci1ib3g7Ij48L3RkPgo8dGQgYWxpZ249 ImNlbnRlciIgd2lkdGg9IjEyNSIgc3R5bGU9ImJveC1zaXppbmc6IGJvcmRlci1ib3g7Ij48IS0t UklHSFQtLT4gPCEtLUJvdMOzbiAtLT4KPHRhYmxlIGNsYXNzPSJkZXZpY2VXaWR0aFRleHQiIHdp ZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxs cGFkZGluZz0iMCI+Cjx0Ym9keSBhbGlnbj0iY2VudGVyIj4KPHRyPgo8dGQgYWxpZ249ImNlbnRl ciIgc3R5bGU9ImNvbG9yOiAjMTMyMTNjOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij48c3BhbiBjbGFz cz0iZGV2aWNlTV90ZXh0MzUiIHN0eWxlPSJmb250LWZhbWlseTogQXJpYWw7IGZvbnQtd2VpZ2h0 OiBib2xkOyBmb250LXNpemU6IDQwcHg7IGxpbmUtaGVpZ2h0OiA0MHB4OyI+IEQkMjA8L3NwYW4+ PC90ZD4KPC90cj4KPHRyPgo8dGQgaGVpZ2h0PSIxMCIgc3R5bGU9ImZvbnQtc2l6ZTogMXB4OyBs aW5lLWhlaWdodDogMXB4OyI+Jm5ic3A7PC90ZD4KPC90cj4KPHRyPgo8dGQgYWxpZ249ImNlbnRl ciIgc3R5bGU9ImNvbG9yOiAjMTMyMTNjOyBmb250LXNpemU6IDEycHg7IGxpbmUtaGVpZ2h0OiAx NHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFs OyI+WW91ciBESVNDT1ZFUlkgRG9sbGFycyBiYWxhbmNlIDxiciAvPihEJDEgPSAxIFVTRCk8L3Nw YW4+PC90ZD4KPC90cj4KPHRyPgo8dGQgaGVpZ2h0PSIyNSIgc3R5bGU9ImZvbnQtc2l6ZTogMXB4 OyBsaW5lLWhlaWdodDogMXB4OyI+Jm5ic3A7PC90ZD4KPC90cj4KPC90Ym9keT4KPC90YWJsZT4K PCEtLS9Cb3TDs24tLT48L3RkPgo8L3RyPgo8L3Rib2R5Pgo8L3RhYmxlPgo8L3RkPgo8L3RyPgo8 L3Rib2R5Pgo8L3RhYmxlPgo8L3RkPgo8L3RyPgo8L3Rib2R5Pgo8L3RhYmxlPgo8IS0tL1JvdyAx LS0+IDwhLS1Sb3cgMi0tPgo8dGFibGUgY2xhc3M9ImRldmljZVdpZHRoIiB3aWR0aD0iMTAwJSIg YWxpZ249ImNlbnRlciIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAi IGJnY29sb3I9IiNlNmRmY2UiPgo8dGJvZHk+Cjx0cj4KPHRkIGhlaWdodD0iMTAiIHN0eWxlPSJm b250LXNpemU6IDFweDsgbGluZS1oZWlnaHQ6IDFweDsiPiZuYnNwOzwvdGQ+CjwvdHI+Cjx0cj4K PHRkPgo8dGFibGUgY2xhc3M9ImRldmljZVdpZHRoNzAiIHdpZHRoPSI2MCUiIGFsaWduPSJjZW50 ZXIiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KPHRib2R5IGFs aWduPSJjZW50ZXIiPgo8dHI+Cjx0ZD4KPHRhYmxlIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVy IiBzdHlsZT0iYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgYm94LXNpemluZzogYm9yZGVyLWJv eDsiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KPHRib2R5IGFs aWduPSJjZW50ZXIiPgo8dHI+Cjx0ZCBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMTI1IiBzdHlsZT0i Ym94LXNpemluZzogYm9yZGVyLWJveDsiPjwhLS1MRUZULS0+IDwhLS1Cb3TDs24gLS0+IDxpbWcg Y2xhc3M9ImRldmljZVdpZHRoNTUiIHNyYz0iaHR0cHM6Ly9pbmZvLm5oLWhvdGVscy5jb20vY2Ft cGFpZ24vMjAyNS8wMG1pbm9ydGVtcGxhdGUvbW9iaWxlLWJsdWUucG5nIiBib3JkZXI9IjAiIGFs dD0iSW1hZ2UiIHRpdGxlPSJJbWFnZSIgd2lkdGg9IjUwIiBzdHlsZT0iZGlzcGxheTogYmxvY2s7 IG1hcmdpbjogMCBhdXRvOyBvcGFjaXR5OiAxOyIgLz4KPHRhYmxlIGNsYXNzPSJkZXZpY2VXaWR0 aFRleHQiIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5n PSIwIiBjZWxscGFkZGluZz0iMCI+Cjx0Ym9keSBhbGlnbj0iY2VudGVyIj4KPHRyPgo8dGQgaGVp Z2h0PSIxMCIgc3R5bGU9ImZvbnQtc2l6ZTogMXB4OyBsaW5lLWhlaWdodDogMXB4OyI+Jm5ic3A7 PC90ZD4KPC90cj4KPHRyPgo8dGQgYWxpZ249ImNlbnRlciIgc3R5bGU9ImNvbG9yOiAjMTMyMTNj OyBmb250LXNpemU6IDEycHg7IGxpbmUtaGVpZ2h0OiAxNHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7 Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFsOyI+VW5sb2NrIG1vcmUgYmVuZWZpdHM6 IEJvb2sgZGlyZWN0IGFuZCBsZXZlbCB1cDwvc3Bhbj48L3RkPgo8L3RyPgo8dHI+Cjx0ZCBoZWln aHQ9IjI1IiBzdHlsZT0iZm9udC1zaXplOiAxcHg7IGxpbmUtaGVpZ2h0OiAxcHg7Ij4mbmJzcDs8 L3RkPgo8L3RyPgo8L3Rib2R5Pgo8L3RhYmxlPgo8IS0tL0JvdMOzbi0tPjwvdGQ+Cjx0ZCBhbGln bj0iY2VudGVyIiB3aWR0aD0iMjAiIHN0eWxlPSJib3gtc2l6aW5nOiBib3JkZXItYm94OyI+PC90 ZD4KPHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMjUiIHN0eWxlPSJib3gtc2l6aW5nOiBib3Jk ZXItYm94OyI+PCEtLVJJR0hULS0+IDwhLS1Cb3TDs24gLS0+IDxpbWcgY2xhc3M9ImRldmljZVdp ZHRoNTUiIHNyYz0iaHR0cHM6Ly9pbmZvLm5oLWhvdGVscy5jb20vY2FtcGFpZ24vMjAyNS8wMG1p bm9ydGVtcGxhdGUvYmVkLWJsdWUucG5nIiBib3JkZXI9IjAiIGFsdD0iSW1hZ2UiIHRpdGxlPSJJ bWFnZSIgd2lkdGg9IjUwIiBzdHlsZT0iZGlzcGxheTogYmxvY2s7IG1hcmdpbjogMCBhdXRvOyBv cGFjaXR5OiAxOyIgLz4KPHRhYmxlIGNsYXNzPSJkZXZpY2VXaWR0aFRleHQiIHdpZHRoPSIxMDAl IiBhbGlnbj0iY2VudGVyIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0i MCI+Cjx0Ym9keSBhbGlnbj0iY2VudGVyIj4KPHRyPgo8dGQgaGVpZ2h0PSIxMCIgc3R5bGU9ImZv bnQtc2l6ZTogMXB4OyBsaW5lLWhlaWdodDogMXB4OyI+Jm5ic3A7PC90ZD4KPC90cj4KPHRyPgo8 dGQgYWxpZ249ImNlbnRlciIgc3R5bGU9ImNvbG9yOiAjMTMyMTNjOyBmb250LXNpemU6IDEycHg7 IGxpbmUtaGVpZ2h0OiAxNHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij48c3BhbiBzdHlsZT0iZm9u dC1mYW1pbHk6IEFyaWFsOyI+UGVyc29uYWxpc2UgZWFjaCBzdGF5IHdpdGggeW91ciBwcmVmZXJl bmNlcyBhbmQgaW50ZXJlc3RzPC9zcGFuPjwvdGQ+CjwvdHI+Cjx0cj4KPHRkIGhlaWdodD0iMjUi IHN0eWxlPSJmb250LXNpemU6IDFweDsgbGluZS1oZWlnaHQ6IDFweDsiPiZuYnNwOzwvdGQ+Cjwv dHI+CjwvdGJvZHk+CjwvdGFibGU+CjwhLS0vQm90w7NuLS0+PC90ZD4KPC90cj4KPC90Ym9keT4K PC90YWJsZT4KPC90ZD4KPC90cj4KPC90Ym9keT4KPC90YWJsZT4KPC90ZD4KPC90cj4KPC90Ym9k eT4KPC90YWJsZT4KPCEtLS9Sb3cgMi0tPgo8dGFibGUgY2xhc3M9ImRldmljZVdpZHRoIiBib3Jk ZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiIGJnY29s b3I9IiNlNmRmY2UiIGFsaWduPSJjZW50ZXIiPgo8dGJvZHk+Cjx0cj4KPHRkIGhlaWdodD0iMzUi IHN0eWxlPSJmb250LXNpemU6IDFweDsgbGluZS1oZWlnaHQ6IDFweDsiPiZuYnNwOzwvdGQ+Cjwv dHI+CjwvdGJvZHk+CjwvdGFibGU+Cjx0YWJsZSBjbGFzcz0iZGV2aWNld2lkdGgiIHdpZHRoPSIx MDAlIiBhbGlnbj0iY2VudGVyIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGlu Zz0iMCIgYmdjb2xvcj0iI2U2ZGZjZSI+PCEtLUJvdMOzbi0tPgo8dGJvZHk+Cjx0cj4KPHRkPgo8 dGFibGUgY2xhc3M9ImJ0biIgYWxpZ249ImNlbnRlciIgc3R5bGU9ImJveC1zaXppbmc6IGJvcmRl ci1ib3g7IGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGUgIWltcG9ydGFudDsgbWFyZ2luLWxlZnQ6 IGF1dG87IG1hcmdpbi1yaWdodDogYXV0bzsgd2lkdGg6IGF1dG87IiBib3JkZXI9IjAiIGNlbGxz cGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgYmdjb2xvcj0iI2Y5ZjVmMyI+Cjx0Ym9keT4KPHRy Pgo8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjMTMy MTNjOyBib3JkZXItcmFkaXVzOiAxcHg7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IHRleHQtYWxp Z246IGNlbnRlcjsgdmVydGljYWwtYWxpZ246IHRvcDsiPjxhIHJlbD0ibm9vcGVuZXIgbm9yZWZl cnJlciIgaHJlZj0iaHR0cHM6Ly9kaWdpdGFsLm5oLWhvdGVscy5jb206NDQzL3NhcC9wdWJsaWMv Y3Vhbi9saW5rLzEwMC9DQ0ZGQ0IyMTMwQ0YyMDZENTc0MzE1Q0Y0MzJGQTQxM0U2MDk2NEQxP19W Xz0yJl9LMTFfPTQwMDU1RUM2OURFNEJDQjYxNEVFRDVENEFGRjBEMDNCOTVEODg4REQmX0w1NEFE MUYyMDRfPWMyTmxibUZ5YVc4OVRVeERVRWNtZEdGeVoyVjBQV2gwZEhCek9pOHZkM2QzTG0xcGJt OXlhRzkwWld4ekxtTnZiUzlsYmk5c2IzbGhiSFI1UDNWMGJWOXpiM1Z5WTJVOWJtVjNjMnhsZEhS bGNpWjFkRzFmYldWa2FYVnRQV1Z0WVdsc0puVjBiVjlqWVcxd1lXbG5iajFsYldGcGJHbHVaMTlw Ym5SbGNtNWhiQ1oxZEcxZmRHVnliVDFGVlVGTk1qQXlOV1JwYzJOdmRtVnllWEpsWTNWeWNtVnVk R0pzYjJOckpuTmhjQzF2ZFhSaWIzVnVaQzFwWkQxRFEwWkdRMEl5TVRNd1EwWXlNRFpFTlRjME16 RTFRMFkwTXpKR1FUUXhNMFUyTURrMk5FUXgmX0sxM189MzY1Jl9LMTRfPTAxYjU2Mzg3OTRlODAz ZTQwNjQzYmU5ZDI4MTI4ZGViYWRiZDQ2MGY2ZGZhZjU1MzlhZmIyOTNkMjEyZDY0OGYiIHRhcmdl dD0iX2JsYW5rIiB0aXRsZT0i4pa4Jm5ic3A7TE9HIElOIiBzdHlsZT0iYm94LXNpemluZzogYm9y ZGVyLWJveDsgY29sb3I6ICNmZmZmZmY7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogYmxvY2s7 IGZvbnQtZmFtaWx5OiBBcmlhbCAgLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE1cHg7IGZvbnQt d2VpZ2h0OiBib2xkOyBwYWRkaW5nOiA1cHggMjVweCA1cHggMjVweDsgYm9yZGVyOiA2cHggc29s aWQgIzEzMjEzYzsgbWFyZ2luOiAwOyBtc28tcGFkZGluZy1hbHQ6IDY7IHRleHQtZGVjb3JhdGlv bjogbm9uZTsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgbGluZS1oZWlnaHQ6IDI1cHg7Ij5M T0cgSU48L2E+PC90ZD4KPC90cj4KPC90Ym9keT4KPC90YWJsZT4KPC90ZD4KPC90cj4KPCEtLS9C b3TDs24tLT4KPHRyPgo8dGQgaGVpZ2h0PSIzMiIgc3R5bGU9ImZvbnQtc2l6ZTogMXB4OyBsaW5l LWhlaWdodDogMXB4OyI+Jm5ic3A7PC90ZD4KPC90cj4KPC90Ym9keT4KPC90YWJsZT4KPHRhYmxl Pgo8dGJvZHk+Cjx0cj4KPHRkIGhlaWdodD0iNDAiIHN0eWxlPSJmb250LXNpemU6IDFweDsgbGlu ZS1oZWlnaHQ6IDFweDsiPiZuYnNwOzwvdGQ+CjwvdHI+CjwvdGJvZHk+CjwvdGFibGU+PC9kaXY+ PCEtLVtpZiBtc29dPjwvdGQ+PC90cj48L3RhYmxlPjwhW2VuZGlmXS0tPjwhLS1baWYgbXNvXT48 dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGFsaWduPSJs ZWZ0IiBzdHlsZT0ibXNvLXRhYmxlLWxzcGFjZTowcHQ7ICBtc28tdGFibGUtcnNwYWNlOjBwdDsg Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgd2lkdGg6IDEwMCUiPjx0cj48dGQgc3R5bGU9Indp ZHRoOiAxMDAlOyI+PCFbZW5kaWZdLS0+PGRpdiBzdHlsZT0iZmxvYXQ6IGxlZnQ7IHdpZHRoOiAx MDAlIiBjbGFzcz0ic2FwTWt0QmxvY2siPjx0YWJsZSBjbGFzcz0iZGV2aWNlV2lkdGggZGFya21v ZGUiIHdpZHRoPSI2NTAiIGFsaWduPSJjZW50ZXIiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAi IGNlbGxwYWRkaW5nPSIwIj4KPHRib2R5Pgo8dHI+Cjx0ZD48YSByZWw9Im5vb3BlbmVyIG5vcmVm ZXJyZXIiIGhyZWY9Imh0dHBzOi8vZGlnaXRhbC5uaC1ob3RlbHMuY29tOjQ0My9zYXAvcHVibGlj L2N1YW4vbGluay8xMDAvQ0NGRkNCMjEzMENGMjA2RDU3NDMxNUNGNDMyRkE0MTNFNjA5NjREMT9f Vl89MiZfSzExXz03QjFCQUMyMjM0ODM0QzVEMzYzRUQyNzMyMEUyNTE4NEY1ODBDNDQ2Jl9MNTRB RDFGMjA0Xz1jMk5sYm1GeWFXODlUVXhEVUVjbWRHRnlaMlYwUFdoMGRIQnpPaTh2ZDNkM0xtNW9M V052Ykd4bFkzUnBiMjR1WTI5dEwyVnVQM1YwYlY5emIzVnlZMlU5Ym1WM2MyeGxkSFJsY2laMWRH MWZiV1ZrYVhWdFBXVnRZV2xzSm5WMGJWOWpZVzF3WVdsbmJqMWxiV0ZwYkdsdVoxOWhiV1ZoWHpJ d01qVlJOQzB4TXpFd1gwVlZRVTB0VDJOMExVVjRkSEpoYjNKa2FXNWhjbmxmVFVoZlJVUk5YMFZP Sm5OaGNDMXZkWFJpYjNWdVpDMXBaRDFEUTBaR1EwSXlNVE13UTBZeU1EWkVOVGMwTXpFMVEwWTBN ekpHUVRReE0wVTJNRGsyTkVReCZfSzEzXz0zNjUmX0sxNF89MWY0MTI1ODdjNTJjMWJjMWJhMWNl ZDk2MTBiNzUyNDBlODAyYmUwYjg0OWMwYjhhZDg5ZDgyMjhjMmYxNGYzOSIgdGFyZ2V0PSJfYmxh bmsiPjxpbWcgY2xhc3M9ImRldmljZVdpZHRoIiBzcmM9Imh0dHBzOi8vaW5mby5uaC1ob3RlbHMu Y29tL2NhbXBhaWduLzIwMjUvMTBtaW5ob3RleHRleHAvYmFubmVyX25oY19lbi5qcGciIGJvcmRl cj0iMCIgYWx0PSIgIiB0aXRsZT0iICIgd2lkdGg9IjY1MCIgc3R5bGU9ImRpc3BsYXk6IGJsb2Nr OyBtYXJnaW46IDAgYXV0bzsgb3BhY2l0eTogMTsiIC8+PC9hPjwvdGQ+CjwvdHI+CjwvdGJvZHk+ CjwvdGFibGU+Cjx0YWJsZT4KPHRib2R5Pgo8dHI+Cjx0ZCBoZWlnaHQ9IjI1IiBzdHlsZT0iZm9u dC1zaXplOiAxcHg7IGxpbmUtaGVpZ2h0OiAxcHg7Ij4mbmJzcDs8L3RkPgo8L3RyPgo8L3Rib2R5 Pgo8L3RhYmxlPjwvZGl2PjwhLS1baWYgbXNvXT48L3RkPjwvdHI+PC90YWJsZT48IVtlbmRpZl0t LT48IS0tW2lmIG1zb10+PHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFj aW5nPSIwIiBhbGlnbj0ibGVmdCIgc3R5bGU9Im1zby10YWJsZS1sc3BhY2U6MHB0OyAgbXNvLXRh YmxlLXJzcGFjZTowcHQ7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7IHdpZHRoOiAxMDAlIj48 dHI+PHRkIHN0eWxlPSJ3aWR0aDogMTAwJTsiPjwhW2VuZGlmXS0tPjxkaXYgc3R5bGU9ImZsb2F0 OiBsZWZ0OyB3aWR0aDogMTAwJSIgY2xhc3M9InNhcE1rdEJsb2NrIj48IS0tTWlub3IgQVBQLS0+ Cjx0YWJsZSB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciIgYm9yZGVyPSIwIiBjZWxsc3BhY2lu Zz0iMCIgY2VsbHBhZGRpbmc9IjAiPgo8dGJvZHk+Cjx0cj4KPHRkIGhlaWdodD0iMTUiIHN0eWxl PSJmb250LXNpemU6IDFweDsgbGluZS1oZWlnaHQ6IDFweDsiPiZuYnNwOzwvdGQ+CjwvdHI+Cjx0 cj4KPHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIiBzdHlsZT0icGFkZGluZzogMDsiPjxh IHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciIgaHJlZj0iaHR0cHM6Ly9kaWdpdGFsLm5oLWhvdGVs cy5jb206NDQzL3NhcC9wdWJsaWMvY3Vhbi9saW5rLzEwMC9DQ0ZGQ0IyMTMwQ0YyMDZENTc0MzE1 Q0Y0MzJGQTQxM0U2MDk2NEQxP19WXz0yJl9LMTFfPTBCRjA0NEFCQzM1REI3MDc4QjAxRUYwMzk2 NzdCOTU0NzEwNjA3MkImX0w1NEFEMUYyMDRfPWMyTmxibUZ5YVc4OVRVeERVRWNtZEdGeVoyVjBQ V2gwZEhCek9pOHZkM2QzTG0xcGJtOXlhRzkwWld4ekxtTnZiUzlsYmk5dGIySnBiR1V0WVhCd1Az VjBiVjl6YjNWeVkyVTlibVYzYzJ4bGRIUmxjaVoxZEcxZmJXVmthWFZ0UFdWdFlXbHNKblYwYlY5 allXMXdZV2xuYmoxbGJXRnBiR2x1WjE5cGJuUmxjbTVoYkNaMWRHMWZkR1Z5YlQxRlZVRk5NakF5 TldobFlXUmxjbVp2YjNSbGNpWnpZWEF0YjNWMFltOTFibVF0YVdROVEwTkdSa05DTWpFek1FTkdN akEyUkRVM05ETXhOVU5HTkRNeVJrRTBNVE5GTmpBNU5qUkVNUSZfSzEzXz0zNjUmX0sxNF89MzFh ZDA2N2VlMWJhYjQwZDBlMDNiOGEyMDlkYWFiYWYxN2JiODUxYTE4NGFkMzdmMDAzNWE2YTVlZDdl YmJjNiIgdGFyZ2V0PSJfYmxhbmsiIHN0eWxlPSJjb2xvcjogIzY2NjY2NjsgZm9udC1mYW1pbHk6 IEFyaWFsLCBzYW5zLXNlcmlmOyI+PGltZyBzcmM9Imh0dHBzOi8vaW5mby5uaC1ob3RlbHMuY29t L3JlY3VycmluZy9taW5vci9hcHAtZW4uanBnIiBib3JkZXI9IjAiIGFsdD0iTWlub3IgSG90ZWxz IiB0aXRsZT0iTWlub3IgSG90ZWxzIiB3aWR0aD0iMTAwJSIgc3R5bGU9ImNvbG9yOiAjZmZmZmZm OyBkaXNwbGF5OiBibG9jazsgZm9udC1zaXplOiAyMHB4OyBtYXJnaW46IDA7IG1heC13aWR0aDog NjUwcHg7IHBhZGRpbmc6IDA7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgdGV4dC10cmFuc2Zvcm06 IHVwcGVyY2FzZTsiPjwvYT48L3RkPgo8L3RyPgo8dHI+Cjx0ZCBoZWlnaHQ9IjE1IiBzdHlsZT0i Zm9udC1zaXplOiAxcHg7IGxpbmUtaGVpZ2h0OiAxcHg7Ij4mbmJzcDs8L3RkPgo8L3RyPgo8L3Ri b2R5Pgo8L3RhYmxlPjwvZGl2PjwhLS1baWYgbXNvXT48L3RkPjwvdHI+PC90YWJsZT48IVtlbmRp Zl0tLT48IS0tW2lmIG1zb10+PHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxz cGFjaW5nPSIwIiBhbGlnbj0ibGVmdCIgc3R5bGU9Im1zby10YWJsZS1sc3BhY2U6MHB0OyAgbXNv LXRhYmxlLXJzcGFjZTowcHQ7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7IHdpZHRoOiAxMDAl Ij48dHI+PHRkIHN0eWxlPSJ3aWR0aDogMTAwJTsiPjwhW2VuZGlmXS0tPjxkaXYgc3R5bGU9ImZs b2F0OiBsZWZ0OyB3aWR0aDogMTAwJSIgY2xhc3M9InNhcE1rdEJsb2NrIj48IS0tTUlOT1IgQlJB TkRTLS0+Cjx0YWJsZSBjbGFzcz0iZGV2aWNlV2lkdGgiIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2Vu dGVyIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgYmdjb2xvcj0i IzEzMjEzYyI+Cjx0Ym9keSBhbGlnbj0iY2VudGVyIj4KPHRyPgo8dGQgaGVpZ2h0PSIzNSIgc3R5 bGU9ImZvbnQtc2l6ZTogMXB4OyBsaW5lLWhlaWdodDogMXB4OyI+Jm5ic3A7PC90ZD4KPC90cj4K PHRyPgo8dGQ+Cjx0YWJsZSBjbGFzcz0iZGV2aWNlV2lkdGhUZXh0IiB3aWR0aD0iOTAlIiBhbGln bj0iY2VudGVyIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+Cjx0 Ym9keT4KPHRyPgo8dGQgYWxpZ249ImNlbnRlciI+PGEgcmVsPSJub29wZW5lciBub3JlZmVycmVy IiBocmVmPSJodHRwczovL2RpZ2l0YWwubmgtaG90ZWxzLmNvbTo0NDMvc2FwL3B1YmxpYy9jdWFu L2xpbmsvMTAwL0NDRkZDQjIxMzBDRjIwNkQ1NzQzMTVDRjQzMkZBNDEzRTYwOTY0RDE/X1ZfPTIm X0sxMV89NEE5RDE1NDQ1RDc4MEEyMDBBNDc5RUJCQjk2OEVERjMxMjIwNDA0NyZfTDU0QUQxRjIw NF89YzJObGJtRnlhVzg5VFV4RFVFY21kR0Z5WjJWMFBXaDBkSEJ6T2k4dmQzZDNMbTFwYm05eWFH OTBaV3h6TG1OdmJTOWxiaTlpY21GdVpITS9kWFJ0WDNOdmRYSmpaVDF1WlhkemJHVjBkR1Z5Sm5W MGJWOXRaV1JwZFcwOVpXMWhhV3dtZFhSdFgyTmhiWEJoYVdkdVBXVnRZV2xzYVc1blgybHVkR1Z5 Ym1Gc0puVjBiVjkwWlhKdFBVVlZRVTB5TURJMWFHVmhaR1Z5Wm05dmRHVnlKbk5oY0MxdmRYUmli M1Z1WkMxcFpEMURRMFpHUTBJeU1UTXdRMFl5TURaRU5UYzBNekUxUTBZME16SkdRVFF4TTBVMk1E azJORVF4Jl9LMTNfPTM2NSZfSzE0Xz1kNzhjMGM2OGRmYWJhODNjMzg1MzA1YzFmOWRiZGJkMDI3 MDRjYzEzNTQxZTZjNjdjZmI3ZTdmYzhiYzA3OTQ3IiB0YXJnZXQ9Il9ibGFuayI+PGltZyBjbGFz cz0iZGV2aWNlV2lkdGgiIHNyYz0iaHR0cHM6Ly9pbmZvLm5oLWhvdGVscy5jb20vY2FtcGFpZ24v bG9nb3MvMjAyNS1taW5vci1icmFuZHMtbG9nby5wbmciIGJvcmRlcj0iMCIgYWx0PSJNaW5vciBI b3RlbHMiIHRpdGxlPSJNaW5vciBIb3RlbHMiIHdpZHRoPSI1ODUiIHN0eWxlPSJkaXNwbGF5OiBi bG9jazsgbWFyZ2luOiAwIGF1dG87IG1heC13aWR0aDogNjUwcHg7IG9wYWNpdHk6IDE7Ij48L2E+ PC90ZD4KPC90cj4KPHRyPgo8dGQgaGVpZ2h0PSIzNSIgc3R5bGU9ImZvbnQtc2l6ZTogMXB4OyBs aW5lLWhlaWdodDogMXB4OyI+Jm5ic3A7PC90ZD4KPC90cj4KPC90Ym9keT4KPC90YWJsZT4KPC90 ZD4KPC90cj4KPC90Ym9keT4KPC90YWJsZT48L2Rpdj48IS0tW2lmIG1zb10+PC90ZD48L3RyPjwv dGFibGU+PCFbZW5kaWZdLS0+PCEtLVtpZiBtc29dPjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRk aW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgYWxpZ249ImxlZnQiIHN0eWxlPSJtc28tdGFibGUtbHNw YWNlOjBwdDsgIG1zby10YWJsZS1yc3BhY2U6MHB0OyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNl OyB3aWR0aDogMTAwJSI+PHRyPjx0ZCBzdHlsZT0id2lkdGg6IDEwMCU7Ij48IVtlbmRpZl0tLT48 ZGl2IHN0eWxlPSJmbG9hdDogbGVmdDsgd2lkdGg6IDEwMCUiIGNsYXNzPSJzYXBNa3RCbG9jayI+ PCEtLVBST01PIExFR0FMLS0+Cjx0YWJsZSBjbGFzcz0iZGV2aWNlV2lkdGgiIGJvcmRlcj0iMCIg Y2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iIzEz MjEzYyIgYWxpZ249ImNlbnRlciI+Cjx0Ym9keSBhbGlnbj0iY2VudGVyIj4KPHRyPgo8dGQ+Cjx0 YWJsZSBjbGFzcz0iZGV2aWNlV2lkdGhUZXh0IiB3aWR0aD0iODAlIiBib3JkZXI9IjAiIGNlbGxz cGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgYWxpZ249ImNlbnRlciI+Cjx0Ym9keT4KPHRyPgo8 dGQgaGVpZ2h0PSIyMCIgc3R5bGU9ImZvbnQtc2l6ZTogMXB4OyBsaW5lLWhlaWdodDogMXB4OyI+ Jm5ic3A7PC90ZD4KPC90cj4KPHRyPgo8dGQgYWxpZ249ImNlbnRlciIgc3R5bGU9ImNvbG9yOiAj ZmZmZmZmOyBmb250LXNpemU6IDE0cHg7IGxpbmUtaGVpZ2h0OiAxOHB4OyB0ZXh0LWFsaWduOiBj ZW50ZXI7Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IFNpdGthIEJhbm5lciBSZWd1bGFyOyI+ TWlub3IgRElTQ09WRVJZIGlzIHBhcnQgb2YgR0hBIERJU0NPVkVSWSwgcmV3YXJkaW5nIGd1ZXN0 cyBpbiA4NTArIGhvdGVscyBhbmQgcmVzb3J0cyBhY3Jvc3MgMTAwKyBjb3VudHJpZXMuPC9zcGFu PjwvdGQ+CjwvdHI+Cjx0cj4KPHRkIGhlaWdodD0iMjAiIHN0eWxlPSJmb250LXNpemU6IDFweDsg bGluZS1oZWlnaHQ6IDFweDsiPiZuYnNwOzwvdGQ+CjwvdHI+CjwvdGJvZHk+CjwvdGFibGU+Cjwv dGQ+CjwvdHI+CjwvdGJvZHk+CjwvdGFibGU+PC9kaXY+PCEtLVtpZiBtc29dPjwvdGQ+PC90cj48 L3RhYmxlPjwhW2VuZGlmXS0tPjwhLS1baWYgbXNvXT48dGFibGUgYm9yZGVyPSIwIiBjZWxscGFk ZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGFsaWduPSJsZWZ0IiBzdHlsZT0ibXNvLXRhYmxlLWxz cGFjZTowcHQ7ICBtc28tdGFibGUtcnNwYWNlOjBwdDsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBz ZTsgd2lkdGg6IDEwMCUiPjx0cj48dGQgc3R5bGU9IndpZHRoOiAxMDAlOyI+PCFbZW5kaWZdLS0+ PGRpdiBzdHlsZT0iZmxvYXQ6IGxlZnQ7IHdpZHRoOiAxMDAlIiBjbGFzcz0ic2FwTWt0QmxvY2si Pjx0YWJsZSBjbGFzcz0iZGV2aWNlV2lkdGgiIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIiBi b3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgYmdjb2xvcj0iIzEzMjEz YyI+Cjx0Ym9keT4KPHRyPgo8dGQgaGVpZ2h0PSIyNSIgc3R5bGU9ImZvbnQtc2l6ZTogMXB4OyBs aW5lLWhlaWdodDogMXB4OyI+Jm5ic3A7PC90ZD4KPC90cj4KPHRyPgo8dGQgYWxpZ249ImNlbnRl ciI+Cjx0YWJsZSBjbGFzcz0iZGV2aWNlV2lkdGg4MCIgd2lkdGg9IjkxJSIgYWxpZ249ImNlbnRl ciIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGJnY29sb3I9IiNj Y2NjY2MiPgo8dGJvZHk+Cjx0cj4KPHRkIGhlaWdodD0iMSIgc3R5bGU9ImZvbnQtc2l6ZTogMXB4 OyBsaW5lLWhlaWdodDogMXB4OyI+Jm5ic3A7PC90ZD4KPC90cj4KPC90Ym9keT4KPC90YWJsZT4K PC90ZD4KPC90cj4KPC90Ym9keT4KPC90YWJsZT4KPHRhYmxlIGJnY29sb3I9IiMxMzIxM2MiIGNs YXNzPSJkZXZpY2VXaWR0aCIgd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiIGJvcmRlcj0iMCIg Y2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIj4KPHRib2R5IGFsaWduPSJjZW50ZXIiPgo8 dHI+Cjx0ZCBoZWlnaHQ9IjMwIiBzdHlsZT0iZm9udC1zaXplOiAxcHg7IGxpbmUtaGVpZ2h0OiAx cHg7Ij4mbmJzcDs8L3RkPgo8L3RyPgo8dHI+Cjx0ZD4KPHRhYmxlIGNsYXNzPSJkZXZpY2VXaWR0 aFRleHQiIHdpZHRoPSI5NSUiIGFsaWduPSJjZW50ZXIiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9 IjAiIGNlbGxwYWRkaW5nPSIwIj4KPHRib2R5Pgo8dHI+Cjx0ZCBhbGlnbj0iY2VudGVyIiBzdHls ZT0ibGluZS1oZWlnaHQ6IDIwcHg7IHRleHQtYWxpZ246IGNlbnRlcjsiPjxzcGFuIGNsYXNzPSJk ZXZpY2VNX3RleHQxNSIgc3R5bGU9ImNvbG9yOiAjZmZmZmZmOyBmb250LXNpemU6IDE2cHg7IGZv bnQtZmFtaWx5OiBBcmlhbDsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij5Gb2xsb3cgdXM8L3NwYW4+PC90 ZD4KPC90cj4KPHRyPgo8dGQgaGVpZ2h0PSIzMCIgc3R5bGU9ImZvbnQtc2l6ZTogMXB4OyBsaW5l LWhlaWdodDogMXB4OyI+Jm5ic3A7PC90ZD4KPC90cj4KPC90Ym9keT4KPC90YWJsZT4KPC90ZD4K PC90cj4KPC90Ym9keT4KPC90YWJsZT4KPHRhYmxlIGJnY29sb3I9IiMxMzIxM2MiIGNsYXNzPSJk ZXZpY2VXaWR0aCIgd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiIGJvcmRlcj0iMCIgY2VsbHBh ZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KPHRib2R5IGFsaWduPSJjZW50ZXIiPgo8dHI+Cjx0 ZD4KPHRhYmxlIGNsYXNzPSJkZXZpY2VXaWR0aDcwIiB3aWR0aD0iMjAwIiBhbGlnbj0iY2VudGVy IiBzdHlsZT0iYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgZm9udC1mYW1pbHk6IENhbGlicmks IHNhbnMtc2VyaWY7IiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+ Cjx0Ym9keSBhbGlnbj0iY2VudGVyIj4KPHRyPgo8dGQgYWxpZ249ImNlbnRlciIgaGVpZ2h0PSIz MCIgd2lkdGg9IjIwIj48IS0tIGZhY2Vib29rIC0tPiA8YSByZWw9Im5vb3BlbmVyIG5vcmVmZXJy ZXIiIGhyZWY9Imh0dHBzOi8vZGlnaXRhbC5uaC1ob3RlbHMuY29tOjQ0My9zYXAvcHVibGljL2N1 YW4vbGluay8xMDAvQ0NGRkNCMjEzMENGMjA2RDU3NDMxNUNGNDMyRkE0MTNFNjA5NjREMT9fVl89 MiZfSzExXz1BMzYxOUY5NTQ1OUYyNkUyMzhFRTVGNTQ4RTM1MTkyMjI5RTE4NzEwJl9MNTRBRDFG MjA0Xz1jMk5sYm1GeWFXODlUVXhEVUVjbWRHRnlaMlYwUFdoMGRIQnpPaTh2ZDNkM0xtWmhZMlZp YjI5ckxtTnZiUzl0YVc1dmNtaHZkR1ZzY3k4L2MyRndMVzkxZEdKdmRXNWtMV2xrUFVORFJrWkRR akl4TXpCRFJqSXdOa1ExTnpRek1UVkRSalF6TWtaQk5ERXpSVFl3T1RZMFJERSZfSzEzXz0zNjUm X0sxNF89YzQyNWYxOWViZjE1MmZmMTc2MTY1NGZiMjUwZTUzMzA4MGNmNDhjMWM0OWY0OWQ1OThm M2MzM2IzNzhmY2JmYiIgdGFyZ2V0PSJfYmxhbmsiPjxpbWcgc3JjPSJodHRwczovL2luZm8ubmgt aG90ZWxzLmNvbS9jYW1wYWlnbi9sb2dvcy8yMDI0LW1pbm9yLWZhY2Vib29rLnBuZyIgYm9yZGVy PSIwIiBhbHQ9IiIgd2lkdGg9IjIwIiBzdHlsZT0ib3V0bGluZS1zdHlsZTogbm9uZTsgb3V0bGlu ZS1jb2xvcjogaW52ZXJ0OyBvdXRsaW5lLXdpZHRoOiBtZWRpdW07IGRpc3BsYXk6IGJsb2NrOyB0 ZXh0LWRlY29yYXRpb246IG5vbmU7Ij48L2E+PC90ZD4KPHRkIGFsaWduPSJsZWZ0IiB3aWR0aD0i NzUiIHN0eWxlPSJmb250LXNpemU6IDFweDsgbGluZS1oZWlnaHQ6IDFweDsiPiZuYnNwOzwvdGQ+ Cjx0ZCBhbGlnbj0iY2VudGVyIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMjAiPjwhLS0gaW5zdGFnZXJh bSAtLT4gPGEgcmVsPSJub29wZW5lciBub3JlZmVycmVyIiBocmVmPSJodHRwczovL2RpZ2l0YWwu bmgtaG90ZWxzLmNvbTo0NDMvc2FwL3B1YmxpYy9jdWFuL2xpbmsvMTAwL0NDRkZDQjIxMzBDRjIw NkQ1NzQzMTVDRjQzMkZBNDEzRTYwOTY0RDE/X1ZfPTImX0sxMV89RkQ1OTNGNEY4MjlFRkJGNjcy NTJDNjQ1NDg0ODI0RDU5NzY3MzgyQSZfTDU0QUQxRjIwNF89YzJObGJtRnlhVzg5VFV4RFVFY21k R0Z5WjJWMFBXaDBkSEJ6T2k4dmVDNWpiMjB2VFdsdWIzSkliM1JsYkhORlZVRk5QM05oY0MxdmRY UmliM1Z1WkMxcFpEMURRMFpHUTBJeU1UTXdRMFl5TURaRU5UYzBNekUxUTBZME16SkdRVFF4TTBV Mk1EazJORVF4Jl9LMTNfPTM2NSZfSzE0Xz03YzMzOGEwYzhkYWI5OGE0OTFjYjJlMDBkYjU0NDE4 MDMwNjJjNWVkM2YwYzc5OGEzNTVhOTk4NjE0NjAxYzJlIiB0YXJnZXQ9Il9ibGFuayI+PGltZyBz cmM9Imh0dHBzOi8vaW5mby5uaC1ob3RlbHMuY29tL2NhbXBhaWduL2xvZ29zLzIwMjQtbWlub3It eC5wbmciIGJvcmRlcj0iMCIgYWx0PSIiIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgc3R5bGU9Im91 dGxpbmUtc3R5bGU6IG5vbmU7IG91dGxpbmUtY29sb3I6IGludmVydDsgb3V0bGluZS13aWR0aDog bWVkaXVtOyBkaXNwbGF5OiBibG9jazsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyI+PC9hPjwvdGQ+ Cjx0ZCBhbGlnbj0ibGVmdCIgd2lkdGg9Ijc1IiBzdHlsZT0iZm9udC1zaXplOiAxcHg7IGxpbmUt aGVpZ2h0OiAxcHg7Ij4mbmJzcDs8L3RkPgo8dGQgYWxpZ249ImNlbnRlciIgaGVpZ2h0PSIzMCIg d2lkdGg9IjIwIj48IS0tIHlvdXR1YmUgLS0+IDxhIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciIg aHJlZj0iaHR0cHM6Ly9kaWdpdGFsLm5oLWhvdGVscy5jb206NDQzL3NhcC9wdWJsaWMvY3Vhbi9s aW5rLzEwMC9DQ0ZGQ0IyMTMwQ0YyMDZENTc0MzE1Q0Y0MzJGQTQxM0U2MDk2NEQxP19WXz0yJl9L MTFfPTM2RDhGQkM4RDREMEUwMDlFQ0UyRjk5NjVGNUQ0NkIzODU0QTVFRkUmX0w1NEFEMUYyMDRf PWMyTmxibUZ5YVc4OVRVeERVRWNtZEdGeVoyVjBQV2gwZEhCek9pOHZkM2QzTG5sdmRYUjFZbVV1 WTI5dEwyTm9ZVzV1Wld3dlZVTnJNekJwWjBaRVh6ZDBNVk0zYTJWQlFUbDRXbHBuUDNOaGNDMXZk WFJpYjNWdVpDMXBaRDFEUTBaR1EwSXlNVE13UTBZeU1EWkVOVGMwTXpFMVEwWTBNekpHUVRReE0w VTJNRGsyTkVReCZfSzEzXz0zNjUmX0sxNF89Mzc5NzUzZDJlNzliMTU1N2FkYzgzODMyMTgyMmNm NjBmYzZkNDQwMDlkNzMxZmY5ZmUzOGYyNWE4YzRmZTA1MCIgdGFyZ2V0PSJfYmxhbmsiPjxpbWcg c3JjPSJodHRwczovL2luZm8ubmgtaG90ZWxzLmNvbS9jYW1wYWlnbi9sb2dvcy8yMDI0LW1pbm9y LXlvdXR1YmUucG5nIiBib3JkZXI9IjAiIGFsdD0iIiB3aWR0aD0iMjAiIHN0eWxlPSJvdXRsaW5l LXN0eWxlOiBub25lOyBvdXRsaW5lLWNvbG9yOiBpbnZlcnQ7IG91dGxpbmUtd2lkdGg6IG1lZGl1 bTsgZGlzcGxheTogYmxvY2s7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsiPjwvYT48L3RkPgo8dGQg YWxpZ249ImxlZnQiIHdpZHRoPSI3NSIgc3R5bGU9ImZvbnQtc2l6ZTogMXB4OyBsaW5lLWhlaWdo dDogMXB4OyI+Jm5ic3A7PC90ZD4KPHRkIGFsaWduPSJjZW50ZXIiIGhlaWdodD0iMzAiIHdpZHRo PSIyMCI+PCEtLSB5b3V0dWJlIC0tPiA8YSByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiIGhyZWY9 Imh0dHBzOi8vZGlnaXRhbC5uaC1ob3RlbHMuY29tOjQ0My9zYXAvcHVibGljL2N1YW4vbGluay8x MDAvQ0NGRkNCMjEzMENGMjA2RDU3NDMxNUNGNDMyRkE0MTNFNjA5NjREMT9fVl89MiZfSzExXz02 NEZEOERFNDIwQTAwNjhBMUQxQTlEOTc3MDJBNkQ2NTJEOEQ2ODdEJl9MNTRBRDFGMjA0Xz1jMk5s Ym1GeWFXODlUVXhEVUVjbWRHRnlaMlYwUFdoMGRIQnpPaTh2ZDNkM0xuUnBhM1J2YXk1amIyMHZR RzFwYm05eWFHOTBaV3h6UDNOaGNDMXZkWFJpYjNWdVpDMXBaRDFEUTBaR1EwSXlNVE13UTBZeU1E WkVOVGMwTXpFMVEwWTBNekpHUVRReE0wVTJNRGsyTkVReCZfSzEzXz0zNjUmX0sxNF89NmQyYTBm MzY2YzZmN2Y4OWIyZjNlM2Q5YzMxNDY0OWY5MGZhMDJlZWFkMDc4YWFmOTExMmJiZWU3MjBkYWE0 NCIgdGFyZ2V0PSJfYmxhbmsiPjxpbWcgc3JjPSJodHRwczovL2luZm8ubmgtaG90ZWxzLmNvbS9j YW1wYWlnbi9sb2dvcy8yMDI0LW1pbm9yLXRpay5wbmciIGJvcmRlcj0iMCIgYWx0PSIiIHdpZHRo PSIyMCIgc3R5bGU9Im91dGxpbmUtc3R5bGU6IG5vbmU7IG91dGxpbmUtY29sb3I6IGludmVydDsg b3V0bGluZS13aWR0aDogbWVkaXVtOyBkaXNwbGF5OiBibG9jazsgdGV4dC1kZWNvcmF0aW9uOiBu b25lOyI+PC9hPjwvdGQ+Cjx0ZCBhbGlnbj0ibGVmdCIgd2lkdGg9Ijc1IiBzdHlsZT0iZm9udC1z aXplOiAxcHg7IGxpbmUtaGVpZ2h0OiAxcHg7Ij4mbmJzcDs8L3RkPgo8dGQgYWxpZ249ImNlbnRl ciIgaGVpZ2h0PSIzMCIgd2lkdGg9IjIwIj48IS0tIHlvdXR1YmUgLS0+IDxhIHJlbD0ibm9vcGVu ZXIgbm9yZWZlcnJlciIgaHJlZj0iaHR0cHM6Ly9kaWdpdGFsLm5oLWhvdGVscy5jb206NDQzL3Nh cC9wdWJsaWMvY3Vhbi9saW5rLzEwMC9DQ0ZGQ0IyMTMwQ0YyMDZENTc0MzE1Q0Y0MzJGQTQxM0U2 MDk2NEQxP19WXz0yJl9LMTFfPUMzNDdBNjRBQjYyMkJFRDhFRjhFNTIzRkRDQkUwMzFDNzBCNEIy RTYmX0w1NEFEMUYyMDRfPWMyTmxibUZ5YVc4OVRVeERVRWNtZEdGeVoyVjBQV2gwZEhCek9pOHZk M2QzTG1sdWMzUmhaM0poYlM1amIyMHZiV2x1YjNKb2IzUmxiSE0vYzJGd0xXOTFkR0p2ZFc1a0xX bGtQVU5EUmtaRFFqSXhNekJEUmpJd05rUTFOelF6TVRWRFJqUXpNa1pCTkRFelJUWXdPVFkwUkRF Jl9LMTNfPTM2NSZfSzE0Xz1jNzEyYjRmOGNmOTJkMjYwMGU4ZDhiZTE1ZTgyMTczYjcyOGY1MjFk YmM1ZDQ2MjBlMDAzZjI1ZDhmN2QxM2U3IiB0YXJnZXQ9Il9ibGFuayI+PGltZyBzcmM9Imh0dHBz Oi8vaW5mby5uaC1ob3RlbHMuY29tL2NhbXBhaWduL2xvZ29zLzIwMjQtbWlub3ItaWcucG5nIiBi b3JkZXI9IjAiIGFsdD0iIiB3aWR0aD0iMjAiIHN0eWxlPSJvdXRsaW5lLXN0eWxlOiBub25lOyBv dXRsaW5lLWNvbG9yOiBpbnZlcnQ7IG91dGxpbmUtd2lkdGg6IG1lZGl1bTsgZGlzcGxheTogYmxv Y2s7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsiPjwvYT48L3RkPgo8L3RyPgo8dHI+Cjx0ZCBoZWln aHQ9IjIwIiBzdHlsZT0iZm9udC1zaXplOiAxcHg7IGxpbmUtaGVpZ2h0OiAxcHg7Ij4mbmJzcDs8 L3RkPgo8L3RyPgo8L3Rib2R5Pgo8L3RhYmxlPgo8L3RkPgo8L3RyPgo8L3Rib2R5Pgo8L3RhYmxl PjwvZGl2PjwhLS1baWYgbXNvXT48L3RkPjwvdHI+PC90YWJsZT48IVtlbmRpZl0tLT48IS0tW2lm IG1zb10+PHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBh bGlnbj0ibGVmdCIgc3R5bGU9Im1zby10YWJsZS1sc3BhY2U6MHB0OyAgbXNvLXRhYmxlLXJzcGFj ZTowcHQ7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7IHdpZHRoOiAxMDAlIj48dHI+PHRkIHN0 eWxlPSJ3aWR0aDogMTAwJTsiPjwhW2VuZGlmXS0tPjxkaXYgc3R5bGU9ImZsb2F0OiBsZWZ0OyB3 aWR0aDogMTAwJSIgY2xhc3M9InNhcE1rdEJsb2NrIj48dGFibGUgY2xhc3M9ImRldmljZVdpZHRo IiB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIg Y2VsbHBhZGRpbmc9IjAiIGJnY29sb3I9IjEzMjEzYyI+Cjx0Ym9keSBhbGlnbj0iY2VudGVyIj4K PHRyPgo8dGQgaGVpZ2h0PSIxNSIgc3R5bGU9ImZvbnQtc2l6ZTogMXB4OyBsaW5lLWhlaWdodDog MXB4OyI+Jm5ic3A7PC90ZD4KPC90cj4KPHRyPgo8dGQ+Cjx0YWJsZSBjbGFzcz0iZGV2aWNlV2lk dGhUZXh0IiB3aWR0aD0iOTUlIiBhbGlnbj0iY2VudGVyIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5n PSIwIiBjZWxscGFkZGluZz0iMCIgc3R5bGU9IndpZHRoOiA5NSU7Ij4KPHRib2R5Pgo8dHI+Cjx0 ZCBhbGlnbj0ibGVmdCIgc3R5bGU9ImZvbnQtc2l6ZTogMTBweDsgdGV4dC1hbGlnbjogY2VudGVy OyBjb2xvcjogI2ZmZmZmZiFpbXBvcnRhbnQ7IGZvbnQtd2VpZ2h0OiBib2xkOyI+JmNvcHk7IDIw MjUgTWlub3IgSG90ZWxzIEV1cm9wZSAmYW1wOyBBbWVyaWNhczwvdGQ+CjwvdHI+Cjx0cj4KPHRk IGhlaWdodD0iMTAiIHN0eWxlPSJmb250LXNpemU6IDFweDsgbGluZS1oZWlnaHQ6IDFweDsiPiZu YnNwOzwvdGQ+CjwvdHI+Cjx0ciBzdHlsZT0iaGVpZ2h0OiAyM3B4OyI+Cjx0ZCBhbGlnbj0ibGVm dCIgc3R5bGU9ImNvbG9yOiAjZmZmZmZmOyBmb250LXNpemU6IDEwcHg7IHRleHQtYWxpZ246IGNl bnRlcjsiPjxzcGFuIHN0eWxlPSJjb2xvcjogI2ZmZmZmZjsgZm9udC1zaXplOiAxMHB4OyI+IENv bnRhY3QgRGV0YWlsczogKzM0IDkxIDM5OCA0NCAzOCAvICs0NCAoMCkgMjAzIDQ5IDk4IDk1MSA8 YnI+PGEgcmVsPSJub29wZW5lciBub3JlZmVycmVyIiBocmVmPSJtYWlsdG86bWlub3JkaXNjb3Zl cnlAbWlub3ItaG90ZWxzLmNvbSIgdGFyZ2V0PSJfYmxhbmsiIHN0eWxlPSJjb2xvcjogI2ZmZmZm ZjsgZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOyI+bWlub3JkaXNjb3ZlcnlAbWlub3It aG90ZWxzLmNvbTwvYT4gPGJyPk1vbmRheSAmbmRhc2g7IEZyaWRheTogOCAtIDIxaC4gV2Vla2Vu ZHM6IDggLSAxN2ggQ0VUIChDZW50cmFsIEV1cm9wZWFuIFRpbWUpLiA8L3NwYW4+PC90ZD4KPC90 cj4KPHRyPgo8dGQgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxNHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7 Ij48c3BhbiBzdHlsZT0iY29sb3I6ICNmZmZmZmY7IGZvbnQtc2l6ZTogMTBweDsiPiA8YSByZWw9 Im5vb3BlbmVyIG5vcmVmZXJyZXIiIGhyZWY9Imh0dHBzOi8vZGlnaXRhbC5uaC1ob3RlbHMuY29t OjQ0My9zYXAvcHVibGljL2N1YW4vbGluay8xMDAvQ0NGRkNCMjEzMENGMjA2RDU3NDMxNUNGNDMy RkE0MTNFNjA5NjREMT9fVl89MiZfSzExXz04NEU3MTkwNDY2RDNCQTMwNzYxMTdGRTU3NjhFQzQz MkRCQzc0RTVDJl9MNTRBRDFGMjA0Xz1jMk5sYm1GeWFXODlUVXhEVUVjbWRHRnlaMlYwUFdoMGRI QnpPaTh2ZDNkM0xtMXBibTl5YUc5MFpXeHpMbU52YlM5bGJpOXNiM2xoYkhSNUwzQnlhWFpoWTNr dGNHOXNhV041UDNWMGJWOXRaV1JwZFcwOVpXMWhhV3hwYm1jbWRYUnRYM052ZFhKalpUMXBiblJs Y201aGJDMWhiR3dtZFhSdFgyTmhiWEJoYVdkdVBXVnRZV2xzYVc1blgybHVkR1Z5Ym1Gc0xXRnNi Q1oxZEcxZmRHVnliVDB5TURJMExXaGxZV1JsY21admIzUmxjaVoxZEcxZlkyOXVkR1Z1ZEQxRlRp WmpZVzF3YVdROU9UWTNOVEF6TkNaellYQXRiM1YwWW05MWJtUXRhV1E5UTBOR1JrTkNNakV6TUVO R01qQTJSRFUzTkRNeE5VTkdORE15UmtFME1UTkZOakE1TmpSRU1RJl9LMTNfPTM2NSZfSzE0Xz0y ZmQyMGUyZWRkZjZlMzQwODUyZWMwNjliMWQ3MDhhZWNhZjAyZGI1MmM1ODU3ZDVlNDEzNzc0ZDEw MDI4Zjg0IiB0YXJnZXQ9Il9ibGFuayIgdGl0bGU9IlByaXZhY3kgUG9saWN5IiBzdHlsZT0iY29s b3I6ICNmZmZmZmY7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyBmb250LWZhbWlseTogQXJp YWwsIHNhbnMtc2VyaWY7Ij5Qcml2YWN5IFBvbGljeTwvYT4uIFRoaXMgZW1haWwgd2FzIHNlbnQg dG86IDxzcGFuIHN0eWxlPSJjb2xvcjogI2ZmZmZmZjsgZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5z LXNlcmlmOyI+aGlAam9zaWUubG9sPC9zcGFuPi4gPGJyPllvdSBhcmUgcmVjZWl2aW5nIHRoaXMg bWVzc2FnZSBhcyBhIG1lbWJlciBvZiB0aGUgTUlOT1IgRElTQ09WRVJZIHByb2dyYW1tZSwgcGFy dCBvZiBHSEEgRElTQ09WRVJZLiBDaGVjayB0aGUgZ2VuZXJhbCBjb25kaXRpb25zIG9mIHRoZSBw cm9ncmFtIDxhIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciIgaHJlZj0iaHR0cHM6Ly9kaWdpdGFs Lm5oLWhvdGVscy5jb206NDQzL3NhcC9wdWJsaWMvY3Vhbi9saW5rLzEwMC9DQ0ZGQ0IyMTMwQ0Yy MDZENTc0MzE1Q0Y0MzJGQTQxM0U2MDk2NEQxP19WXz0yJl9LMTFfPUY4OTg2NjcwREYwMDU5MTM5 ODVDRjQ4Q0RBNzg3Qjk1QUU2NDQ0QUEmX0w1NEFEMUYyMDRfPWMyTmxibUZ5YVc4OVRVeERVRWNt ZEdGeVoyVjBQV2gwZEhCek9pOHZkM2QzTG0xcGJtOXlhRzkwWld4ekxtTnZiUzlsYmk5c2IzbGhi SFI1TDNSbGNtMXpMV0Z1WkMxamIyNWthWFJwYjI1elAzVjBiVjl0WldScGRXMDlaVzFoYVd4cGJt Y21kWFJ0WDNOdmRYSmpaVDFwYm5SbGNtNWhiQzFoYkd3bWRYUnRYMk5oYlhCaGFXZHVQV1Z0WVds c2FXNW5YMmx1ZEdWeWJtRnNMV0ZzYkNaMWRHMWZkR1Z5YlQweU1ESTBMV2hsWVdSbGNtWnZiM1Js Y2laMWRHMWZZMjl1ZEdWdWREMUZUaVpqWVcxd2FXUTlPVFkzTlRBek5DWnpZWEF0YjNWMFltOTFi bVF0YVdROVEwTkdSa05DTWpFek1FTkdNakEyUkRVM05ETXhOVU5HTkRNeVJrRTBNVE5GTmpBNU5q UkVNUSZfSzEzXz0zNjUmX0sxNF89OTA3ZmZiYTBkYzVlMzc4OWEyMDQzOWZkNTVjMGI5OTg1ZTNk ZmY0OTIwNDlkNmY2ZGRlYzc2ZWY0YmRiOTRjYSIgdGFyZ2V0PSJfYmxhbmsiIHN0eWxlPSJjb2xv cjogI2ZmZmZmZjsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IGZvbnQtZmFtaWx5OiBBcmlh bCwgc2Fucy1zZXJpZjsiPmhlcmU8L2E+LiBDaGVjayB0aGUgaG90ZWxzIHdoZXJlIHlvdSBjYW4g cmVkZWVtIHlvdXIgcG9pbnRzIDxhIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciIgaHJlZj0iaHR0 cHM6Ly9kaWdpdGFsLm5oLWhvdGVscy5jb206NDQzL3NhcC9wdWJsaWMvY3Vhbi9saW5rLzEwMC9D Q0ZGQ0IyMTMwQ0YyMDZENTc0MzE1Q0Y0MzJGQTQxM0U2MDk2NEQxP19WXz0yJl9LMTFfPUNFNjJB RDA4Rjc4RUQyNzI5REIyMkMxQjFFMDJBMjEzNDY4Mzc0RjMmX0w1NEFEMUYyMDRfPWMyTmxibUZ5 YVc4OVRVeERVRWNtZEdGeVoyVjBQV2gwZEhCek9pOHZkM2QzTG0xcGJtOXlhRzkwWld4ekxtTnZi UzlsYmk5c2IzbGhiSFI1TDNSbGNtMXpMV0Z1WkMxamIyNWthWFJwYjI1ekwybHVZMngxWkdWa0xX aHZkR1ZzY3o5MWRHMWZiV1ZrYVhWdFBXVnRZV2xzYVc1bkpuVjBiVjl6YjNWeVkyVTlhVzUwWlhK dVlXd3RZV3hzSm5WMGJWOWpZVzF3WVdsbmJqMWxiV0ZwYkdsdVoxOXBiblJsY201aGJDMWhiR3dt ZFhSdFgzUmxjbTA5TWpBeU5DMW9aV0ZrWlhKbWIyOTBaWEltZFhSdFgyTnZiblJsYm5ROVJVNG1Z MkZ0Y0dsa1BUazJOelV3TXpRbWMyRndMVzkxZEdKdmRXNWtMV2xrUFVORFJrWkRRakl4TXpCRFJq SXdOa1ExTnpRek1UVkRSalF6TWtaQk5ERXpSVFl3T1RZMFJERSZfSzEzXz0zNjUmX0sxNF89OTFi NTRjZDgxMWNkN2IzOTYzNTM2ODFkZjM1NjM4MjgyZjliMGIzOWU3ODFlMDJmZDAwM2FlNTNmZDlk YzU5ZSIgdGFyZ2V0PSJfYmxhbmsiIHN0eWxlPSJjb2xvcjogI2ZmZmZmZjsgdGV4dC1kZWNvcmF0 aW9uOiB1bmRlcmxpbmU7IGZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjsiPmhlcmU8L2E+ LiA8L3NwYW4+PC90ZD4KPC90cj4KPHRyPgo8dGQgaGVpZ2h0PSIzIiBzdHlsZT0iZm9udC1zaXpl OiAxcHg7IGxpbmUtaGVpZ2h0OiAxcHg7Ij4mbmJzcDs8L3RkPgo8L3RyPgo8dHI+Cjx0ZCBzdHls ZT0ibGluZS1oZWlnaHQ6IDExcHg7IHRleHQtYWxpZ246IGNlbnRlcjsiPjxzcGFuIHN0eWxlPSJj b2xvcjogI2ZmZmZmZjsgZm9udC1zaXplOiAxMHB4OyBmb250LWZhbWlseTogQXJpYWwsIHNhbnMt c2VyaWY7Ij4gPHN1cD4oMSk8L3N1cD4gSXQmcnNxdW87cyBwb3NzaWJsZSB0aGF0IHRoZSBiYWxh bmNlIGRvZXMgbm90IHJlZmxlY3QgdHJhbnNhY3Rpb25zIG1hZGUgaW4gdGhlIHBhc3QgOSZuYnNw O2RheXMuIDwvc3Bhbj48L3RkPgo8L3RyPgo8dHI+Cjx0ZCBoZWlnaHQ9IjE1IiBzdHlsZT0iZm9u dC1zaXplOiAxcHg7IGxpbmUtaGVpZ2h0OiAxcHg7Ij4mbmJzcDs8L3RkPgo8L3RyPgo8dHIgc3R5 bGU9ImhlaWdodDogMjNweDsiPgo8dGQgc3R5bGU9ImZvbnQtc2l6ZTogMTBweDsgZm9udC13ZWln aHQ6IGJvbGQ7IHRleHQtYWxpZ246IGNlbnRlcjsgY29sb3I6ICNmZmZmZmYhaW1wb3J0YW50OyBo ZWlnaHQ6IDIzcHg7Ij48c3BhbiBjbGFzcz0iIiBzdHlsZT0iY29sb3I6ICNmZmZmZmY7IGZvbnQt c2l6ZTogMTBweDsgZm9udC13ZWlnaHQ6IGJvbGQ7IGZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1z ZXJpZjsiPiBJZiB5b3UgZG8gbm90IHdhbnQgdG8gcmVjZWl2ZSBvdXIgZW1haWwgY29tbXVuaWNh dGlvbnMsIDxhIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciIgaHJlZj0iaHR0cHM6Ly9kaWdpdGFs Lm5oLWhvdGVscy5jb206NDQzL3NhcC9wdWJsaWMvY3Vhbi9saW5rLzEwMC9DQ0ZGQ0IyMTMwQ0Yy MDZENTc0MzE1Q0Y0MzJGQTQxM0U2MDk2NEQxP19WXz0yJl9LMTFfPTA3MTBCODQ3M0FFMTdCNDQ1 ODQwNjJCQTJDMDM0OEQ4RTFGM0U2MTImX0w1NEFEMUYyMDRfPWMyTmxibUZ5YVc4OVRVeERVRWNt ZEdGeVoyVjBQV2gwZEhCek9pOHZhVzVtYnk1dWFDMW9iM1JsYkhNdVkyOXRMMlp2Y20wdmRXNXpk V0p6WTNKcFltVXRaVzR1YUhSdGJEOXpZWEF0YjNWMFltOTFibVF0YVdROVEwTkdSa05DTWpFek1F TkdNakEyUkRVM05ETXhOVU5HTkRNeVJrRTBNVE5GTmpBNU5qUkVNUSZfSzEzXz0zNjUmX0sxNF89 OWRhMGE2NDc5ZDEzZGQ5NmQ0NDZiNjhjOWFlZThkODEyNWE0NWUyZjYxZjg0NmM3ZDY2ZGUyNjk1 YTA1MmUyMiIgdGFyZ2V0PSJfYmxhbmsiIHRpdGxlPSIKY2xpY2sgaGVyZSB0byB1bnN1YnNjcmli ZSIgc3R5bGU9ImNvbG9yOiAjZmZmZmZmOyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgZm9u dC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOyI+PGJyPmNsaWNrIGhlcmUgdG8gdW5zdWJzY3Jp YmU8L2E+LiA8L3NwYW4+PC90ZD4KPC90cj4KPHRyIHN0eWxlPSJoZWlnaHQ6IDM1cHg7Ij4KPHRk IGhlaWdodD0iMzUiIHN0eWxlPSJmb250LXNpemU6IDFweDsgbGluZS1oZWlnaHQ6IDFweDsgaGVp Z2h0OiAzNXB4OyI+Jm5ic3A7PC90ZD4KPC90cj4KPHRyIHN0eWxlPSJoZWlnaHQ6IDExMnB4OyI+ Cjx0ZCBhbGlnbj0ibGVmdCIgc3R5bGU9ImZvbnQtc2l6ZTogMTBweDsgdGV4dC1hbGlnbjogY2Vu dGVyOyBjb2xvcjogI2ZmZmZmZiFpbXBvcnRhbnQ7IGhlaWdodDogMTEycHg7Ij5JbiBhY2NvcmRh bmNlIHdpdGggZGF0YSBwcm90ZWN0aW9uIGxlZ2lzbGF0aW9uLCB3ZSBpbmZvcm0geW91IHRoYXQg TUlOT1IgSE9URUxTIEVVUk9QRSAmYW1wOyBBTUVSSUNBUyBTLkEuIGlzIHRoZSBEYXRhIENvbnRy b2xsZXIuIFlvdXIgcGVyc29uYWwgZGF0YSB3aWxsIGJlIHByb2Nlc3NlZCBmb3IgbWFuYWdpbmcg dGhlIExveWFsdHkgUHJvZ3JhbW1lIHlvdSBoYXZlIGFwcGxpY2F0ZWQsIGN1c3RvbWlzaW5nIExv eWFsdHkgUHJvZ3JhbW1lIHNlcnZpY2VzIHRvIG1lbWJlciZhY3V0ZTtzIHByZWZlcmVuY2VzIGFu ZCB0YXN0ZXMsIGFzIHdlbGwgYXMgc2VuZGluZyBjb21tZXJjaWFsIGNvbW11bmljYXRpb25zIHZp YSBlbWFpbCBvciBlcXVpdmFsZW50IG1ldGhvZHMgYWJvdXQgb2ZmZXIgYW5kIHNlcnZpY2VzIHJl bGF0ZWQgdG8gdGhlIFByb2dyYW1tZS4gVGhlIGxhd2Z1bCBpcyB0aGUgY29udHJhY3R1YWwgcmVs YXRpb25zaGlwIGJldHdlZW4gdGhlIHBhcnRpZXMuIFRoZSBwZXJzb25hbCBkYXRhIHdpbGwgYmUg a2VwdCBkdXJpbmcgdGhpcyBjb250cmFjdHVhbCByZWxhdGlvbnNoaXAgYW5kLCBhZnRlciB0aGlz LCBmb3IgdGhlIGxpbWl0YXRpb24gcGVyaW9kIGZvciBsZWdhbCBhY3Rpb25zIHRoYXQgY291bGQg cmVzdWx0IGZyb20gaXQuIFlvdSBjYW4gZXhlcmNpc2UgdGhlIHJpZ2h0cyBvZiBhY2Nlc3MsIGNv cnJlY3Rpb24sIGVyYXN1cmUsIG9iamVjdGlvbiwgbGltaXRhdGlvbiBvbiBwcm9jZXNzaW5nIGFu ZCBwb3J0YWJpbGl0eSBvZiB5b3VyIHBlcnNvbmFsIGRhdGEgYnkgd3JpdGluZyB0byB0aGUgZm9s bG93aW5nIGVtYWlsIGFkZHJlc3M6IDxhIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciIgaHJlZj0i bWFpbHRvOmRhdGFwcm90ZWN0aW9uQG1pbm9yLWhvdGVscy5jb20iIHRhcmdldD0iX2JsYW5rIiB0 aXRsZT0iZGF0YXByb3RlY3Rpb25AbWlub3ItaG90ZWxzLmNvbSIgc3R5bGU9ImNvbG9yOiAjZmZm ZmZmOyBmb250LWZhbWlseTogQXJpYWwsIHNhbnMtc2VyaWY7Ij5kYXRhcHJvdGVjdGlvbkBtaW5v ci1ob3RlbHMuY29tPC9hPiBhbmQgY29udGFjdCBvdXIgRFBPIGluIHRoZSBlbWFpbCBhZGRyZXNz IDxhIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciIgaHJlZj0ibWFpbHRvOmRwb0BtaW5vci1ob3Rl bHMuY29tIiB0YXJnZXQ9Il9ibGFuayIgc3R5bGU9ImNvbG9yOiAjZmZmZmZmOyBmb250LWZhbWls eTogQXJpYWwsIHNhbnMtc2VyaWY7Ij5kcG9AbWlub3ItaG90ZWxzLmNvbTwvYT4uIFlvdSBjYW4g Y29uc3VsdCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IG91ciBQcml2YWN5IFBvbGljeSBpbiB0aGUg Zm9sbG93aW5nIGxpbms6IDxhIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciIgaHJlZj0iaHR0cHM6 Ly9kaWdpdGFsLm5oLWhvdGVscy5jb206NDQzL3NhcC9wdWJsaWMvY3Vhbi9saW5rLzEwMC9DQ0ZG Q0IyMTMwQ0YyMDZENTc0MzE1Q0Y0MzJGQTQxM0U2MDk2NEQxP19WXz0yJl9LMTFfPTQxN0QyRTVB OThGNjY0QUE5RUMyOTc2MEJCRjlBMThERjMxRDhGQzUmX0w1NEFEMUYyMDRfPWMyTmxibUZ5YVc4 OVRVeERVRWNtZEdGeVoyVjBQV2gwZEhCek9pOHZkM2QzTG0xcGJtOXlhRzkwWld4ekxtTnZiUzls Ymk5c2IzbGhiSFI1TDNCeWFYWmhZM2t0Y0c5c2FXTjVQM1YwYlY5dFpXUnBkVzA5WlcxaGFXeHBi bWNtZFhSdFgzTnZkWEpqWlQxcGJuUmxjbTVoYkMxaGJHd21kWFJ0WDJOaGJYQmhhV2R1UFdWdFlX bHNhVzVuWDJsdWRHVnlibUZzTFdGc2JDWjFkRzFmZEdWeWJUMHlNREkwTFdobFlXUmxjbVp2YjNS bGNpWjFkRzFmWTI5dWRHVnVkRDFGVGlaallXMXdhV1E5T1RZM05UQXpOQ1p6WVhBdGIzVjBZbTkx Ym1RdGFXUTlRME5HUmtOQ01qRXpNRU5HTWpBMlJEVTNORE14TlVOR05ETXlSa0UwTVRORk5qQTVO alJFTVEmX0sxM189MzY1Jl9LMTRfPWQ2OGYxZjcxMWU1ZDYyNDAzYmQ2YmYzNTlkNDM4OGJmMDU4 Yjg1YjZhM2ZmNDViNGY3MDIzOWExMzQ5ZWUyMjUiIHRhcmdldD0iX2JsYW5rIiBzdHlsZT0iY29s b3I6ICNmZmZmZmY7IGZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjsiPnd3dy5taW5vcmhv dGVscy5jb20vZW4vbG95YWx0eS9wcml2YWN5LXBvbGljeTwvYT4uIFRoaXMgZS1tYWlsLCBpbmNs dWRpbmcgYW55IGF0dGFjaG1lbnRzIGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkIHRoZXJl aW4sIGlzIGNvbmZpZGVudGlhbC4gSWYgeW91IGFyZSBub3QgdGhlIGludGVuZGVkIHJlY2lwaWVu dCBvZiB0aGlzIG1lc3NhZ2UsIHlvdSBhcmUgbm90IGFsbG93ZWQgdG8gdXNlIGl0LCBjb3B5IGl0 IG9yIGRpc2Nsb3NlIGl0LCB0b3RhbGx5IG9yIHBhcnRpYWxseSwgYnkgYW55IG1lYW5zLiBJbiBz dWNoIGV2ZW50LCBwbGVhc2Ugc2VuZCB0aGUgbWVzc2FnZSBiYWNrIHRvIHRoZSBzZW5kZXIgYW5k IGRlbGV0ZSBpdC4gQW55IHVuYXV0aG9yaXplZCBwdWJsaWNhdGlvbiwgdXNlLCBjb3B5LCBkaXNz ZW1pbmF0aW9uIG9yIGRpc2Nsb3N1cmUgb2YgdGhpcyBtZXNzYWdlIG9yIGFueSBvZiBpdHMgYXR0 YWNobWVudHMsIGVpdGhlciBpbiB3aG9sZSBvciBpbiBwYXJ0LCB3aGljaGV2ZXIgdGhlIHB1cnBv c2UgbWlnaHQgYmUsIGlzIHN0cmljdGx5IHByb2hpYml0ZWQuPC90ZD4KPC90cj4KPHRyIHN0eWxl PSJoZWlnaHQ6IDY1cHg7Ij4KPHRkIGhlaWdodD0iNjUiIHN0eWxlPSJmb250LXNpemU6IDFweDsg bGluZS1oZWlnaHQ6IDFweDsgaGVpZ2h0OiA2NXB4OyI+Jm5ic3A7PC90ZD4KPC90cj4KPC90Ym9k eT4KPC90YWJsZT4KPC90ZD4KPC90cj4KPC90Ym9keT4KPC90YWJsZT48L2Rpdj48IS0tW2lmIG1z b10+PC90ZD48L3RyPjwvdGFibGU+PCFbZW5kaWZdLS0+PCEtLSBib2R5LWNvbnRlbnQtcGxhY2Vo b2xkZXIgLS0+PCEtLSBib2R5LWNvbnRlbnQtcGxhY2Vob2xkZXIgLS0+PCEtLSBib2R5LWNvbnRl bnQtcGxhY2Vob2xkZXIgLS0+PCEtLSBib2R5LWNvbnRlbnQtcGxhY2Vob2xkZXIgLS0+PCEtLSBi b2R5LWNvbnRlbnQtcGxhY2Vob2xkZXIgLS0+PCEtLSBib2R5LWNvbnRlbnQtcGxhY2Vob2xkZXIg LS0+PCEtLSBib2R5LWNvbnRlbnQtcGxhY2Vob2xkZXIgLS0+PCEtLSBib2R5LWNvbnRlbnQtcGxh Y2Vob2xkZXIgLS0+PCEtLSBib2R5LWNvbnRlbnQtcGxhY2Vob2xkZXIgLS0+PC9wPgoJCQkJCQoJ CQkJCQkJCgkJCQkJCgkJCQkJPCEtLSBib2R5LWNvbnRlbnQtcGxhY2Vob2xkZXIgLS0+PCEtLSBi b2R5LWNvbnRlbnQtcGxhY2Vob2xkZXIgLS0+PCEtLSBib2R5LWNvbnRlbnQtcGxhY2Vob2xkZXIg LS0+PCEtLSBib2R5LWNvbnRlbnQtcGxhY2Vob2xkZXIgLS0+PCEtLSBib2R5LWNvbnRlbnQtcGxh Y2Vob2xkZXIgLS0+PC90ZD4KCQkJCTwvdHI+CgkJCTwvdGJvZHk+PC90YWJsZT4KCgkJCTwhLS1b aWYgKGd0ZSBtc28gOSl8KElFKV0+CgkJCQk8L3RkPgoJCQk8L3RyPgoJCTwvdGFibGU+CgkJPCFb ZW5kaWZdLS0+CgoJPC9kaXY+CjwvZGl2Pgo8IS0tL0NPTlRFTlQtLT4KCjwvYm9keT48L2h0bWw+ --yMKT1508-- From - Mon Oct 13 15:56:01 2025 X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 Return-Path: Delivered-To: hi@josie.lol Received: from witcher.mxrouting.net by witcher.mxrouting.net with LMTP id 6I1HGvcg7WiEQT4AYBR5ng (envelope-from ) for ; Mon, 13 Oct 2025 15:55:35 +0000 Return-path: Envelope-to: hi@josie.lol Delivery-date: Mon, 13 Oct 2025 15:55:35 +0000 Received: from am.mirrors.kernel.org ([147.75.80.249]) by witcher.mxrouting.net with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.98) (envelope-from ) id 1v8Ktb-0000000HKLA-0Wm7 for hi@josie.lol; Mon, 13 Oct 2025 15:55:35 +0000 Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id DE30318A6000 for ; Mon, 13 Oct 2025 15:55:57 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 2292B31AF18; Mon, 13 Oct 2025 15:35:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="VVvQy98G" X-Original-To: stable@vger.kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 E7AE631AF16; Mon, 13 Oct 2025 15:35:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369747; cv=none; b=Y9neeV6+D56TPlWz8g4SCjvrffcB/sEDqupo108Q3OFvUh830Yt6yHrCpYMKMWP1bopB6vVe7nz5tQlxqk6IOrdTFRrpPJ2IoHsL/y04IBkfenX8g7bJEYu6Me5gs3EzKCDD5m7jANsj+KnhSEI1/wnC2hw93kslICNU3Du37Vg= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369747; c=relaxed/simple; bh=TY/zMOBg6NlhFlQ2cTvwkGXqrmaEnqAShvKuRxAZHUo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JKTBjpPWWGyIKkd2B3dNZ2JaeHLRvr+0ZUWCkaTzMv6t291vhjcJBeYyg0Qh0M8KbVrvy9btmCVznpoiswlTYR80UXKwYn5v7idbqj3R9Zf6gwOwpFv9Ywpj9R5Uwih3CH16LK1LUptAUVkOBCiweJrEo3DiI4t/xBzgydqgFX8= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b=VVvQy98G; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2CFA0C2BCFB; Mon, 13 Oct 2025 15:35:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1760369746; bh=TY/zMOBg6NlhFlQ2cTvwkGXqrmaEnqAShvKuRxAZHUo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=VVvQy98GrUy6TG8M7p3KbgngPkZvzB2wWRfpSgh9wAWcdxR8QBmFbquflbPIRb8rK yTcblbrcYJd+38JsjA91R21ag2hft+FtYArTuvE7GdHK4q04LZkZ0M9dhSiIWaSsw/ onvtG4fSTe9fFz9xlLkZTn5SeD+zc+yXpXg460Ew= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, Abdun Nihaal , Jiri Slaby , Felix Fietkau , Sasha Levin Subject: [PATCH 6.17 355/563] wifi: mt76: fix potential memory leak in mt76_wmac_probe() Date: Mon, 13 Oct 2025 16:43:36 +0200 Message-ID: <20251013144424.129712060@linuxfoundation.org> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251013144411.274874080@linuxfoundation.org> References: <20251013144411.274874080@linuxfoundation.org> User-Agent: quilt/0.69 X-stable: review X-Patchwork-Hint: ignore Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-DKIM: signer='linuxfoundation.org' status='pass' reason='' DKIMCheck: Server passes DKIM test, 0 Spam score X-Spam-Score: 0.4 (/) X-Spam-Report: Spam detection software, running on the system "witcher.mxrouting.net", has performed the tests listed below against this email. Information: https://mxroutedocs.com/directadmin/spamfilters/ --- Content analysis details: (0.4 points) --- pts rule name description ---- ---------------------- ----------------------------------------- 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [URIs: msgid.link] 0.0 RCVD_IN_DNSWL_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to DNSWL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#DnsBlocklists-dnsbl-block for more information. [147.75.80.249 listed in list.dnswl.org] 1.5 HEADER_FROM_DIFFERENT_DOMAINS From and EnvelopeFrom 2nd level mail domains are different -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -1.0 MAILING_LIST_MULTI Multiple indicators imply a widely-seen list manager -0.0 DKIMWL_WL_HIGH DKIMwl.org - High trust sender SpamTally: Final spam score: 4 6.17-stable review patch. If anyone has any objections, please let me know. ------------------ From: Abdun Nihaal [ Upstream commit 42754b7de2b1a2cf116c5e3f1e8e78392f4ed700 ] In mt76_wmac_probe(), when the mt76_alloc_device() call succeeds, memory is allocated for both struct ieee80211_hw and a workqueue. However, on the error path, the workqueue is not freed. Fix that by calling mt76_free_device() on the error path. Fixes: c8846e101502 ("mt76: add driver for MT7603E and MT7628/7688") Signed-off-by: Abdun Nihaal Reviewed-by: Jiri Slaby Link: https://patch.msgid.link/20250709145532.41246-1-abdun.nihaal@gmail.com Signed-off-by: Felix Fietkau Signed-off-by: Sasha Levin --- drivers/net/wireless/mediatek/mt76/mt7603/soc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt7603/soc.c b/drivers/net/wireless/mediatek/mt76/mt7603/soc.c index 08590aa68356f..1dd3723720480 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7603/soc.c +++ b/drivers/net/wireless/mediatek/mt76/mt7603/soc.c @@ -48,7 +48,7 @@ mt76_wmac_probe(struct platform_device *pdev) return 0; error: - ieee80211_free_hw(mt76_hw(dev)); + mt76_free_device(mdev); return ret; } -- 2.51.0 From - Mon Oct 13 15:56:01 2025 X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 Return-Path: Delivered-To: hi@josie.lol Received: from witcher.mxrouting.net by witcher.mxrouting.net with LMTP id mGlTHugg7WhdBT4AYBR5ng (envelope-from ) for ; Mon, 13 Oct 2025 15:55:20 +0000 Return-path: Envelope-to: hi@josie.lol Delivery-date: Mon, 13 Oct 2025 15:55:20 +0000 Received: from am.mirrors.kernel.org ([147.75.80.249]) by witcher.mxrouting.net with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.98) (envelope-from ) id 1v8KtL-0000000HJul-42yM for hi@josie.lol; Mon, 13 Oct 2025 15:55:20 +0000 Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 7E39218A5EF0 for ; Mon, 13 Oct 2025 15:55:42 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id C0A92313541; Mon, 13 Oct 2025 15:35:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="quGd6ux7" X-Original-To: stable@vger.kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 98CAC31353D; Mon, 13 Oct 2025 15:35:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369743; cv=none; b=mGRYELfrdshnd0KMHtv0yDCSPirSmNZG5xh5XBmt/j20LWs5o9nmo5r3/5RYMUGgdBpG35JPdZk0YCoIgAh+pqJ+PpJabEIgDgWJWv5RevMn1TU+1GLrm+okWqdv/dqvoH1Y0a4YGmUsDfMY3/vgfC03VDwYU+jEbvYJAg4HstU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369743; c=relaxed/simple; bh=Q1QYFR90UNWwCpLb9Pd9Z6pGWp57+ApjRYsp3x9y20A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=FC9s6Qd5On9FqqarBSqM9KnvMyQyg93aBIG+4zjsDdY25WrvAfIvDUKFgAGNGLGEXDUkxXGNHBJUbmiDJWuvLZwO0hF+UZofUKjP81en3h/LOe1CcHx75JOXnF5lvhsv2j/5Ci6mawdfnGw6rNgZ/cq9/BfR5j1ACwi8JCCuzXE= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b=quGd6ux7; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id DDF14C2BCC7; Mon, 13 Oct 2025 15:35:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1760369743; bh=Q1QYFR90UNWwCpLb9Pd9Z6pGWp57+ApjRYsp3x9y20A=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=quGd6ux7bBR59wFHdEP4MeCQziFren3mKILUATmY6KOYw2aiKrepc36VkEMz4gQPY SiqdR6Bi5ZlpGyfyTJuwReSsXnSOMZGzWAlEskFNi0p5heGp5O0KxYHH3usR768TsP 0muw3r7afJ6bA3ljAr8xAXUBpAA6gpWdpWwxS4TU= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, Lorenzo Bianconi , Felix Fietkau , Sasha Levin Subject: [PATCH 6.17 354/563] wifi: mt76: mt7996: Fix mt7996_mcu_bss_mld_tlv routine Date: Mon, 13 Oct 2025 16:43:35 +0200 Message-ID: <20251013144424.093423382@linuxfoundation.org> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251013144411.274874080@linuxfoundation.org> References: <20251013144411.274874080@linuxfoundation.org> User-Agent: quilt/0.69 X-stable: review X-Patchwork-Hint: ignore Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-DKIM: signer='linuxfoundation.org' status='pass' reason='' DKIMCheck: Server passes DKIM test, 0 Spam score X-Spam-Score: 0.4 (/) X-Spam-Report: Spam detection software, running on the system "witcher.mxrouting.net", has performed the tests listed below against this email. Information: https://mxroutedocs.com/directadmin/spamfilters/ --- Content analysis details: (0.4 points) --- pts rule name description ---- ---------------------- ----------------------------------------- 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [URIs: msgid.link] 0.0 RCVD_IN_DNSWL_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to DNSWL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#DnsBlocklists-dnsbl-block for more information. [147.75.80.249 listed in list.dnswl.org] 1.5 HEADER_FROM_DIFFERENT_DOMAINS From and EnvelopeFrom 2nd level mail domains are different -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -1.0 MAILING_LIST_MULTI Multiple indicators imply a widely-seen list manager -0.0 DKIMWL_WL_HIGH DKIMwl.org - High trust sender SpamTally: Final spam score: 4 6.17-stable review patch. If anyone has any objections, please let me know. ------------------ From: Lorenzo Bianconi [ Upstream commit ed01c310eca96453c11b59db46c855aa593cffdd ] Update mt7996_mcu_bss_mld_tlv routine to properly support MLO configuring the BSS. Fixes: 98686cd21624c ("wifi: mt76: mt7996: add driver for MediaTek Wi-Fi 7 (802.11be) devices") Signed-off-by: Lorenzo Bianconi Link: https://patch.msgid.link/20250710-mt7996-mlo-fixes-v3-v1-1-e7595b089f2c@kernel.org Signed-off-by: Felix Fietkau Signed-off-by: Sasha Levin --- .../net/wireless/mediatek/mt76/mt7996/main.c | 46 ++++++++++++++++++- .../net/wireless/mediatek/mt76/mt7996/mcu.c | 26 ++++++++--- .../net/wireless/mediatek/mt76/mt7996/mcu.h | 3 +- .../wireless/mediatek/mt76/mt7996/mt7996.h | 8 ++++ 4 files changed, 75 insertions(+), 8 deletions(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/main.c b/drivers/net/wireless/mediatek/mt76/mt7996/main.c index 8a8a478391646..3c34a4980afa0 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7996/main.c +++ b/drivers/net/wireless/mediatek/mt76/mt7996/main.c @@ -138,6 +138,28 @@ static int get_omac_idx(enum nl80211_iftype type, u64 mask) return -1; } +static int get_own_mld_idx(u64 mask, bool group_mld) +{ + u8 start = group_mld ? 0 : 16; + u8 end = group_mld ? 15 : 63; + int idx; + + idx = get_free_idx(mask, start, end); + if (idx) + return idx - 1; + + /* If the 16-63 range is not available, perform another lookup in the + * range 0-15 + */ + if (!group_mld) { + idx = get_free_idx(mask, 0, 15); + if (idx) + return idx - 1; + } + + return -EINVAL; +} + static void mt7996_init_bitrate_mask(struct ieee80211_vif *vif, struct mt7996_vif_link *mlink) { @@ -279,7 +301,7 @@ int mt7996_vif_link_add(struct mt76_phy *mphy, struct ieee80211_vif *vif, struct mt7996_dev *dev = phy->dev; u8 band_idx = phy->mt76->band_idx; struct mt76_txq *mtxq; - int idx, ret; + int mld_idx, idx, ret; mlink->idx = __ffs64(~dev->mt76.vif_mask); if (mlink->idx >= mt7996_max_interface_num(dev)) @@ -289,6 +311,17 @@ int mt7996_vif_link_add(struct mt76_phy *mphy, struct ieee80211_vif *vif, if (idx < 0) return -ENOSPC; + if (!dev->mld_idx_mask) { /* first link in the group */ + mvif->mld_group_idx = get_own_mld_idx(dev->mld_idx_mask, true); + mvif->mld_remap_idx = get_free_idx(dev->mld_remap_idx_mask, + 0, 15); + } + + mld_idx = get_own_mld_idx(dev->mld_idx_mask, false); + if (mld_idx < 0) + return -ENOSPC; + + link->mld_idx = mld_idx; link->phy = phy; mlink->omac_idx = idx; mlink->band_idx = band_idx; @@ -301,6 +334,11 @@ int mt7996_vif_link_add(struct mt76_phy *mphy, struct ieee80211_vif *vif, return ret; dev->mt76.vif_mask |= BIT_ULL(mlink->idx); + if (!dev->mld_idx_mask) { + dev->mld_idx_mask |= BIT_ULL(mvif->mld_group_idx); + dev->mld_remap_idx_mask |= BIT_ULL(mvif->mld_remap_idx); + } + dev->mld_idx_mask |= BIT_ULL(link->mld_idx); phy->omac_mask |= BIT_ULL(mlink->omac_idx); idx = MT7996_WTBL_RESERVED - mlink->idx; @@ -380,7 +418,13 @@ void mt7996_vif_link_remove(struct mt76_phy *mphy, struct ieee80211_vif *vif, } dev->mt76.vif_mask &= ~BIT_ULL(mlink->idx); + dev->mld_idx_mask &= ~BIT_ULL(link->mld_idx); phy->omac_mask &= ~BIT_ULL(mlink->omac_idx); + if (!(dev->mld_idx_mask & ~BIT_ULL(mvif->mld_group_idx))) { + /* last link */ + dev->mld_idx_mask &= ~BIT_ULL(mvif->mld_group_idx); + dev->mld_remap_idx_mask &= ~BIT_ULL(mvif->mld_remap_idx); + } spin_lock_bh(&dev->mt76.sta_poll_lock); if (!list_empty(&msta_link->wcid.poll_list)) diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c index e6db3e0b2ffda..aad58f7831c7b 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c +++ b/drivers/net/wireless/mediatek/mt76/mt7996/mcu.c @@ -899,17 +899,28 @@ mt7996_mcu_bss_txcmd_tlv(struct sk_buff *skb, bool en) } static void -mt7996_mcu_bss_mld_tlv(struct sk_buff *skb, struct mt76_vif_link *mlink) +mt7996_mcu_bss_mld_tlv(struct sk_buff *skb, + struct ieee80211_bss_conf *link_conf, + struct mt7996_vif_link *link) { + struct ieee80211_vif *vif = link_conf->vif; + struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv; struct bss_mld_tlv *mld; struct tlv *tlv; tlv = mt7996_mcu_add_uni_tlv(skb, UNI_BSS_INFO_MLD, sizeof(*mld)); - mld = (struct bss_mld_tlv *)tlv; - mld->group_mld_id = 0xff; - mld->own_mld_id = mlink->idx; - mld->remap_idx = 0xff; + mld->own_mld_id = link->mld_idx; + mld->link_id = link_conf->link_id; + + if (ieee80211_vif_is_mld(vif)) { + mld->group_mld_id = mvif->mld_group_idx; + mld->remap_idx = mvif->mld_remap_idx; + memcpy(mld->mac_addr, vif->addr, ETH_ALEN); + } else { + mld->group_mld_id = 0xff; + mld->remap_idx = 0xff; + } } static void @@ -1108,6 +1119,8 @@ int mt7996_mcu_add_bss_info(struct mt7996_phy *phy, struct ieee80211_vif *vif, goto out; if (enable) { + struct mt7996_vif_link *link; + mt7996_mcu_bss_rfch_tlv(skb, phy); mt7996_mcu_bss_bmc_tlv(skb, mlink, phy); mt7996_mcu_bss_ra_tlv(skb, phy); @@ -1118,7 +1131,8 @@ int mt7996_mcu_add_bss_info(struct mt7996_phy *phy, struct ieee80211_vif *vif, mt7996_mcu_bss_he_tlv(skb, vif, link_conf, phy); /* this tag is necessary no matter if the vif is MLD */ - mt7996_mcu_bss_mld_tlv(skb, mlink); + link = container_of(mlink, struct mt7996_vif_link, mt76); + mt7996_mcu_bss_mld_tlv(skb, link_conf, link); } mt7996_mcu_bss_mbssid_tlv(skb, link_conf, enable); diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/mcu.h b/drivers/net/wireless/mediatek/mt76/mt7996/mcu.h index 130ea95626d5b..7b21d6ae7e435 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7996/mcu.h +++ b/drivers/net/wireless/mediatek/mt76/mt7996/mcu.h @@ -481,7 +481,8 @@ struct bss_mld_tlv { u8 own_mld_id; u8 mac_addr[ETH_ALEN]; u8 remap_idx; - u8 __rsv[3]; + u8 link_id; + u8 __rsv[2]; } __packed; struct sta_rec_ht_uni { diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/mt7996.h b/drivers/net/wireless/mediatek/mt76/mt7996/mt7996.h index bbd4679edc9d3..b98cfe6e5be8c 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7996/mt7996.h +++ b/drivers/net/wireless/mediatek/mt76/mt7996/mt7996.h @@ -248,11 +248,16 @@ struct mt7996_vif_link { struct ieee80211_tx_queue_params queue_params[IEEE80211_NUM_ACS]; struct cfg80211_bitrate_mask bitrate_mask; + + u8 mld_idx; }; struct mt7996_vif { struct mt7996_vif_link deflink; /* must be first */ struct mt76_vif_data mt76; + + u8 mld_group_idx; + u8 mld_remap_idx; }; /* crash-dump */ @@ -337,6 +342,9 @@ struct mt7996_dev { u32 q_int_mask[MT7996_MAX_QUEUE]; u32 q_wfdma_mask; + u64 mld_idx_mask; + u64 mld_remap_idx_mask; + const struct mt76_bus_ops *bus_ops; struct mt7996_phy phy; -- 2.51.0 From - Mon Oct 13 15:56:01 2025 X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 Return-Path: Delivered-To: hi@josie.lol Received: from witcher.mxrouting.net by witcher.mxrouting.net with LMTP id MF09NYwg7WhVojMAYBR5ng (envelope-from ) for ; Mon, 13 Oct 2025 15:53:48 +0000 Return-path: Envelope-to: hi@josie.lol Delivery-date: Mon, 13 Oct 2025 15:53:48 +0000 Received: from am.mirrors.kernel.org ([147.75.80.249]) by witcher.mxrouting.net with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.98) (envelope-from ) id 1v8Krs-0000000HHGb-28WO for hi@josie.lol; Mon, 13 Oct 2025 15:53:48 +0000 Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 3648018A5215 for ; Mon, 13 Oct 2025 15:54:11 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 1B8C330F95D; Mon, 13 Oct 2025 15:35:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="wAQ3N298" X-Original-To: stable@vger.kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 E7A7730F955; Mon, 13 Oct 2025 15:35:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369706; cv=none; b=XKYU7iJHiJas/7hzEAdZOnHNpfT++kgx2tWSwnCOMZdwk38vNs8o9sC905+HzhpJON1P+v2Cw3fjqYT66URX10THXlnooe1vSQ0/696LE6YuKrAzeD9Zw8F+hu45UUp/ckUrP6Ii0tXURI0B5tLGFu/jqOJnJ6ZQ5XFzHexhHz0= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369706; c=relaxed/simple; bh=W64ANFtBWKmqauUBwHeU/5/T8M6A9VDIl76xHBvRpDs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=FLTQgU7f45jNq/yB6yXtaLRyNfo3Ce8u0FVjBG3PLEzKyVfLM96F/hJjkUEE8yXu1k+VjLlwrBmDKkTSFEp2TYQBvipaf3O5RUTQRorBZJw2cKKrbTKFinevgw2OolTCaisxgnPYumERWB8Rq3oarw17B3WSO8RrnZiNdO5Z0PE= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b=wAQ3N298; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 66396C4CEE7; Mon, 13 Oct 2025 15:35:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1760369705; bh=W64ANFtBWKmqauUBwHeU/5/T8M6A9VDIl76xHBvRpDs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=wAQ3N298UmNlcS9aRi4gqoYJmMBJpMPo4+fpuHjlEmYM9E/7VwkQrq6gRhy04cP/3 BQOknwssC9wKK9WREofeGKsaDUbKJaS2x6g1hBA2nAXSzCQOVBYmqiUeR5s2cIPdtB 6wkcSDFZgWZO7H2ZsxfESe2WrwZ3ydoA9mKj2T3I= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, syzbot+b0373017f711c06ada64@syzkaller.appspotmail.com, Moon Hee Lee , Konstantin Komarov , Sasha Levin Subject: [PATCH 6.17 339/563] fs/ntfs3: reject index allocation if $BITMAP is empty but blocks exist Date: Mon, 13 Oct 2025 16:43:20 +0200 Message-ID: <20251013144423.550705949@linuxfoundation.org> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251013144411.274874080@linuxfoundation.org> References: <20251013144411.274874080@linuxfoundation.org> User-Agent: quilt/0.69 X-stable: review X-Patchwork-Hint: ignore Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-DKIM: signer='linuxfoundation.org' status='pass' reason='' DKIMCheck: Server passes DKIM test, 0 Spam score X-Spam-Score: -1.9 (-) X-Spam-Report: Spam detection software, running on the system "witcher.mxrouting.net", has performed the tests listed below against this email. Information: https://mxroutedocs.com/directadmin/spamfilters/ --- Content analysis details: (-1.9 points) --- pts rule name description ---- ---------------------- ----------------------------------------- 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [URIs: linuxfoundation.org] -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [147.75.80.249 listed in list.dnswl.org] 1.5 HEADER_FROM_DIFFERENT_DOMAINS From and EnvelopeFrom 2nd level mail domains are different -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -1.0 MAILING_LIST_MULTI Multiple indicators imply a widely-seen list manager -0.0 DKIMWL_WL_HIGH DKIMwl.org - High trust sender SpamTally: Final spam score: -18 6.17-stable review patch. If anyone has any objections, please let me know. ------------------ From: Moon Hee Lee [ Upstream commit 0dc7117da8f92dd5fe077d712a756eccbe377d40 ] Index allocation requires at least one bit in the $BITMAP attribute to track usage of index entries. If the bitmap is empty while index blocks are already present, this reflects on-disk corruption. syzbot triggered this condition using a malformed NTFS image. During a rename() operation involving a long filename (which spans multiple index entries), the empty bitmap allowed the name to be added without valid tracking. Subsequent deletion of the original entry failed with -ENOENT, due to unexpected index state. Reject such cases by verifying that the bitmap is not empty when index blocks exist. Reported-by: syzbot+b0373017f711c06ada64@syzkaller.appspotmail.com Closes: https://syzkaller.appspot.com/bug?extid=b0373017f711c06ada64 Fixes: d99208b91933 ("fs/ntfs3: cancle set bad inode after removing name fails") Tested-by: syzbot+b0373017f711c06ada64@syzkaller.appspotmail.com Signed-off-by: Moon Hee Lee Signed-off-by: Konstantin Komarov Signed-off-by: Sasha Levin --- fs/ntfs3/index.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/fs/ntfs3/index.c b/fs/ntfs3/index.c index 1bf2a6593dec6..6d1bf890929d9 100644 --- a/fs/ntfs3/index.c +++ b/fs/ntfs3/index.c @@ -1508,6 +1508,16 @@ static int indx_add_allocate(struct ntfs_index *indx, struct ntfs_inode *ni, bmp_size = bmp_size_v = le32_to_cpu(bmp->res.data_size); } + /* + * Index blocks exist, but $BITMAP has zero valid bits. + * This implies an on-disk corruption and must be rejected. + */ + if (in->name == I30_NAME && + unlikely(bmp_size_v == 0 && indx->alloc_run.count)) { + err = -EINVAL; + goto out1; + } + bit = bmp_size << 3; } -- 2.51.0 From - Mon Oct 13 15:56:01 2025 X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 Return-Path: Delivered-To: hi@josie.lol Received: from witcher.mxrouting.net by witcher.mxrouting.net with LMTP id yGk/L20g7Wh1QT4AYBR5ng (envelope-from ) for ; Mon, 13 Oct 2025 15:53:17 +0000 Return-path: Envelope-to: hi@josie.lol Delivery-date: Mon, 13 Oct 2025 15:53:17 +0000 Received: from am.mirrors.kernel.org ([147.75.80.249]) by witcher.mxrouting.net with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.98) (envelope-from ) id 1v8KrN-0000000HFiQ-0pxF for hi@josie.lol; Mon, 13 Oct 2025 15:53:17 +0000 Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id C9DE618A4A1D for ; Mon, 13 Oct 2025 15:53:39 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 6352F30F7F1; Mon, 13 Oct 2025 15:34:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="cXTQVxeB" X-Original-To: stable@vger.kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 3AB6230F92A; Mon, 13 Oct 2025 15:34:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369680; cv=none; b=GYQ48QddjkGA1LvbC5orMXTSRU8RtHUrC0QpbrTEcK0jjWiayfA6+P+6IJwek32XTiGpK+eRNIrxvhupNu1JvtdCPktjddivFIFhrcQ3vno+vImaMp7ICJq+NeYkqoj9GDLlwMELtDMfXJ6xRt0LCuQr9lMwRL40wlUY1K1lCpo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369680; c=relaxed/simple; bh=uDJqEjK5q7EGq0guwt36E67b05ByvMFB/aw68dfdlgQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=MsqYr1lGDjr4jraixgeqNU98XZLSH7CmsC5384jFxmB9OApgtOIBA61QqA0FePwQa5hmYHeCK2pOTiN4uA4BbblU0Uf8mMdv4xW/C4qCV5OsUegmYF7MV54Hs58lI/BzoDAZ9geogZP2A5Ayma+CUuQGB0SBot8dlzURUWrbTc0= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b=cXTQVxeB; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id BDC98C4CEE7; Mon, 13 Oct 2025 15:34:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1760369680; bh=uDJqEjK5q7EGq0guwt36E67b05ByvMFB/aw68dfdlgQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=cXTQVxeBsjqff6T9OmEeUt741jMVe+p8wDcVYFE2rfOC+64wrq+fEfeOYiMQOZam+ W/Pw77Yt0DW4hI0NoAbiG2zEFkyoaQdx4kK4Fh2O7B7HzfEzBlAcovZnxzYpPPBGU2 FGsLeNUh95Gi1wS1qDnZjcGVs3/m24lTrSgkzsnY= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, Takashi Iwai , Mark Brown , Sasha Levin Subject: [PATCH 6.17 331/563] ASoC: Intel: bytcr_rt5640: Fix invalid quirk input mapping Date: Mon, 13 Oct 2025 16:43:12 +0200 Message-ID: <20251013144423.253534693@linuxfoundation.org> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251013144411.274874080@linuxfoundation.org> References: <20251013144411.274874080@linuxfoundation.org> User-Agent: quilt/0.69 X-stable: review X-Patchwork-Hint: ignore Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-DKIM: signer='linuxfoundation.org' status='pass' reason='' DKIMCheck: Server passes DKIM test, 0 Spam score X-Spam-Score: 0.4 (/) X-Spam-Report: Spam detection software, running on the system "witcher.mxrouting.net", has performed the tests listed below against this email. Information: https://mxroutedocs.com/directadmin/spamfilters/ --- Content analysis details: (0.4 points) --- pts rule name description ---- ---------------------- ----------------------------------------- 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [URIs: linuxfoundation.org] 0.0 RCVD_IN_DNSWL_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to DNSWL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#DnsBlocklists-dnsbl-block for more information. [147.75.80.249 listed in list.dnswl.org] 1.5 HEADER_FROM_DIFFERENT_DOMAINS From and EnvelopeFrom 2nd level mail domains are different -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -1.0 MAILING_LIST_MULTI Multiple indicators imply a widely-seen list manager -0.0 DKIMWL_WL_HIGH DKIMwl.org - High trust sender SpamTally: Final spam score: 4 6.17-stable review patch. If anyone has any objections, please let me know. ------------------ From: Takashi Iwai [ Upstream commit fba404e4b4af4f4f747bb0e41e9fff7d03c7bcc0 ] When an invalid value is passed via quirk option, currently bytcr_rt5640 driver only shows an error message but leaves as is. This may lead to unepxected results like OOB access. This patch corrects the input mapping to the certain default value if an invalid value is passed. Fixes: 063422ca2a9d ("ASoC: Intel: bytcr_rt5640: Set card long_name based on quirks") Signed-off-by: Takashi Iwai Message-ID: <20250902171826.27329-3-tiwai@suse.de> Signed-off-by: Mark Brown Signed-off-by: Sasha Levin --- sound/soc/intel/boards/bytcr_rt5640.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/sound/soc/intel/boards/bytcr_rt5640.c b/sound/soc/intel/boards/bytcr_rt5640.c index 0f3b8f44e7011..bc846558480e4 100644 --- a/sound/soc/intel/boards/bytcr_rt5640.c +++ b/sound/soc/intel/boards/bytcr_rt5640.c @@ -68,7 +68,8 @@ enum { BYT_RT5640_OVCD_SF_1P5 = (RT5640_OVCD_SF_1P5 << 13), }; -#define BYT_RT5640_MAP(quirk) ((quirk) & GENMASK(3, 0)) +#define BYT_RT5640_MAP_MASK GENMASK(3, 0) +#define BYT_RT5640_MAP(quirk) ((quirk) & BYT_RT5640_MAP_MASK) #define BYT_RT5640_JDSRC(quirk) (((quirk) & GENMASK(7, 4)) >> 4) #define BYT_RT5640_OVCD_TH(quirk) (((quirk) & GENMASK(12, 8)) >> 8) #define BYT_RT5640_OVCD_SF(quirk) (((quirk) & GENMASK(14, 13)) >> 13) @@ -140,7 +141,9 @@ static void log_quirks(struct device *dev) dev_info(dev, "quirk NO_INTERNAL_MIC_MAP enabled\n"); break; default: - dev_err(dev, "quirk map 0x%x is not supported, microphone input will not work\n", map); + dev_warn_once(dev, "quirk sets invalid input map: 0x%x, default to DMIC1_MAP\n", map); + byt_rt5640_quirk &= ~BYT_RT5640_MAP_MASK; + byt_rt5640_quirk |= BYT_RT5640_DMIC1_MAP; break; } if (byt_rt5640_quirk & BYT_RT5640_HSMIC2_ON_IN1) -- 2.51.0 From - Mon Oct 13 15:56:01 2025 X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 Return-Path: Delivered-To: hi@josie.lol Received: from witcher.mxrouting.net by witcher.mxrouting.net with LMTP id WK6FBSog7Wjfgj4AYBR5ng (envelope-from ) for ; Mon, 13 Oct 2025 15:52:10 +0000 Return-path: Envelope-to: hi@josie.lol Delivery-date: Mon, 13 Oct 2025 15:52:10 +0000 Received: from am.mirrors.kernel.org ([147.75.80.249]) by witcher.mxrouting.net with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.98) (envelope-from ) id 1v8KqH-0000000HDb6-2evJ for hi@josie.lol; Mon, 13 Oct 2025 15:52:10 +0000 Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 38F151890AF5 for ; Mon, 13 Oct 2025 15:52:24 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 572FC30C363; Mon, 13 Oct 2025 15:34:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="fDaOqylr" X-Original-To: stable@vger.kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 247C530BF7F; Mon, 13 Oct 2025 15:34:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369660; cv=none; b=s9pgHaHdJBYS+bws0NXcG+cHoB7GlCWLxB137ostQc9tL9tK+IbkQE1e2FbJKnK7zymh/g2eXfbVqcRIO1kHB7ZRo2btLjgRnb2BzrOtja/KOD5mrjGfRdIKGv06vf2pok1NIjdAHIDp3N+HdUfGc03vx1bFfpAdVlOu6SGDTp8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369660; c=relaxed/simple; bh=+yAzpC/XcYeT8EbdhF2o5ieUwwfKmk4B7GvcHPuTqmE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=e9I0U5ZaUe5Wnmsja6pD0EcIS0ONgwvdmb2gcAforJJeyAXq6EqLPul8je+3pJAT/gzv+4ZhM1mLz7cuXJ9ggDX4cddd+W8K+JFwWAsnxwr+e3xreoXW292j/XVzlEk9dVvohvGSJCyuRxCI1DW4u6eb8KocpIMNjEx7mCA5gdc= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b=fDaOqylr; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id A11C9C4CEE7; Mon, 13 Oct 2025 15:34:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1760369660; bh=+yAzpC/XcYeT8EbdhF2o5ieUwwfKmk4B7GvcHPuTqmE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=fDaOqylrfZ4/kQr49erdVmz23P+m8P+nl3aJ5VSD5GDdVIayDBcZO92xsNJsNwH6y IWQHgZT24/Y1mJ58nuploLL7mvZZzTKN3xYIdlu5JBRPPTMSfXkaiDvBekGoQz+Tmj VZLWN9GT4rwS3C5/BPIo3WgHyX2DwpbSKhyZmwV8= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, Rob Clark , Connor Abbott , Sasha Levin Subject: [PATCH 6.17 324/563] drm/msm: Fix obj leak in VM_BIND error path Date: Mon, 13 Oct 2025 16:43:05 +0200 Message-ID: <20251013144423.000618144@linuxfoundation.org> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251013144411.274874080@linuxfoundation.org> References: <20251013144411.274874080@linuxfoundation.org> User-Agent: quilt/0.69 X-stable: review X-Patchwork-Hint: ignore Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-DKIM: signer='linuxfoundation.org' status='pass' reason='' DKIMCheck: Server passes DKIM test, 0 Spam score X-Spam-Score: -1.9 (-) X-Spam-Report: Spam detection software, running on the system "witcher.mxrouting.net", has performed the tests listed below against this email. Information: https://mxroutedocs.com/directadmin/spamfilters/ --- Content analysis details: (-1.9 points) --- pts rule name description ---- ---------------------- ----------------------------------------- 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [URIs: linuxfoundation.org] -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [147.75.80.249 listed in list.dnswl.org] 1.5 HEADER_FROM_DIFFERENT_DOMAINS From and EnvelopeFrom 2nd level mail domains are different -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -1.0 MAILING_LIST_MULTI Multiple indicators imply a widely-seen list manager -0.0 DKIMWL_WL_HIGH DKIMwl.org - High trust sender SpamTally: Final spam score: -18 6.17-stable review patch. If anyone has any objections, please let me know. ------------------ From: Rob Clark [ Upstream commit 278f8904434aa96055e793936b5977c010549e28 ] If we fail a handle-lookup part way thru, we need to drop the already obtained obj references. Fixes: 2e6a8a1fe2b2 ("drm/msm: Add VM_BIND ioctl") Signed-off-by: Rob Clark Tested-by: Connor Abbott Patchwork: https://patchwork.freedesktop.org/patch/669784/ Signed-off-by: Sasha Levin --- drivers/gpu/drm/msm/msm_gem_vma.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/msm/msm_gem_vma.c b/drivers/gpu/drm/msm/msm_gem_vma.c index 00d0f3b7ba327..209154be5efcc 100644 --- a/drivers/gpu/drm/msm/msm_gem_vma.c +++ b/drivers/gpu/drm/msm/msm_gem_vma.c @@ -1023,6 +1023,7 @@ vm_bind_job_lookup_ops(struct msm_vm_bind_job *job, struct drm_msm_vm_bind *args struct drm_device *dev = job->vm->drm; int ret = 0; int cnt = 0; + int i = -1; if (args->nr_ops == 1) { /* Single op case, the op is inlined: */ @@ -1056,11 +1057,12 @@ vm_bind_job_lookup_ops(struct msm_vm_bind_job *job, struct drm_msm_vm_bind *args spin_lock(&file->table_lock); - for (unsigned i = 0; i < args->nr_ops; i++) { + for (i = 0; i < args->nr_ops; i++) { + struct msm_vm_bind_op *op = &job->ops[i]; struct drm_gem_object *obj; - if (!job->ops[i].handle) { - job->ops[i].obj = NULL; + if (!op->handle) { + op->obj = NULL; continue; } @@ -1068,15 +1070,15 @@ vm_bind_job_lookup_ops(struct msm_vm_bind_job *job, struct drm_msm_vm_bind *args * normally use drm_gem_object_lookup(), but for bulk lookup * all under single table_lock just hit object_idr directly: */ - obj = idr_find(&file->object_idr, job->ops[i].handle); + obj = idr_find(&file->object_idr, op->handle); if (!obj) { - ret = UERR(EINVAL, dev, "invalid handle %u at index %u\n", job->ops[i].handle, i); + ret = UERR(EINVAL, dev, "invalid handle %u at index %u\n", op->handle, i); goto out_unlock; } drm_gem_object_get(obj); - job->ops[i].obj = obj; + op->obj = obj; cnt++; } @@ -1085,6 +1087,17 @@ vm_bind_job_lookup_ops(struct msm_vm_bind_job *job, struct drm_msm_vm_bind *args out_unlock: spin_unlock(&file->table_lock); + if (ret) { + for (; i >= 0; i--) { + struct msm_vm_bind_op *op = &job->ops[i]; + + if (!op->obj) + continue; + + drm_gem_object_put(op->obj); + op->obj = NULL; + } + } out: return ret; } -- 2.51.0 From - Mon Oct 13 15:56:01 2025 X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 Return-Path: Delivered-To: hi@josie.lol Received: from witcher.mxrouting.net by witcher.mxrouting.net with LMTP id 4E3SLCQg7Wg2BT4AYBR5ng (envelope-from ) for ; Mon, 13 Oct 2025 15:52:04 +0000 Return-path: Envelope-to: hi@josie.lol Delivery-date: Mon, 13 Oct 2025 15:52:04 +0000 Received: from am.mirrors.kernel.org ([147.75.80.249]) by witcher.mxrouting.net with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.98) (envelope-from ) id 1v8KqC-0000000HDQn-1Qsx for hi@josie.lol; Mon, 13 Oct 2025 15:52:04 +0000 Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 25F8218852E0 for ; Mon, 13 Oct 2025 15:52:19 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id E9F9A30C602; Mon, 13 Oct 2025 15:34:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="wqZT25hA" X-Original-To: stable@vger.kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 BE24830C363; Mon, 13 Oct 2025 15:34:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369648; cv=none; b=Kwn2HxTg5NKfx5TlWB+Yth+Ibiw+Zl2K5EBedZgSfCSf7lJSOxKAgs/J71dg4UsDbwdcGcxsE8KRwXVuCAi0FQF3w7FJxCCfIGi5CGbgU2in0AJPq6FE8L8wL5fPYgYN9S6989fQmLvAnvpRlBk/Pz2Pte+sPcf9d1AO4VzXwQA= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369648; c=relaxed/simple; bh=Ijyjvc0xX5prMaTmkzxQ3M9MQenBzEwfB05K29BEn3w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=V0KNHunVI2Jkywo2kG7vpbtp+vLedN0exfgwbC1VW4ijPNeWg8QSMzFzndYMAQpOhTnhwSW34WkPHIbJp70HVL7sR7wpz2IwoX0vbgA5H4al2at3Kvsl4GoPW7S4gjjbPHy7qNYyM7dTbTdEcPy5++ZodfUBHyPZoa1mqtqmuJk= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b=wqZT25hA; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4A056C4CEE7; Mon, 13 Oct 2025 15:34:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1760369648; bh=Ijyjvc0xX5prMaTmkzxQ3M9MQenBzEwfB05K29BEn3w=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=wqZT25hAs/SVvvcuJFEHAZaCsTJ36wT5qzI8b4BWC70K0rYyyKmOuOmCrJ0hxaQ3o orRKJR3u3/H6O5q66uweH2PXzibVngDhIIwJdspzaq1YRIzwb8aI4fpxULH9iHhLRG wLjLYV2qYtR7wdCRGGG3vSepWf7qlT7PPArOp+yA= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, Seppo Takalo , Sasha Levin Subject: [PATCH 6.17 321/563] tty: n_gsm: Dont block input queue by waiting MSC Date: Mon, 13 Oct 2025 16:43:02 +0200 Message-ID: <20251013144422.893989893@linuxfoundation.org> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251013144411.274874080@linuxfoundation.org> References: <20251013144411.274874080@linuxfoundation.org> User-Agent: quilt/0.69 X-stable: review X-Patchwork-Hint: ignore Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-DKIM: signer='linuxfoundation.org' status='pass' reason='' DKIMCheck: Server passes DKIM test, 0 Spam score X-Spam-Score: 0.4 (/) X-Spam-Report: Spam detection software, running on the system "witcher.mxrouting.net", has performed the tests listed below against this email. Information: https://mxroutedocs.com/directadmin/spamfilters/ --- Content analysis details: (0.4 points) --- pts rule name description ---- ---------------------- ----------------------------------------- 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [URIs: linuxfoundation.org] 0.0 RCVD_IN_DNSWL_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to DNSWL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#DnsBlocklists-dnsbl-block for more information. [147.75.80.249 listed in list.dnswl.org] 1.5 HEADER_FROM_DIFFERENT_DOMAINS From and EnvelopeFrom 2nd level mail domains are different -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -1.0 MAILING_LIST_MULTI Multiple indicators imply a widely-seen list manager -0.0 DKIMWL_WL_HIGH DKIMwl.org - High trust sender SpamTally: Final spam score: 4 6.17-stable review patch. If anyone has any objections, please let me know. ------------------ From: Seppo Takalo [ Upstream commit 3cf0b3c243e56bc43be560617416c1d9f301f44c ] Currently gsm_queue() processes incoming frames and when opening a DLC channel it calls gsm_dlci_open() which calls gsm_modem_update(). If basic mode is used it calls gsm_modem_upd_via_msc() and it cannot block the input queue by waiting the response to come into the same input queue. Instead allow sending Modem Status Command without waiting for remote end to respond. Define a new function gsm_modem_send_initial_msc() for this purpose. As MSC is only valid for basic encoding, it does not do anything for advanced or when convergence layer type 2 is used. Fixes: 48473802506d ("tty: n_gsm: fix missing update of modem controls after DLCI open") Signed-off-by: Seppo Takalo Link: https://lore.kernel.org/r/20250827123221.1148666-1-seppo.takalo@nordicsemi.no Signed-off-by: Greg Kroah-Hartman Signed-off-by: Sasha Levin --- drivers/tty/n_gsm.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c index 7fc535452c0b3..553d8c70352b1 100644 --- a/drivers/tty/n_gsm.c +++ b/drivers/tty/n_gsm.c @@ -461,6 +461,7 @@ static int gsm_send_packet(struct gsm_mux *gsm, struct gsm_msg *msg); static struct gsm_dlci *gsm_dlci_alloc(struct gsm_mux *gsm, int addr); static void gsmld_write_trigger(struct gsm_mux *gsm); static void gsmld_write_task(struct work_struct *work); +static int gsm_modem_send_initial_msc(struct gsm_dlci *dlci); /** * gsm_fcs_add - update FCS @@ -2174,7 +2175,7 @@ static void gsm_dlci_open(struct gsm_dlci *dlci) pr_debug("DLCI %d goes open.\n", dlci->addr); /* Send current modem state */ if (dlci->addr) { - gsm_modem_update(dlci, 0); + gsm_modem_send_initial_msc(dlci); } else { /* Start keep-alive control */ gsm->ka_num = 0; @@ -4161,6 +4162,28 @@ static int gsm_modem_upd_via_msc(struct gsm_dlci *dlci, u8 brk) return gsm_control_wait(dlci->gsm, ctrl); } +/** + * gsm_modem_send_initial_msc - Send initial modem status message + * + * @dlci channel + * + * Send an initial MSC message after DLCI open to set the initial + * modem status lines. This is only done for basic mode. + * Does not wait for a response as we cannot block the input queue + * processing. + */ +static int gsm_modem_send_initial_msc(struct gsm_dlci *dlci) +{ + u8 modembits[2]; + + if (dlci->adaption != 1 || dlci->gsm->encoding != GSM_BASIC_OPT) + return 0; + + modembits[0] = (dlci->addr << 2) | 2 | EA; /* DLCI, Valid, EA */ + modembits[1] = (gsm_encode_modem(dlci) << 1) | EA; + return gsm_control_command(dlci->gsm, CMD_MSC, (const u8 *)&modembits, 2); +} + /** * gsm_modem_update - send modem status line state * @dlci: channel -- 2.51.0 From - Mon Oct 13 15:56:01 2025 X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 Return-Path: Delivered-To: hi@josie.lol Received: from witcher.mxrouting.net by witcher.mxrouting.net with LMTP id mMrVFx8g7WhxQT4AYBR5ng (envelope-from ) for ; Mon, 13 Oct 2025 15:51:59 +0000 Return-path: Envelope-to: hi@josie.lol Delivery-date: Mon, 13 Oct 2025 15:51:59 +0000 Received: from am.mirrors.kernel.org ([147.75.80.249]) by witcher.mxrouting.net with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.98) (envelope-from ) id 1v8Kq6-0000000HDDM-3yJu for hi@josie.lol; Mon, 13 Oct 2025 15:51:59 +0000 Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 5C552188ABEB for ; Mon, 13 Oct 2025 15:52:14 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 2883E30C349; Mon, 13 Oct 2025 15:33:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="W3/9cY5s" X-Original-To: stable@vger.kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 F33E330C342; Mon, 13 Oct 2025 15:33:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369637; cv=none; b=nFPf76pXqdmncis4wQrCkNFi5OVXOKUK82AgKUZWLBZS0HRGTriJzoA5VAT8VuF0w5UWCFQ9K+jMrix4D0nLb3WaM2bsBkLCjDHj9sEtKRVoiRp6yddfMOZJRhjbbapgMRBmo2sBNCgIA4fORouRNKHogSmrxpDDbuoUztN8Bns= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369637; c=relaxed/simple; bh=v1sqTLmaVKGNOsmte3ZKJB0J4f2wOERW9n6R7mvfXhA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=iXC3YGqSw0brfRcdhjN6Omq4JZ5U/2+4PpiQ0/tqTNJ66pOYuJ7Td2U6clT6VZMw4iOIBj8d2ot2+Uv5Rz4wkWXqSX5RoH/R3oKkRtSlKdQAINFpuclgCCmDhoJ5DJIyTQ4Fqt0EPQ5b56sXuY9FC5mFEL6lB2M0nxMBCBS8dO0= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b=W3/9cY5s; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7E9CBC4CEE7; Mon, 13 Oct 2025 15:33:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1760369636; bh=v1sqTLmaVKGNOsmte3ZKJB0J4f2wOERW9n6R7mvfXhA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=W3/9cY5sD1bcR+WM/dQc6+0RKVgi+o0UT7qySxAMJCAjwua7CpLVL/U++v0YoI6Ds A+4fZTxKzayfXz9O5acqwYv4qqjk5/p0S/Wh69b9CUbhh/90oPk9EugcG17Ds6u77y 4iU2rlSwNwtNvolbKD0FOmvlIW4vOpLOKYG5Tk0Y= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, Anderson Nascimento , Christian Brauner , Jan Kara , Sasha Levin Subject: [PATCH 6.17 317/563] fanotify: Validate the return value of mnt_ns_from_dentry() before dereferencing Date: Mon, 13 Oct 2025 16:42:58 +0200 Message-ID: <20251013144422.749875341@linuxfoundation.org> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251013144411.274874080@linuxfoundation.org> References: <20251013144411.274874080@linuxfoundation.org> User-Agent: quilt/0.69 X-stable: review X-Patchwork-Hint: ignore Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-DKIM: signer='linuxfoundation.org' status='pass' reason='' DKIMCheck: Server passes DKIM test, 0 Spam score X-Spam-Score: -1.9 (-) X-Spam-Report: Spam detection software, running on the system "witcher.mxrouting.net", has performed the tests listed below against this email. Information: https://mxroutedocs.com/directadmin/spamfilters/ --- Content analysis details: (-1.9 points) --- pts rule name description ---- ---------------------- ----------------------------------------- 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [URIs: linuxfoundation.org] -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [147.75.80.249 listed in list.dnswl.org] 1.5 HEADER_FROM_DIFFERENT_DOMAINS From and EnvelopeFrom 2nd level mail domains are different -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -1.0 MAILING_LIST_MULTI Multiple indicators imply a widely-seen list manager -0.0 DKIMWL_WL_HIGH DKIMwl.org - High trust sender SpamTally: Final spam score: -18 6.17-stable review patch. If anyone has any objections, please let me know. ------------------ From: Anderson Nascimento [ Upstream commit 62e59ffe8787b5550ccff70c30b6f6be6a3ac3dd ] The function do_fanotify_mark() does not validate if mnt_ns_from_dentry() returns NULL before dereferencing mntns->user_ns. This causes a NULL pointer dereference in do_fanotify_mark() if the path is not a mount namespace object. Fix this by checking mnt_ns_from_dentry()'s return value before dereferencing it. Before the patch $ gcc fanotify_nullptr.c -o fanotify_nullptr $ mkdir A $ ./fanotify_nullptr Fanotify fd: 3 fanotify_mark: Operation not permitted $ unshare -Urm Fanotify fd: 3 Killed int main(void){ int ffd; ffd = fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_MNT, 0); if(ffd < 0){ perror("fanotify_init"); exit(EXIT_FAILURE); } printf("Fanotify fd: %d\n",ffd); if(fanotify_mark(ffd, FAN_MARK_ADD | FAN_MARK_MNTNS, FAN_MNT_ATTACH, AT_FDCWD, "A") < 0){ perror("fanotify_mark"); exit(EXIT_FAILURE); } return 0; } After the patch $ gcc fanotify_nullptr.c -o fanotify_nullptr $ mkdir A $ ./fanotify_nullptr Fanotify fd: 3 fanotify_mark: Operation not permitted $ unshare -Urm Fanotify fd: 3 fanotify_mark: Invalid argument [ 25.694973] BUG: kernel NULL pointer dereference, address: 0000000000000038 [ 25.695006] #PF: supervisor read access in kernel mode [ 25.695012] #PF: error_code(0x0000) - not-present page [ 25.695017] PGD 109a30067 P4D 109a30067 PUD 142b46067 PMD 0 [ 25.695025] Oops: Oops: 0000 [#1] SMP NOPTI [ 25.695032] CPU: 4 UID: 1000 PID: 1478 Comm: fanotify_nullpt Not tainted 6.17.0-rc4 #1 PREEMPT(lazy) [ 25.695040] Hardware name: VMware, Inc. VMware Virtual Platform/440BX Desktop Reference Platform, BIOS 6.00 11/12/2020 [ 25.695049] RIP: 0010:do_fanotify_mark+0x817/0x950 [ 25.695066] Code: 04 00 00 e9 45 fd ff ff 48 8b 7c 24 48 4c 89 54 24 18 4c 89 5c 24 10 4c 89 0c 24 e8 b3 11 fc ff 4c 8b 54 24 18 4c 8b 5c 24 10 <48> 8b 78 38 4c 8b 0c 24 49 89 c4 e9 13 fd ff ff 8b 4c 24 28 85 c9 [ 25.695081] RSP: 0018:ffffd31c469e3c08 EFLAGS: 00010203 [ 25.695104] RAX: 0000000000000000 RBX: 0000000001000000 RCX: ffff8eb48aebd220 [ 25.695110] RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffff8eb4835e8180 [ 25.695115] RBP: 0000000000000111 R08: 0000000000000000 R09: 0000000000000000 [ 25.695142] R10: ffff8eb48a7d56c0 R11: ffff8eb482bede00 R12: 00000000004012a7 [ 25.695148] R13: 0000000000000110 R14: 0000000000000001 R15: ffff8eb48a7d56c0 [ 25.695154] FS: 00007f8733bda740(0000) GS:ffff8eb61ce5f000(0000) knlGS:0000000000000000 [ 25.695162] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 25.695170] CR2: 0000000000000038 CR3: 0000000136994006 CR4: 00000000003706f0 [ 25.695201] Call Trace: [ 25.695209] [ 25.695215] __x64_sys_fanotify_mark+0x1f/0x30 [ 25.695222] do_syscall_64+0x82/0x2c0 ... Fixes: 58f5fbeb367f ("fanotify: support watching filesystems and mounts inside userns") Link: https://patch.msgid.link/CAPhRvkw4ONypNsJrCnxbKnJbYmLHTDEKFC4C_num_5sVBVa8jg@mail.gmail.com Signed-off-by: Anderson Nascimento Reviewed-by: Christian Brauner Signed-off-by: Jan Kara Signed-off-by: Sasha Levin --- fs/notify/fanotify/fanotify_user.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fs/notify/fanotify/fanotify_user.c b/fs/notify/fanotify/fanotify_user.c index b192ee068a7ac..561339b4cf752 100644 --- a/fs/notify/fanotify/fanotify_user.c +++ b/fs/notify/fanotify/fanotify_user.c @@ -1999,7 +1999,10 @@ static int do_fanotify_mark(int fanotify_fd, unsigned int flags, __u64 mask, user_ns = path.mnt->mnt_sb->s_user_ns; obj = path.mnt->mnt_sb; } else if (obj_type == FSNOTIFY_OBJ_TYPE_MNTNS) { + ret = -EINVAL; mntns = mnt_ns_from_dentry(path.dentry); + if (!mntns) + goto path_put_and_out; user_ns = mntns->user_ns; obj = mntns; } -- 2.51.0 From - Mon Oct 13 15:56:01 2025 X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 Return-Path: Delivered-To: hi@josie.lol Received: from witcher.mxrouting.net by witcher.mxrouting.net with LMTP id qPq+JR4g7Wg2BT4AYBR5ng (envelope-from ) for ; Mon, 13 Oct 2025 15:51:58 +0000 Return-path: Envelope-to: hi@josie.lol Delivery-date: Mon, 13 Oct 2025 15:51:58 +0000 Received: from am.mirrors.kernel.org ([147.75.80.249]) by witcher.mxrouting.net with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.98) (envelope-from ) id 1v8Kq6-0000000HDCg-13zn for hi@josie.lol; Mon, 13 Oct 2025 15:51:58 +0000 Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 26AFA188BBC0 for ; Mon, 13 Oct 2025 15:52:13 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 67D0F30C340; Mon, 13 Oct 2025 15:33:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="d1RsBTg5" X-Original-To: stable@vger.kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 403ED30BF7B; Mon, 13 Oct 2025 15:33:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369634; cv=none; b=hqsWbdXfWLmOrHoyBDqri/f9TWZbfqx3RoWD0703OZqwpxN1jvqcxhVhGOL95c2hVVZ9JP6p86DIqLe1uKdwBU+6R5qS2umf0yXaqDkMoZ2JfEIGeomp0ESrQ8XQPwBEYIJ3daaKY8Hf8RNyJ/HU3TzvQXmX3Snf8vkpYE6ThFc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369634; c=relaxed/simple; bh=hVBR0VREb+J7VB6x7IJiOrgrGnsFCnwOdmFcZQyF874=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=H9pOV35fjuOiTcFD4Hv3lEuQT19CPl5juzxcaXzrGEScQDHhegXkRfXuwcglsut0nbPIF+fHbOlFTuAE6/uGkXrGKe+ibZg36Mo99rJQoqazYTGnVpd0oHJFSSPDjrYXOCWV6owMh0dmZeqoqTs8hGkMXLu9Ld2lU5hotD3DdOs= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b=d1RsBTg5; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id AD8B2C4CEE7; Mon, 13 Oct 2025 15:33:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1760369634; bh=hVBR0VREb+J7VB6x7IJiOrgrGnsFCnwOdmFcZQyF874=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=d1RsBTg5H4JPqgW4KBQDF0yEDYimhzgnyPdOIOkCA965AhgSKGVWMksOT1leaVgPu INIs6kyMa2Tj9RV1kLv1H8wYbRTVGhRDKULTC5NhYb5GzDFQL/RcPwDEdsjuV3Jcrc r3cTuf9Lh0B2nE3Bo4Fju6XtWPEK67QzHSEMwZMI= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, Eric Dumazet , Neal Cardwell , Kuniyuki Iwashima , Jason Xing , Jakub Kicinski , Sasha Levin Subject: [PATCH 6.17 316/563] tcp: fix __tcp_close() to only send RST when required Date: Mon, 13 Oct 2025 16:42:57 +0200 Message-ID: <20251013144422.713115255@linuxfoundation.org> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251013144411.274874080@linuxfoundation.org> References: <20251013144411.274874080@linuxfoundation.org> User-Agent: quilt/0.69 X-stable: review X-Patchwork-Hint: ignore Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-DKIM: signer='linuxfoundation.org' status='pass' reason='' DKIMCheck: Server passes DKIM test, 0 Spam score X-Spam-Score: -1.9 (-) X-Spam-Report: Spam detection software, running on the system "witcher.mxrouting.net", has performed the tests listed below against this email. Information: https://mxroutedocs.com/directadmin/spamfilters/ --- Content analysis details: (-1.9 points) --- pts rule name description ---- ---------------------- ----------------------------------------- 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [URIs: msgid.link] -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [147.75.80.249 listed in list.dnswl.org] 1.5 HEADER_FROM_DIFFERENT_DOMAINS From and EnvelopeFrom 2nd level mail domains are different -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -1.0 MAILING_LIST_MULTI Multiple indicators imply a widely-seen list manager -0.0 DKIMWL_WL_HIGH DKIMwl.org - High trust sender SpamTally: Final spam score: -18 6.17-stable review patch. If anyone has any objections, please let me know. ------------------ From: Eric Dumazet [ Upstream commit 5f9238530970f2993b23dd67fdaffc552a2d2e98 ] If the receive queue contains payload that was already received, __tcp_close() can send an unexpected RST. Refine the code to take tp->copied_seq into account, as we already do in tcp recvmsg(). Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Signed-off-by: Eric Dumazet Reviewed-by: Neal Cardwell Reviewed-by: Kuniyuki Iwashima Reviewed-by: Jason Xing Link: https://patch.msgid.link/20250903084720.1168904-2-edumazet@google.com Signed-off-by: Jakub Kicinski Signed-off-by: Sasha Levin --- net/ipv4/tcp.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index ad76556800f2b..89040007c7b70 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -3099,8 +3099,8 @@ bool tcp_check_oom(const struct sock *sk, int shift) void __tcp_close(struct sock *sk, long timeout) { + bool data_was_unread = false; struct sk_buff *skb; - int data_was_unread = 0; int state; WRITE_ONCE(sk->sk_shutdown, SHUTDOWN_MASK); @@ -3119,11 +3119,12 @@ void __tcp_close(struct sock *sk, long timeout) * reader process may not have drained the data yet! */ while ((skb = __skb_dequeue(&sk->sk_receive_queue)) != NULL) { - u32 len = TCP_SKB_CB(skb)->end_seq - TCP_SKB_CB(skb)->seq; + u32 end_seq = TCP_SKB_CB(skb)->end_seq; if (TCP_SKB_CB(skb)->tcp_flags & TCPHDR_FIN) - len--; - data_was_unread += len; + end_seq--; + if (after(end_seq, tcp_sk(sk)->copied_seq)) + data_was_unread = true; __kfree_skb(skb); } -- 2.51.0 From - Mon Oct 13 15:56:01 2025 X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 Return-Path: Delivered-To: hi@josie.lol Received: from witcher.mxrouting.net by witcher.mxrouting.net with LMTP id 6GbgDJIg7WiEQT4AYBR5ng (envelope-from ) for ; Mon, 13 Oct 2025 15:53:54 +0000 Return-path: Envelope-to: hi@josie.lol Delivery-date: Mon, 13 Oct 2025 15:53:54 +0000 Received: from am.mirrors.kernel.org ([147.75.80.249]) by witcher.mxrouting.net with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.98) (envelope-from ) id 1v8Krx-0000000HHOL-1PxN for hi@josie.lol; Mon, 13 Oct 2025 15:53:53 +0000 Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 111DB18A5A7C for ; Mon, 13 Oct 2025 15:54:16 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 70CE6309DC4; Mon, 13 Oct 2025 15:35:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="chWo5Dnz" X-Original-To: stable@vger.kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 48FAB3093CE; Mon, 13 Oct 2025 15:35:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369717; cv=none; b=NKT+uyMwHxv6kPXFhmhDs8z6MjJF4kIIOuJAL8Kw5Gywa3Q4CCl2Q1n5ns0TLYnsW2Eyu3OuoIq2jO9NvHsrn8+U6DbouU49VtHXSOgUx3uhv4z91W2UA6duT7rk+h2GoWh2zpqiGREEPuIg8UyeDbZ/2zuOEtmleLyRlprJSlw= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369717; c=relaxed/simple; bh=wTNoRkrPZTVPHmKcVvYacHJdTg/dLeKrEuG3jDwglQA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TRlDd3x0SutD2EdtdEv6Mvi8XgfBGduoSPtoe5RTab7cVozBhTF3mzDt8ybPK47Lu2hi6IkZxVhLVJFTZT4sm3R9m98x6JSeDzEQDdSc/NjZzi4w5sSrgHghSCtGtnZXXkV4pYnjRB7zBA8uLiA2vAH8bZPTELJRU0JZilaGn60= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b=chWo5Dnz; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id C0207C4CEE7; Mon, 13 Oct 2025 15:35:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1760369717; bh=wTNoRkrPZTVPHmKcVvYacHJdTg/dLeKrEuG3jDwglQA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=chWo5DnzJnrxC8AutlrA6ELXV4aevyqF5GU57j7SG1a16afkJR58AkNzM4auY0/EQ BUQ3LX1COWVFVTZ8Omd9zxkAU/Os4pi1JO2xVkqm/Bi9xCNdiDv3fw1UanRBTBBI75 MDKtG1BtOHTt8XN9gHVt34WY0Y+ottWsoWW1fPF8= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, Stefan Kerkmann , Jeff Chen , Johannes Berg , Sasha Levin Subject: [PATCH 6.17 310/563] wifi: mwifiex: send world regulatory domain to driver Date: Mon, 13 Oct 2025 16:42:51 +0200 Message-ID: <20251013144422.495377882@linuxfoundation.org> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251013144411.274874080@linuxfoundation.org> References: <20251013144411.274874080@linuxfoundation.org> User-Agent: quilt/0.69 X-stable: review X-Patchwork-Hint: ignore Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-DKIM: signer='linuxfoundation.org' status='pass' reason='' DKIMCheck: Server passes DKIM test, 0 Spam score X-Spam-Score: 0.4 (/) X-Spam-Report: Spam detection software, running on the system "witcher.mxrouting.net", has performed the tests listed below against this email. Information: https://mxroutedocs.com/directadmin/spamfilters/ --- Content analysis details: (0.4 points) --- pts rule name description ---- ---------------------- ----------------------------------------- 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [URIs: msgid.link] 0.0 RCVD_IN_DNSWL_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to DNSWL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#DnsBlocklists-dnsbl-block for more information. [147.75.80.249 listed in list.dnswl.org] 1.5 HEADER_FROM_DIFFERENT_DOMAINS From and EnvelopeFrom 2nd level mail domains are different -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -1.0 MAILING_LIST_MULTI Multiple indicators imply a widely-seen list manager -0.0 DKIMWL_WL_HIGH DKIMwl.org - High trust sender SpamTally: Final spam score: 4 6.17-stable review patch. If anyone has any objections, please let me know. ------------------ From: Stefan Kerkmann [ Upstream commit 56819d00bc2ebaa6308913c28680da5d896852b8 ] The world regulatory domain is a restrictive subset of channel configurations which allows legal operation of the adapter all over the world. Changing to this domain should not be prevented. Fixes: dd4a9ac05c8e1 ("mwifiex: send regulatory domain info to firmware only if alpha2 changed") changed Signed-off-by: Stefan Kerkmann Reviewed-by: Jeff Chen Link: https://patch.msgid.link/20250804-fix-mwifiex-regulatory-domain-v1-1-e4715c770c4d@pengutronix.de Signed-off-by: Johannes Berg Signed-off-by: Sasha Levin --- drivers/net/wireless/marvell/mwifiex/cfg80211.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/drivers/net/wireless/marvell/mwifiex/cfg80211.c b/drivers/net/wireless/marvell/mwifiex/cfg80211.c index 4c8c7a5fdf23e..be23a29e7de09 100644 --- a/drivers/net/wireless/marvell/mwifiex/cfg80211.c +++ b/drivers/net/wireless/marvell/mwifiex/cfg80211.c @@ -686,10 +686,9 @@ static void mwifiex_reg_notifier(struct wiphy *wiphy, return; } - /* Don't send world or same regdom info to firmware */ - if (strncmp(request->alpha2, "00", 2) && - strncmp(request->alpha2, adapter->country_code, - sizeof(request->alpha2))) { + /* Don't send same regdom info to firmware */ + if (strncmp(request->alpha2, adapter->country_code, + sizeof(request->alpha2)) != 0) { memcpy(adapter->country_code, request->alpha2, sizeof(request->alpha2)); mwifiex_send_domain_info_cmd_fw(wiphy); -- 2.51.0 From - Mon Oct 13 15:56:01 2025 X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 Return-Path: Delivered-To: hi@josie.lol Received: from witcher.mxrouting.net by witcher.mxrouting.net with LMTP id OPi4G5Ag7WiEQT4AYBR5ng (envelope-from ) for ; Mon, 13 Oct 2025 15:53:52 +0000 Return-path: Envelope-to: hi@josie.lol Delivery-date: Mon, 13 Oct 2025 15:53:52 +0000 Received: from am.mirrors.kernel.org ([147.75.80.249]) by witcher.mxrouting.net with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.98) (envelope-from ) id 1v8Krw-0000000HHNE-0Uwb for hi@josie.lol; Mon, 13 Oct 2025 15:53:52 +0000 Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id C013318A59E0 for ; Mon, 13 Oct 2025 15:54:14 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 7DA5030FC00; Mon, 13 Oct 2025 15:35:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="QHd4Umk/" X-Original-To: stable@vger.kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 564343093CE; Mon, 13 Oct 2025 15:35:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369714; cv=none; b=TvZ4r3H/mJtel1La0nC2bTtza1r9aXscJbv8Fz2cEWMth0IXJdFAI5tCRz2qM3ZkWssLxIt+0TIoyXsiNVewV968evnK2H4JjVdswi0PXohq7rM6pRCtFKnOXjN2olJk2pjbTDp55WJmEL6tUl2nwhPAPL8Rg6/bodqEfqBk/co= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369714; c=relaxed/simple; bh=gFO1nVF3OPkAVhWf0dHEhrK23Zh2H3H7QDqbpl0nMl8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Up5fxobR2SjTCb8VS3M5SAfL9iGU4TSBplKTHc/6+OGf6BPy2+SDOnWh4VooO8oSUoQPumQpM8pvqe4steeponLHe9RPTb4K0Oo8sZA3zgDtFtFLU2BqOV6tV1dJR6hassba3ky5f95spz7vbTcFWXED4FItRzbq1c+qDu3/vnQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b=QHd4Umk/; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id D6299C4CEE7; Mon, 13 Oct 2025 15:35:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1760369714; bh=gFO1nVF3OPkAVhWf0dHEhrK23Zh2H3H7QDqbpl0nMl8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=QHd4Umk/QEpo7P12VomRSJHTUO4y6AGBxyJw6IjTy4Y1lM156rvIOFUbpLslSm6UH 0HRUtzkhnn+sy2tuPP4PjNvtR/KCig4F5T2WP13HRsCc9wcFsb5GkDs+7aqLpVUYMM pl+7iMwkocBptB81L5j7Ry/dRfrxqvWjbrce2Jjc= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, Lorenzo Bianconi , Johannes Berg , Sasha Levin Subject: [PATCH 6.17 309/563] wifi: mac80211: Make CONNECTION_MONITOR optional for MLO sta Date: Mon, 13 Oct 2025 16:42:50 +0200 Message-ID: <20251013144422.458561237@linuxfoundation.org> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251013144411.274874080@linuxfoundation.org> References: <20251013144411.274874080@linuxfoundation.org> User-Agent: quilt/0.69 X-stable: review X-Patchwork-Hint: ignore Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-DKIM: signer='linuxfoundation.org' status='pass' reason='' DKIMCheck: Server passes DKIM test, 0 Spam score X-Spam-Score: 0.4 (/) X-Spam-Report: Spam detection software, running on the system "witcher.mxrouting.net", has performed the tests listed below against this email. Information: https://mxroutedocs.com/directadmin/spamfilters/ --- Content analysis details: (0.4 points) --- pts rule name description ---- ---------------------- ----------------------------------------- 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [URIs: msgid.link] 0.0 RCVD_IN_DNSWL_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to DNSWL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#DnsBlocklists-dnsbl-block for more information. [147.75.80.249 listed in list.dnswl.org] 1.5 HEADER_FROM_DIFFERENT_DOMAINS From and EnvelopeFrom 2nd level mail domains are different -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -1.0 MAILING_LIST_MULTI Multiple indicators imply a widely-seen list manager -0.0 DKIMWL_WL_HIGH DKIMwl.org - High trust sender SpamTally: Final spam score: 4 6.17-stable review patch. If anyone has any objections, please let me know. ------------------ From: Lorenzo Bianconi [ Upstream commit ac36daa83650c26fd55dee1a6ee5144769239911 ] Since commit '1bc892d76a6f ("wifi: mac80211: extend connection monitoring for MLO")' mac80211 supports connection monitor for MLO client interfaces. Remove the CONNECTION_MONITOR requirement in ieee80211_register_hw routine. Fixes: 1bc892d76a6f ("wifi: mac80211: extend connection monitoring for MLO") Signed-off-by: Lorenzo Bianconi Link: https://patch.msgid.link/20250826-remove-conn-mon-check-ieee80211_register_hw-v2-1-5a1e2f038245@kernel.org Signed-off-by: Johannes Berg Signed-off-by: Sasha Levin --- net/mac80211/main.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/net/mac80211/main.c b/net/mac80211/main.c index 3ae6104e5cb20..78f862f79aa82 100644 --- a/net/mac80211/main.c +++ b/net/mac80211/main.c @@ -1164,9 +1164,6 @@ int ieee80211_register_hw(struct ieee80211_hw *hw) if (WARN_ON(!ieee80211_hw_check(hw, MFP_CAPABLE))) return -EINVAL; - if (WARN_ON(!ieee80211_hw_check(hw, CONNECTION_MONITOR))) - return -EINVAL; - if (WARN_ON(ieee80211_hw_check(hw, NEED_DTIM_BEFORE_ASSOC))) return -EINVAL; -- 2.51.0 From - Mon Oct 13 15:56:01 2025 X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 Return-Path: Delivered-To: hi@josie.lol Received: from witcher.mxrouting.net by witcher.mxrouting.net with LMTP id EEXvARIg7Wjfgj4AYBR5ng (envelope-from ) for ; Mon, 13 Oct 2025 15:51:46 +0000 Return-path: Envelope-to: hi@josie.lol Delivery-date: Mon, 13 Oct 2025 15:51:46 +0000 Received: from ams.mirrors.kernel.org ([213.196.21.55]) by witcher.mxrouting.net with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.98) (envelope-from ) id 1v8Kpt-0000000HCkK-2fmr for hi@josie.lol; Mon, 13 Oct 2025 15:51:46 +0000 Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.mirrors.kernel.org (Postfix) with ESMTPS id 6F39E34F7D2 for ; Mon, 13 Oct 2025 15:51:44 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id D818630BBAE; Mon, 13 Oct 2025 15:33:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="crF7HBN7" X-Original-To: stable@vger.kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 B09BC30B515; Mon, 13 Oct 2025 15:33:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369622; cv=none; b=UN0oFrR46FsPLQkITbbmuX1sz/Ro/lv//yNAdxXxsz3IcQyymc/HdtxuQ+JnFUEd9lf322wYMYGUV5AJOouJsd0MEaG7sQ3WqhlMcbLadeSJ51y4JYKtbYXVr+I5savRclL5d7LM5+Hj7YfCTgDrgIfmgkpP9L/OHEXxu3bMQjA= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369622; c=relaxed/simple; bh=weBb+JQxBODjhQHLKGRrEEx01X0YNqyovP4/6a9ILOk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=mX9e6FI19bmU9IANAtSaI5VmhbS7DwfdPQvFVtnQlfFaJID6tjzvfrwGwqYaSY2PPU5HMMrwANkamARTogHfwe42UGW/Rk+bimffm9+0nDjkmhFWzTefcNt8IOyfewMZOf8hN85UYG02Zo9952ns9I+ddBxKCiRubi6yd5Bvh0w= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b=crF7HBN7; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3CC41C4CEE7; Mon, 13 Oct 2025 15:33:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1760369622; bh=weBb+JQxBODjhQHLKGRrEEx01X0YNqyovP4/6a9ILOk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=crF7HBN7SFoaKr/kLGhkTMynzqHZOah/pi3ih7BT/JEjq3PaLvwfuLRpm6JHPyoJZ 9Lb5A845hsodluIVAz9vCda9ZrX5MSYNL414o7MHpmWiDwxmcVLX80qF5OdDHhSTrI ia98abJ9v+tVVhpr0K/z1phalpR/p9bPGt3uglVY= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, Alex Deucher , =?UTF-8?q?Timur=20Krist=C3=B3f?= , Sasha Levin Subject: [PATCH 6.17 304/563] drm/amd/pm: Fix si_upload_smc_data (v3) Date: Mon, 13 Oct 2025 16:42:45 +0200 Message-ID: <20251013144422.279386648@linuxfoundation.org> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251013144411.274874080@linuxfoundation.org> References: <20251013144411.274874080@linuxfoundation.org> User-Agent: quilt/0.69 X-stable: review X-Patchwork-Hint: ignore Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-DKIM: signer='linuxfoundation.org' status='pass' reason='' DKIMCheck: Server passes DKIM test, 0 Spam score X-Spam-Score: 0.4 (/) X-Spam-Report: Spam detection software, running on the system "witcher.mxrouting.net", has performed the tests listed below against this email. Information: https://mxroutedocs.com/directadmin/spamfilters/ --- Content analysis details: (0.4 points) --- pts rule name description ---- ---------------------- ----------------------------------------- 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [URIs: linuxfoundation.org] 0.0 RCVD_IN_DNSWL_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to DNSWL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#DnsBlocklists-dnsbl-block for more information. [213.196.21.55 listed in list.dnswl.org] 1.5 HEADER_FROM_DIFFERENT_DOMAINS From and EnvelopeFrom 2nd level mail domains are different -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -1.0 MAILING_LIST_MULTI Multiple indicators imply a widely-seen list manager -0.0 DKIMWL_WL_HIGH DKIMwl.org - High trust sender SpamTally: Final spam score: 4 6.17-stable review patch. If anyone has any objections, please let me know. ------------------ From: Timur Kristóf [ Upstream commit a43b2cec04b02743338aa78f837ee0bdf066a6d5 ] The si_upload_smc_data function uses si_write_smc_soft_register to set some register values in the SMC, and expects the result to be PPSMC_Result_OK which is 1. The PPSMC_Result_OK / PPSMC_Result_Failed values are used for checking the result of a command sent to the SMC. However, the si_write_smc_soft_register actually doesn't send any commands to the SMC and returns zero on success, so this check was incorrect. Fix that by not checking the return value, just like other calls to si_write_smc_soft_register. v3: Additionally, when no display is plugged in, there is no need to restrict MCLK switching, so program the registers to zero. Fixes: 841686df9f7d ("drm/amdgpu: add SI DPM support (v4)") Reviewed-by: Alex Deucher Signed-off-by: Timur Kristóf Signed-off-by: Alex Deucher Signed-off-by: Sasha Levin --- drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c | 43 ++++++++++++---------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c b/drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c index e71070a23b915..6736c592dfdc6 100644 --- a/drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c +++ b/drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c @@ -5813,9 +5813,9 @@ static int si_upload_smc_data(struct amdgpu_device *adev) { struct amdgpu_crtc *amdgpu_crtc = NULL; int i; - - if (adev->pm.dpm.new_active_crtc_count == 0) - return 0; + u32 crtc_index = 0; + u32 mclk_change_block_cp_min = 0; + u32 mclk_change_block_cp_max = 0; for (i = 0; i < adev->mode_info.num_crtc; i++) { if (adev->pm.dpm.new_active_crtcs & (1 << i)) { @@ -5824,26 +5824,31 @@ static int si_upload_smc_data(struct amdgpu_device *adev) } } - if (amdgpu_crtc == NULL) - return 0; + /* When a display is plugged in, program these so that the SMC + * performs MCLK switching when it doesn't cause flickering. + * When no display is plugged in, there is no need to restrict + * MCLK switching, so program them to zero. + */ + if (adev->pm.dpm.new_active_crtc_count && amdgpu_crtc) { + crtc_index = amdgpu_crtc->crtc_id; - if (amdgpu_crtc->line_time <= 0) - return 0; + if (amdgpu_crtc->line_time) { + mclk_change_block_cp_min = amdgpu_crtc->wm_high / amdgpu_crtc->line_time; + mclk_change_block_cp_max = amdgpu_crtc->wm_low / amdgpu_crtc->line_time; + } + } - if (si_write_smc_soft_register(adev, - SI_SMC_SOFT_REGISTER_crtc_index, - amdgpu_crtc->crtc_id) != PPSMC_Result_OK) - return 0; + si_write_smc_soft_register(adev, + SI_SMC_SOFT_REGISTER_crtc_index, + crtc_index); - if (si_write_smc_soft_register(adev, - SI_SMC_SOFT_REGISTER_mclk_change_block_cp_min, - amdgpu_crtc->wm_high / amdgpu_crtc->line_time) != PPSMC_Result_OK) - return 0; + si_write_smc_soft_register(adev, + SI_SMC_SOFT_REGISTER_mclk_change_block_cp_min, + mclk_change_block_cp_min); - if (si_write_smc_soft_register(adev, - SI_SMC_SOFT_REGISTER_mclk_change_block_cp_max, - amdgpu_crtc->wm_low / amdgpu_crtc->line_time) != PPSMC_Result_OK) - return 0; + si_write_smc_soft_register(adev, + SI_SMC_SOFT_REGISTER_mclk_change_block_cp_max, + mclk_change_block_cp_max); return 0; } -- 2.51.0 From - Mon Oct 13 15:56:01 2025 X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 Return-Path: Delivered-To: hi@josie.lol Received: from witcher.mxrouting.net by witcher.mxrouting.net with LMTP id QDpbORAg7Wjfgj4AYBR5ng (envelope-from ) for ; Mon, 13 Oct 2025 15:51:44 +0000 Return-path: Envelope-to: hi@josie.lol Delivery-date: Mon, 13 Oct 2025 15:51:44 +0000 Received: from am.mirrors.kernel.org ([147.75.80.249]) by witcher.mxrouting.net with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.98) (envelope-from ) id 1v8Kps-0000000HCgE-2De2 for hi@josie.lol; Mon, 13 Oct 2025 15:51:44 +0000 Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id C294B18A1198 for ; Mon, 13 Oct 2025 15:51:55 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id C65A624A044; Mon, 13 Oct 2025 15:33:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="qyYgnslP" X-Original-To: stable@vger.kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 9DA6130BBB0; Mon, 13 Oct 2025 15:33:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369594; cv=none; b=X2BVUO1BJFecFg9/D+V0TAimIjs9v1E3a9xRBqLBKsPIzkPMLeuNvQIQ5y963ht99hqoY79c6RjGt36TWIRt4EFZf0E/U4bmgzyVdTagNKFpQnbQLBbazoFkzUMPN72MDFXlNo7k1GrkafMJfog0mC1TiYmUwW+Cgque3HowjuM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369594; c=relaxed/simple; bh=07+xVmOzu5QDDog69xuJ9tZwBAdJY5m0QZ1vBTzL3Uo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=sH3FdVJ1L9K7aRkEZ0HBNm150HijkENfgGgaQe0x1Jp9cXVge20O9bgdHB6xXqyVkLhSt5Iox6/WaU2zdd3J7j4LnwjDOabKN4pkcmbf0WVQoW81KGs31MM8+xLbYpmHZYXBD8pqeoV/cpda5FR9TyA+125IpJ7nDU8I7PT/z4o= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b=qyYgnslP; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2A012C4CEE7; Mon, 13 Oct 2025 15:33:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1760369594; bh=07+xVmOzu5QDDog69xuJ9tZwBAdJY5m0QZ1vBTzL3Uo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=qyYgnslPmkAhGk2tc6GyYpvQ1vpaONDWYMoX7Tv6aJ5szjdlVfPoSZXOwJB4cUu5G 0OXtRjTMLepm9uFccPZ13TOfpbSZFcHNeXh6Iqans0fqkEDQAV+bGgBfqFxhdQHspj HtaqnyIRZlTUNwznzme+wY719hyairceRhyCj/dk= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, Linux Kernel Functional Testing , James Clark , Suzuki K Poulose , Sasha Levin Subject: [PATCH 6.17 300/563] coresight: Fix missing include for FIELD_GET Date: Mon, 13 Oct 2025 16:42:41 +0200 Message-ID: <20251013144422.136348609@linuxfoundation.org> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251013144411.274874080@linuxfoundation.org> References: <20251013144411.274874080@linuxfoundation.org> User-Agent: quilt/0.69 X-stable: review X-Patchwork-Hint: ignore Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-DKIM: signer='linuxfoundation.org' status='pass' reason='' DKIMCheck: Server passes DKIM test, 0 Spam score X-Spam-Score: 0.1 (/) X-Spam-Report: Spam detection software, running on the system "witcher.mxrouting.net", has performed the tests listed below against this email. Information: https://mxroutedocs.com/directadmin/spamfilters/ --- Content analysis details: (0.1 points) --- pts rule name description ---- ---------------------- ----------------------------------------- 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [URIs: linuxfoundation.org] -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [147.75.80.249 listed in list.dnswl.org] 1.5 HEADER_FROM_DIFFERENT_DOMAINS From and EnvelopeFrom 2nd level mail domains are different 2.0 SUSPICIOUS_REWARD BODY: Contains suspicious reward/winning language -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -1.0 MAILING_LIST_MULTI Multiple indicators imply a widely-seen list manager -0.0 DKIMWL_WL_HIGH DKIMwl.org - High trust sender SpamTally: Final spam score: 1 6.17-stable review patch. If anyone has any objections, please let me know. ------------------ From: James Clark [ Upstream commit 08d24e076d0fb9f90522ef69bf6cdae06e0919de ] Include the header for FIELD_GET which is only sometimes transitively included on some configs and kernel releases. Reported-by: Linux Kernel Functional Testing Closes: https://lists.linaro.org/archives/list/lkft-triage@lists.linaro.org/thread/6GKMK52PPRJVEYMEUHJP6BXF4CJAXOFL/ Fixes: a4e65842e114 ("coresight: Only check bottom two claim bits") Signed-off-by: James Clark Signed-off-by: Suzuki K Poulose Link: https://lore.kernel.org/r/20250707-james-coresight-bitfield-include-v1-1-aa0f4220ecfd@linaro.org Signed-off-by: Sasha Levin --- drivers/hwtracing/coresight/coresight-core.c | 1 + drivers/hwtracing/coresight/coresight-etm4x-core.c | 1 + drivers/hwtracing/coresight/coresight-etm4x-sysfs.c | 1 + drivers/hwtracing/coresight/ultrasoc-smb.h | 1 + 4 files changed, 4 insertions(+) diff --git a/drivers/hwtracing/coresight/coresight-core.c b/drivers/hwtracing/coresight/coresight-core.c index fa758cc218275..c2db94f2ab237 100644 --- a/drivers/hwtracing/coresight/coresight-core.c +++ b/drivers/hwtracing/coresight/coresight-core.c @@ -3,6 +3,7 @@ * Copyright (c) 2012, The Linux Foundation. All rights reserved. */ +#include #include #include #include diff --git a/drivers/hwtracing/coresight/coresight-etm4x-core.c b/drivers/hwtracing/coresight/coresight-etm4x-core.c index 42e5d37403add..cbea200489c8f 100644 --- a/drivers/hwtracing/coresight/coresight-etm4x-core.c +++ b/drivers/hwtracing/coresight/coresight-etm4x-core.c @@ -4,6 +4,7 @@ */ #include +#include #include #include #include diff --git a/drivers/hwtracing/coresight/coresight-etm4x-sysfs.c b/drivers/hwtracing/coresight/coresight-etm4x-sysfs.c index ab251865b893d..e9eeea6240d55 100644 --- a/drivers/hwtracing/coresight/coresight-etm4x-sysfs.c +++ b/drivers/hwtracing/coresight/coresight-etm4x-sysfs.c @@ -4,6 +4,7 @@ * Author: Mathieu Poirier */ +#include #include #include #include diff --git a/drivers/hwtracing/coresight/ultrasoc-smb.h b/drivers/hwtracing/coresight/ultrasoc-smb.h index c4c111275627b..323f0ccb6878c 100644 --- a/drivers/hwtracing/coresight/ultrasoc-smb.h +++ b/drivers/hwtracing/coresight/ultrasoc-smb.h @@ -7,6 +7,7 @@ #ifndef _ULTRASOC_SMB_H #define _ULTRASOC_SMB_H +#include #include #include -- 2.51.0 From - Mon Oct 13 15:56:01 2025 X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 Return-Path: Delivered-To: hi@josie.lol Received: from witcher.mxrouting.net by witcher.mxrouting.net with LMTP id 4JPYMAkg7WhxQT4AYBR5ng (envelope-from ) for ; Mon, 13 Oct 2025 15:51:37 +0000 Return-path: Envelope-to: hi@josie.lol Delivery-date: Mon, 13 Oct 2025 15:51:37 +0000 Received: from am.mirrors.kernel.org ([147.75.80.249]) by witcher.mxrouting.net with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.98) (envelope-from ) id 1v8Kpl-0000000HCQx-1OUC for hi@josie.lol; Mon, 13 Oct 2025 15:51:37 +0000 Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id D49CE1889FF9 for ; Mon, 13 Oct 2025 15:51:45 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 22D492FE564; Mon, 13 Oct 2025 15:32:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="Zkk9seUb" X-Original-To: stable@vger.kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 EE4952A1BA; Mon, 13 Oct 2025 15:32:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369572; cv=none; b=gbjC8+0PX8xOz3UuJVED0oV03+pNag9W9r7rKZKBNO4S9NOZLZV8v6KXY2BzKlpghgPzIi43H13JwhiAuT6QUY8AnIGHdx/tTFiU84IbEpwQGmfHpK4GmJjlHAqyqbr/8QGB510rC1konRTm/zpTkfiNsT7Og4m5eX0XR7YoCL8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369572; c=relaxed/simple; bh=fBw+EZT5H1/CD54+IGk5CP53G/JmX1E71zDMYdm8H2g=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hen/0r65dpnnScad1SG9tza4QZjx90Ca/aaDwGSoEoULccTfPc8XvsFigVdq0AbZzwmLPWq7IGCS0Oz0bvKrhwaU9U+C2OdjmC1UrH7INWQUqXQXMKUlKz4ylsjFloOSsAUVHO9CFYHc6zFMnFWX0r79Ya58joPvWrDsRfrH6GQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b=Zkk9seUb; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 767B7C4CEE7; Mon, 13 Oct 2025 15:32:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1760369571; bh=fBw+EZT5H1/CD54+IGk5CP53G/JmX1E71zDMYdm8H2g=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Zkk9seUbmMhj5C8FjStnn1rHo37rdEY9SBbcxQDT4Lgc40+oGuHJaURS1qQRioAP9 zVldvw5+B7L1u3esZgX0Mwwj6MLjyIXw2pRBqi6qrJxCfCJu+spikKqqdlt7hlU4UG n23FDwRUrUMyFi9Nlo1tfVrdQrbsmzxUdtcGQEN4= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, Chenghai Huang , Herbert Xu , Sasha Levin Subject: [PATCH 6.17 293/563] crypto: hisilicon - re-enable address prefetch after device resuming Date: Mon, 13 Oct 2025 16:42:34 +0200 Message-ID: <20251013144421.883900496@linuxfoundation.org> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251013144411.274874080@linuxfoundation.org> References: <20251013144411.274874080@linuxfoundation.org> User-Agent: quilt/0.69 X-stable: review X-Patchwork-Hint: ignore Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-DKIM: signer='linuxfoundation.org' status='pass' reason='' DKIMCheck: Server passes DKIM test, 0 Spam score X-Spam-Score: 0.4 (/) X-Spam-Report: Spam detection software, running on the system "witcher.mxrouting.net", has performed the tests listed below against this email. Information: https://mxroutedocs.com/directadmin/spamfilters/ --- Content analysis details: (0.4 points) --- pts rule name description ---- ---------------------- ----------------------------------------- 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [URIs: linuxfoundation.org] 1.5 HEADER_FROM_DIFFERENT_DOMAINS From and EnvelopeFrom 2nd level mail domains are different 0.0 RCVD_IN_DNSWL_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to DNSWL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#DnsBlocklists-dnsbl-block for more information. [147.75.80.249 listed in list.dnswl.org] -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -1.0 MAILING_LIST_MULTI Multiple indicators imply a widely-seen list manager -0.0 DKIMWL_WL_HIGH DKIMwl.org - High trust sender SpamTally: Final spam score: 4 6.17-stable review patch. If anyone has any objections, please let me know. ------------------ From: Chenghai Huang [ Upstream commit 0dcd21443d9308ed88909d35aa0490c3fc680a47 ] When the device resumes from a suspended state, it will revert to its initial state and requires re-enabling. Currently, the address prefetch function is not re-enabled after device resuming. Move the address prefetch enable to the initialization process. In this way, the address prefetch can be enabled when the device resumes by calling the initialization process. Fixes: 607c191b371d ("crypto: hisilicon - support runtime PM for accelerator device") Signed-off-by: Chenghai Huang Signed-off-by: Herbert Xu Signed-off-by: Sasha Levin --- drivers/crypto/hisilicon/hpre/hpre_main.c | 3 +- drivers/crypto/hisilicon/qm.c | 3 - drivers/crypto/hisilicon/sec2/sec_main.c | 80 +++++++++++------------ drivers/crypto/hisilicon/zip/zip_main.c | 5 +- 4 files changed, 43 insertions(+), 48 deletions(-) diff --git a/drivers/crypto/hisilicon/hpre/hpre_main.c b/drivers/crypto/hisilicon/hpre/hpre_main.c index f5b47e5ff48a4..34f84978180f0 100644 --- a/drivers/crypto/hisilicon/hpre/hpre_main.c +++ b/drivers/crypto/hisilicon/hpre/hpre_main.c @@ -721,6 +721,7 @@ static int hpre_set_user_domain_and_cache(struct hisi_qm *qm) /* Config data buffer pasid needed by Kunpeng 920 */ hpre_config_pasid(qm); + hpre_open_sva_prefetch(qm); hpre_enable_clock_gate(qm); @@ -1450,8 +1451,6 @@ static int hpre_pf_probe_init(struct hpre *hpre) if (ret) return ret; - hpre_open_sva_prefetch(qm); - hisi_qm_dev_err_init(qm); ret = hpre_show_last_regs_init(qm); if (ret) diff --git a/drivers/crypto/hisilicon/qm.c b/drivers/crypto/hisilicon/qm.c index 2e4ee7ecfdfbb..a5cc0ccd94f1f 100644 --- a/drivers/crypto/hisilicon/qm.c +++ b/drivers/crypto/hisilicon/qm.c @@ -4447,9 +4447,6 @@ static void qm_restart_prepare(struct hisi_qm *qm) { u32 value; - if (qm->err_ini->open_sva_prefetch) - qm->err_ini->open_sva_prefetch(qm); - if (qm->ver >= QM_HW_V3) return; diff --git a/drivers/crypto/hisilicon/sec2/sec_main.c b/drivers/crypto/hisilicon/sec2/sec_main.c index 72cf48d1f3ab8..ddb20f380b546 100644 --- a/drivers/crypto/hisilicon/sec2/sec_main.c +++ b/drivers/crypto/hisilicon/sec2/sec_main.c @@ -464,6 +464,45 @@ static void sec_set_endian(struct hisi_qm *qm) writel_relaxed(reg, qm->io_base + SEC_CONTROL_REG); } +static void sec_close_sva_prefetch(struct hisi_qm *qm) +{ + u32 val; + int ret; + + if (!test_bit(QM_SUPPORT_SVA_PREFETCH, &qm->caps)) + return; + + val = readl_relaxed(qm->io_base + SEC_PREFETCH_CFG); + val |= SEC_PREFETCH_DISABLE; + writel(val, qm->io_base + SEC_PREFETCH_CFG); + + ret = readl_relaxed_poll_timeout(qm->io_base + SEC_SVA_TRANS, + val, !(val & SEC_SVA_DISABLE_READY), + SEC_DELAY_10_US, SEC_POLL_TIMEOUT_US); + if (ret) + pci_err(qm->pdev, "failed to close sva prefetch\n"); +} + +static void sec_open_sva_prefetch(struct hisi_qm *qm) +{ + u32 val; + int ret; + + if (!test_bit(QM_SUPPORT_SVA_PREFETCH, &qm->caps)) + return; + + /* Enable prefetch */ + val = readl_relaxed(qm->io_base + SEC_PREFETCH_CFG); + val &= SEC_PREFETCH_ENABLE; + writel(val, qm->io_base + SEC_PREFETCH_CFG); + + ret = readl_relaxed_poll_timeout(qm->io_base + SEC_PREFETCH_CFG, + val, !(val & SEC_PREFETCH_DISABLE), + SEC_DELAY_10_US, SEC_POLL_TIMEOUT_US); + if (ret) + pci_err(qm->pdev, "failed to open sva prefetch\n"); +} + static void sec_engine_sva_config(struct hisi_qm *qm) { u32 reg; @@ -497,45 +536,7 @@ static void sec_engine_sva_config(struct hisi_qm *qm) writel_relaxed(reg, qm->io_base + SEC_INTERFACE_USER_CTRL1_REG); } -} - -static void sec_open_sva_prefetch(struct hisi_qm *qm) -{ - u32 val; - int ret; - - if (!test_bit(QM_SUPPORT_SVA_PREFETCH, &qm->caps)) - return; - - /* Enable prefetch */ - val = readl_relaxed(qm->io_base + SEC_PREFETCH_CFG); - val &= SEC_PREFETCH_ENABLE; - writel(val, qm->io_base + SEC_PREFETCH_CFG); - - ret = readl_relaxed_poll_timeout(qm->io_base + SEC_PREFETCH_CFG, - val, !(val & SEC_PREFETCH_DISABLE), - SEC_DELAY_10_US, SEC_POLL_TIMEOUT_US); - if (ret) - pci_err(qm->pdev, "failed to open sva prefetch\n"); -} - -static void sec_close_sva_prefetch(struct hisi_qm *qm) -{ - u32 val; - int ret; - - if (!test_bit(QM_SUPPORT_SVA_PREFETCH, &qm->caps)) - return; - - val = readl_relaxed(qm->io_base + SEC_PREFETCH_CFG); - val |= SEC_PREFETCH_DISABLE; - writel(val, qm->io_base + SEC_PREFETCH_CFG); - - ret = readl_relaxed_poll_timeout(qm->io_base + SEC_SVA_TRANS, - val, !(val & SEC_SVA_DISABLE_READY), - SEC_DELAY_10_US, SEC_POLL_TIMEOUT_US); - if (ret) - pci_err(qm->pdev, "failed to close sva prefetch\n"); + sec_open_sva_prefetch(qm); } static void sec_enable_clock_gate(struct hisi_qm *qm) @@ -1152,7 +1153,6 @@ static int sec_pf_probe_init(struct sec_dev *sec) if (ret) return ret; - sec_open_sva_prefetch(qm); hisi_qm_dev_err_init(qm); sec_debug_regs_clear(qm); ret = sec_show_last_regs_init(qm); diff --git a/drivers/crypto/hisilicon/zip/zip_main.c b/drivers/crypto/hisilicon/zip/zip_main.c index fb7b19927dd32..480fa590664a8 100644 --- a/drivers/crypto/hisilicon/zip/zip_main.c +++ b/drivers/crypto/hisilicon/zip/zip_main.c @@ -557,6 +557,7 @@ static int hisi_zip_set_user_domain_and_cache(struct hisi_qm *qm) writel(AXUSER_BASE, base + HZIP_DATA_WUSER_32_63); writel(AXUSER_BASE, base + HZIP_SGL_RUSER_32_63); } + hisi_zip_open_sva_prefetch(qm); /* let's open all compression/decompression cores */ @@ -572,6 +573,7 @@ static int hisi_zip_set_user_domain_and_cache(struct hisi_qm *qm) CQC_CACHE_WB_ENABLE | FIELD_PREP(SQC_CACHE_WB_THRD, 1) | FIELD_PREP(CQC_CACHE_WB_THRD, 1), base + QM_CACHE_CTL); + hisi_zip_set_high_perf(qm); hisi_zip_enable_clock_gate(qm); return hisi_dae_set_user_domain(qm); @@ -1243,9 +1245,6 @@ static int hisi_zip_pf_probe_init(struct hisi_zip *hisi_zip) if (ret) return ret; - hisi_zip_set_high_perf(qm); - - hisi_zip_open_sva_prefetch(qm); hisi_qm_dev_err_init(qm); hisi_zip_debug_regs_clear(qm); -- 2.51.0 From - Mon Oct 13 15:56:01 2025 X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 Return-Path: Delivered-To: hi@josie.lol Received: from witcher.mxrouting.net by witcher.mxrouting.net with LMTP id SDBPBuIf7WhVojMAYBR5ng (envelope-from ) for ; Mon, 13 Oct 2025 15:50:58 +0000 Return-path: Envelope-to: hi@josie.lol Delivery-date: Mon, 13 Oct 2025 15:50:58 +0000 Received: from am.mirrors.kernel.org ([147.75.80.249]) by witcher.mxrouting.net with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.98) (envelope-from ) id 1v8Kp7-0000000HB86-379n for hi@josie.lol; Mon, 13 Oct 2025 15:50:58 +0000 Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 632BB18A0B40 for ; Mon, 13 Oct 2025 15:51:20 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id E64B530B500; Mon, 13 Oct 2025 15:32:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="pYvqrrla" X-Original-To: stable@vger.kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 C00E526F2B6; Mon, 13 Oct 2025 15:32:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369541; cv=none; b=uSNZ8SCuklQKqES7/VTrIQDmU88yaC4GD6QxcdovWU2FiAVsY70KOHBxqbc5gN/SmFxQwOXUJi3LKx/56hwLCmhRNal+wYR9CYQQlf1mU2bawoBzVAAUNkG93j6XUreH6McKtoWNm1WWV06FE3NUmghB+2GfGOYeDPPkkxBj4QY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369541; c=relaxed/simple; bh=jzXuiocfFCcgtsKrddEckm6DYEqPHlmi15s7gwLQDiA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=XBzqVtCEqHQBQUfpnzeJlatBR0xfSx1LLhxn4mi5v6tSKR1AScSpgKoJoM6x9o0NmXhfbMa8pWpwDrVzzJa9YRyZ4udPZSeSyy8uplLLP5RdpPMbHrvpVYCMpgCe1uftMePmS16clp+WTVzMthaWqGDPsAFyxEJ158nrZwHR0sU= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b=pYvqrrla; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 469B9C4CEE7; Mon, 13 Oct 2025 15:32:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1760369540; bh=jzXuiocfFCcgtsKrddEckm6DYEqPHlmi15s7gwLQDiA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pYvqrrlacdFlNCxUBL1ZHkfpbtZHEOu8VLbty7Vg5d6zuf9ySCh463nDt98o9rsw0 jqMZBKBS+Qwf0EjVfuHUm6dgB76FvmhvczMlHEOWgAOy537HNmbBRChk3/Qo7+z42n 4IP0oJwQpMF+YsXU4MTOdRsG0wSvwtY5Cbmiky7w= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, Geert Uytterhoeven , Richard Lyu , Gerd Hoffmann , Ard Biesheuvel , Sasha Levin Subject: [PATCH 6.17 283/563] efi: Explain OVMF acronym in OVMF_DEBUG_LOG help text Date: Mon, 13 Oct 2025 16:42:24 +0200 Message-ID: <20251013144421.523205724@linuxfoundation.org> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251013144411.274874080@linuxfoundation.org> References: <20251013144411.274874080@linuxfoundation.org> User-Agent: quilt/0.69 X-stable: review X-Patchwork-Hint: ignore Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-DKIM: signer='linuxfoundation.org' status='pass' reason='' DKIMCheck: Server passes DKIM test, 0 Spam score X-Spam-Score: -1.9 (-) X-Spam-Report: Spam detection software, running on the system "witcher.mxrouting.net", has performed the tests listed below against this email. Information: https://mxroutedocs.com/directadmin/spamfilters/ --- Content analysis details: (-1.9 points) --- pts rule name description ---- ---------------------- ----------------------------------------- 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [URIs: linuxfoundation.org] -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [147.75.80.249 listed in list.dnswl.org] 1.5 HEADER_FROM_DIFFERENT_DOMAINS From and EnvelopeFrom 2nd level mail domains are different -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -1.0 MAILING_LIST_MULTI Multiple indicators imply a widely-seen list manager -0.0 DKIMWL_WL_HIGH DKIMwl.org - High trust sender SpamTally: Final spam score: -18 6.17-stable review patch. If anyone has any objections, please let me know. ------------------ From: Geert Uytterhoeven [ Upstream commit 05e75ac35ee9e38f96bbfebf1830ec2cace2e7f8 ] People not very intimate with EFI may not know the meaning of the OVMF acronym. Write it in full, to help users with making good decisions when configuring their kernels. Fixes: f393a761763c5427 ("efi: add ovmf debug log driver") Signed-off-by: Geert Uytterhoeven Reviewed-by: Richard Lyu Acked-by: Gerd Hoffmann Signed-off-by: Ard Biesheuvel Signed-off-by: Sasha Levin --- drivers/firmware/efi/Kconfig | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/firmware/efi/Kconfig b/drivers/firmware/efi/Kconfig index d528c94c5859b..29e0729299f5b 100644 --- a/drivers/firmware/efi/Kconfig +++ b/drivers/firmware/efi/Kconfig @@ -267,9 +267,10 @@ config OVMF_DEBUG_LOG bool "Expose OVMF firmware debug log via sysfs" depends on EFI help - Recent OVMF versions (edk2-stable202508 + newer) can write - their debug log to a memory buffer. This driver exposes the - log content via sysfs (/sys/firmware/efi/ovmf_debug_log). + Recent versions of the Open Virtual Machine Firmware + (edk2-stable202508 + newer) can write their debug log to a memory + buffer. This driver exposes the log content via sysfs + (/sys/firmware/efi/ovmf_debug_log). config UNACCEPTED_MEMORY bool -- 2.51.0 From - Mon Oct 13 15:56:01 2025 X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 Return-Path: Delivered-To: hi@josie.lol Received: from witcher.mxrouting.net by witcher.mxrouting.net with LMTP id 0BfvMuAf7WiEQT4AYBR5ng (envelope-from ) for ; Mon, 13 Oct 2025 15:50:56 +0000 Return-path: Envelope-to: hi@josie.lol Delivery-date: Mon, 13 Oct 2025 15:50:56 +0000 Received: from am.mirrors.kernel.org ([147.75.80.249]) by witcher.mxrouting.net with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.98) (envelope-from ) id 1v8Kp6-0000000HB6A-21w2 for hi@josie.lol; Mon, 13 Oct 2025 15:50:56 +0000 Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 2200E189F9E7 for ; Mon, 13 Oct 2025 15:51:19 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 107D230B50B; Mon, 13 Oct 2025 15:32:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="NUeC5ZYW" X-Original-To: stable@vger.kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 DC6EA30B505; Mon, 13 Oct 2025 15:32:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369538; cv=none; b=ua93/9pflTGdt2YaC+yeyj03y6ME/mk7vvIZ7nIgCkctIXCOhi12kk4QbeER9MsEDyqtFyMNuwbYqK2ZSSHQB+9hTvIMjUU8ydTtHandwO79tgXeFQI5T+NXR8ZBB5CTPa9TO7mzz9xXrDEhZyDPiQ3KOZ90uAcJ0W0vx4S5Gdo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369538; c=relaxed/simple; bh=Q9r0+TZHDDO+8A8uPBZTmXQaZ8vckD2qRxJH2FzCpHo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ntvTC5vtpRRCYL7t6OqWh0QAOIFd2Y7TNEKqcH2RzdLAsFY9IhFSlCUMlDNYLWIzlMILuN1EY9brTgGEAjUILnbAKc5jgvvp3j2QZem5wRVS8/ccXHGjCoi1kKk5KYvXNYu0HewU8bInBAGdRpv97saj5BK3gx44L4KmfuZ/alM= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b=NUeC5ZYW; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5FF20C4CEE7; Mon, 13 Oct 2025 15:32:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1760369537; bh=Q9r0+TZHDDO+8A8uPBZTmXQaZ8vckD2qRxJH2FzCpHo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=NUeC5ZYW7F6lKp3Gqc4i1HZXI0gOB+x8vH92OBY0oo/wWJ5kAuLP9EhZR0JN6cZIE MbpkmWq0xyTIO1h/6EzTHGioQDvCVV2sPZiqO++zE6sHtZbkyC9z0HiQsmA2ma+hqy 5wGLHkFAi62CKpHdvOIEQ281LC7DMIIHVR7os9Tw= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, Qianfeng Rong , Lizhi Hou , Sasha Levin Subject: [PATCH 6.17 282/563] accel/amdxdna: Use int instead of u32 to store error codes Date: Mon, 13 Oct 2025 16:42:23 +0200 Message-ID: <20251013144421.487305982@linuxfoundation.org> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251013144411.274874080@linuxfoundation.org> References: <20251013144411.274874080@linuxfoundation.org> User-Agent: quilt/0.69 X-stable: review X-Patchwork-Hint: ignore Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-DKIM: signer='linuxfoundation.org' status='pass' reason='' DKIMCheck: Server passes DKIM test, 0 Spam score X-Spam-Score: -1.9 (-) X-Spam-Report: Spam detection software, running on the system "witcher.mxrouting.net", has performed the tests listed below against this email. Information: https://mxroutedocs.com/directadmin/spamfilters/ --- Content analysis details: (-1.9 points) --- pts rule name description ---- ---------------------- ----------------------------------------- 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [URIs: linuxfoundation.org] -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [147.75.80.249 listed in list.dnswl.org] 1.5 HEADER_FROM_DIFFERENT_DOMAINS From and EnvelopeFrom 2nd level mail domains are different -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -1.0 MAILING_LIST_MULTI Multiple indicators imply a widely-seen list manager -0.0 DKIMWL_WL_HIGH DKIMwl.org - High trust sender SpamTally: Final spam score: -18 6.17-stable review patch. If anyone has any objections, please let me know. ------------------ From: Qianfeng Rong [ Upstream commit 24de3daf6179bce3710527b8292d7ee6f1b56393 ] Change the 'ret' variable from u32 to int to store -EINVAL. Storing the negative error codes in unsigned type, doesn't cause an issue at runtime but it's ugly as pants. Additionally, assigning -EINVAL to u32 ret (i.e., u32 ret = -EINVAL) may trigger a GCC warning when the -Wsign-conversion flag is enabled. Fixes: aac243092b70 ("accel/amdxdna: Add command execution") Signed-off-by: Qianfeng Rong Reviewed-by: Lizhi Hou Signed-off-by: Lizhi Hou Link: https://lore.kernel.org/r/20250828033917.113364-1-rongqianfeng@vivo.com Signed-off-by: Sasha Levin --- drivers/accel/amdxdna/aie2_ctx.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/accel/amdxdna/aie2_ctx.c b/drivers/accel/amdxdna/aie2_ctx.c index 2cff5419bd2fa..cda964ba33cd7 100644 --- a/drivers/accel/amdxdna/aie2_ctx.c +++ b/drivers/accel/amdxdna/aie2_ctx.c @@ -192,7 +192,7 @@ aie2_sched_resp_handler(void *handle, void __iomem *data, size_t size) { struct amdxdna_sched_job *job = handle; struct amdxdna_gem_obj *cmd_abo; - u32 ret = 0; + int ret = 0; u32 status; cmd_abo = job->cmd_bo; @@ -222,7 +222,7 @@ static int aie2_sched_nocmd_resp_handler(void *handle, void __iomem *data, size_t size) { struct amdxdna_sched_job *job = handle; - u32 ret = 0; + int ret = 0; u32 status; if (unlikely(!data)) @@ -250,7 +250,7 @@ aie2_sched_cmdlist_resp_handler(void *handle, void __iomem *data, size_t size) u32 fail_cmd_status; u32 fail_cmd_idx; u32 cmd_status; - u32 ret = 0; + int ret = 0; cmd_abo = job->cmd_bo; if (unlikely(!data) || unlikely(size != sizeof(u32) * 3)) { -- 2.51.0 From - Mon Oct 13 15:56:01 2025 X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 Return-Path: Delivered-To: hi@josie.lol Received: from witcher.mxrouting.net by witcher.mxrouting.net with LMTP id WCxeHdsf7WiEQT4AYBR5ng (envelope-from ) for ; Mon, 13 Oct 2025 15:50:51 +0000 Return-path: Envelope-to: hi@josie.lol Delivery-date: Mon, 13 Oct 2025 15:50:51 +0000 Received: from am.mirrors.kernel.org ([147.75.80.249]) by witcher.mxrouting.net with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.98) (envelope-from ) id 1v8Kp1-0000000HAti-0R88 for hi@josie.lol; Mon, 13 Oct 2025 15:50:51 +0000 Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id A3948189FF6D for ; Mon, 13 Oct 2025 15:51:13 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id CCA5F30AD16; Mon, 13 Oct 2025 15:32:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="qDJc0Ezo" X-Original-To: stable@vger.kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 A626530AD0A; Mon, 13 Oct 2025 15:32:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369526; cv=none; b=bhE3BUcFQwdfrFUL+S8Q65MyZRXmid/OFUjlmvqvgO0WGaiccTdoWfr6bsV+u+JnAoD+aaYxe69TD54ZBufgAlqtxNVCeMGgKi7v3ehgx2+e/KRBvzb7Bmyx1kYc9cg0wd49FlzZbWTPK1r1Qy83OdT1rOB39ozYrHHf8rH2TNY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369526; c=relaxed/simple; bh=H+jHcfjguSScUxMImuQcwgth0HfB5HRgR3Oe/pVJJm0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=M/un3T3Tjwnjdna7ovN4CUOZRhV5S+07mlDxHQBy16unR5IBDZ00yPEIenQded+PCUbbgaz5lWtK7PmUvhM1u3XKOdmAMPkk3+UNkQZzelhZYXKzOToKAxvK/mw6tC4QamE5Uv7akUjJY+KShUmT5FNJoQLO8eWSh1/WAvhN1Aw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b=qDJc0Ezo; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 30DC2C4CEE7; Mon, 13 Oct 2025 15:32:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1760369526; bh=H+jHcfjguSScUxMImuQcwgth0HfB5HRgR3Oe/pVJJm0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=qDJc0EzoSniCPwIOCfkH3fONH3MSit0QQiUY3ZfCD9YZlRnpp/RfCJKMjTXvHi1og Buj60AN2PYKE/jXubuqEjF7fmsJZEQ7Ve7q7nW4L0fRM9W09wYt6tXEg7R7fcQD9mI vRs6KKA9bhsx16EmFHyn2scPSFHbOPPMUf7ao2Ps= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, Arnd Bergmann , Hans Verkuil , Sasha Levin Subject: [PATCH 6.17 278/563] media: st-delta: avoid excessive stack usage Date: Mon, 13 Oct 2025 16:42:19 +0200 Message-ID: <20251013144421.343069931@linuxfoundation.org> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251013144411.274874080@linuxfoundation.org> References: <20251013144411.274874080@linuxfoundation.org> User-Agent: quilt/0.69 X-stable: review X-Patchwork-Hint: ignore Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-DKIM: signer='linuxfoundation.org' status='pass' reason='' DKIMCheck: Server passes DKIM test, 0 Spam score X-Spam-Score: -1.9 (-) X-Spam-Report: Spam detection software, running on the system "witcher.mxrouting.net", has performed the tests listed below against this email. Information: https://mxroutedocs.com/directadmin/spamfilters/ --- Content analysis details: (-1.9 points) --- pts rule name description ---- ---------------------- ----------------------------------------- 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [URIs: linuxfoundation.org] -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [147.75.80.249 listed in list.dnswl.org] 1.5 HEADER_FROM_DIFFERENT_DOMAINS From and EnvelopeFrom 2nd level mail domains are different -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -1.0 MAILING_LIST_MULTI Multiple indicators imply a widely-seen list manager -0.0 DKIMWL_WL_HIGH DKIMwl.org - High trust sender SpamTally: Final spam score: -18 6.17-stable review patch. If anyone has any objections, please let me know. ------------------ From: Arnd Bergmann [ Upstream commit 5954ad7d1af92cb6244c5f31216e43af55febbb7 ] Building with a reduced stack warning limit shows that delta_mjpeg_decode() copies a giant structure to the stack each time but only uses three of its members: drivers/media/platform/st/sti/delta/delta-mjpeg-dec.c: In function 'delta_mjpeg_decode': drivers/media/platform/st/sti/delta/delta-mjpeg-dec.c:427:1: error: the frame size of 1296 bytes is larger than 1280 bytes [-Werror=frame-larger-than=] Open-code the passing of the structure members that are actually used here. Fixes: 433ff5b4a29b ("[media] st-delta: add mjpeg support") Signed-off-by: Arnd Bergmann Signed-off-by: Hans Verkuil Signed-off-by: Sasha Levin --- .../platform/st/sti/delta/delta-mjpeg-dec.c | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/drivers/media/platform/st/sti/delta/delta-mjpeg-dec.c b/drivers/media/platform/st/sti/delta/delta-mjpeg-dec.c index 0533d4a083d24..a078f1107300e 100644 --- a/drivers/media/platform/st/sti/delta/delta-mjpeg-dec.c +++ b/drivers/media/platform/st/sti/delta/delta-mjpeg-dec.c @@ -239,7 +239,7 @@ static int delta_mjpeg_ipc_open(struct delta_ctx *pctx) return 0; } -static int delta_mjpeg_ipc_decode(struct delta_ctx *pctx, struct delta_au *au) +static int delta_mjpeg_ipc_decode(struct delta_ctx *pctx, dma_addr_t pstart, dma_addr_t pend) { struct delta_dev *delta = pctx->dev; struct delta_mjpeg_ctx *ctx = to_ctx(pctx); @@ -256,8 +256,8 @@ static int delta_mjpeg_ipc_decode(struct delta_ctx *pctx, struct delta_au *au) memset(params, 0, sizeof(*params)); - params->picture_start_addr_p = (u32)(au->paddr); - params->picture_end_addr_p = (u32)(au->paddr + au->size - 1); + params->picture_start_addr_p = pstart; + params->picture_end_addr_p = pend; /* * !WARNING! @@ -374,12 +374,14 @@ static int delta_mjpeg_decode(struct delta_ctx *pctx, struct delta_au *pau) struct delta_dev *delta = pctx->dev; struct delta_mjpeg_ctx *ctx = to_ctx(pctx); int ret; - struct delta_au au = *pau; + void *au_vaddr = pau->vaddr; + dma_addr_t au_dma = pau->paddr; + size_t au_size = pau->size; unsigned int data_offset = 0; struct mjpeg_header *header = &ctx->header_struct; if (!ctx->header) { - ret = delta_mjpeg_read_header(pctx, au.vaddr, au.size, + ret = delta_mjpeg_read_header(pctx, au_vaddr, au_size, header, &data_offset); if (ret) { pctx->stream_errors++; @@ -405,17 +407,17 @@ static int delta_mjpeg_decode(struct delta_ctx *pctx, struct delta_au *pau) goto err; } - ret = delta_mjpeg_read_header(pctx, au.vaddr, au.size, + ret = delta_mjpeg_read_header(pctx, au_vaddr, au_size, ctx->header, &data_offset); if (ret) { pctx->stream_errors++; goto err; } - au.paddr += data_offset; - au.vaddr += data_offset; + au_dma += data_offset; + au_vaddr += data_offset; - ret = delta_mjpeg_ipc_decode(pctx, &au); + ret = delta_mjpeg_ipc_decode(pctx, au_dma, au_dma + au_size - 1); if (ret) goto err; -- 2.51.0 From - Mon Oct 13 15:56:01 2025 X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 Return-Path: Delivered-To: hi@josie.lol Received: from witcher.mxrouting.net by witcher.mxrouting.net with LMTP id IAjhFBgg7WhxQT4AYBR5ng (envelope-from ) for ; Mon, 13 Oct 2025 15:51:52 +0000 Return-path: Envelope-to: hi@josie.lol Delivery-date: Mon, 13 Oct 2025 15:51:52 +0000 Received: from am.mirrors.kernel.org ([147.75.80.249]) by witcher.mxrouting.net with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.98) (envelope-from ) id 1v8Kq0-0000000HCya-03Ge for hi@josie.lol; Mon, 13 Oct 2025 15:51:52 +0000 Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id A2BF61890AF5 for ; Mon, 13 Oct 2025 15:52:05 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 9C0F630BF6C; Mon, 13 Oct 2025 15:33:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="CjTbQLWG" X-Original-To: stable@vger.kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 765DF30BF63; Mon, 13 Oct 2025 15:33:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369617; cv=none; b=GS6FVJn/O/ntxSWpFVHlKWJu1Ojf+fCd+neA2MbxsT7CSULuNzGrSso+7eWN9DxQPCgTot6z0Puc31D/p/XITytsYx7ZChLLj90GEvcu+2tTZHXOnkSAqfexP1x+ea/ADGZUwMDCYTl3/AUpfWWJE+QTDiYQ6DeFzS+BCX+62kU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369617; c=relaxed/simple; bh=3CpiIlcG9po4F9c2NGdSatt8mUUZsnrgsLtns01K948=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=H/RLGT2/yfFSzaTQf+t636i33hfVEfnwpmfT6FngzZPzE+jKBfe46okPAWXb1vAhquaOlObfW31kDf8PjqZ/0pvrQPTzADs+sdiO4FKb65xEx+BEctLuk9VpcVacKYhmltdW92THFDT0dq+9l1kL2UyR2Nh8/B7KPtNb2QyyjKk= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b=CjTbQLWG; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id AC19FC4CEE7; Mon, 13 Oct 2025 15:33:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1760369617; bh=3CpiIlcG9po4F9c2NGdSatt8mUUZsnrgsLtns01K948=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CjTbQLWGBBrZFhJnHqwWjeN4FeidLyTtnKDqcC4PTNxbOBhURGcXhVkbZXfQpv7FX bh0fObCNoQdBVeKsrg9GfxIzFPQjdT5l0CduEgEK7jFgDvWE9pG6dTd3JwRk/E99YQ 0hRuDkZJbZGUnpvbcqU0zSFkZVMfbTCKmVEMYd3I= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, Dan Carpenter , Douglas Anderson , Pin-yen Lin , Jiri Kosina , Sasha Levin Subject: [PATCH 6.17 276/563] HID: i2c-hid: Fix test in i2c_hid_core_register_panel_follower() Date: Mon, 13 Oct 2025 16:42:17 +0200 Message-ID: <20251013144421.271701885@linuxfoundation.org> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251013144411.274874080@linuxfoundation.org> References: <20251013144411.274874080@linuxfoundation.org> User-Agent: quilt/0.69 X-stable: review X-Patchwork-Hint: ignore Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-DKIM: signer='linuxfoundation.org' status='pass' reason='' DKIMCheck: Server passes DKIM test, 0 Spam score X-Spam-Score: 0.4 (/) X-Spam-Report: Spam detection software, running on the system "witcher.mxrouting.net", has performed the tests listed below against this email. Information: https://mxroutedocs.com/directadmin/spamfilters/ --- Content analysis details: (0.4 points) --- pts rule name description ---- ---------------------- ----------------------------------------- 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [URIs: linuxfoundation.org] 0.0 RCVD_IN_DNSWL_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to DNSWL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#DnsBlocklists-dnsbl-block for more information. [147.75.80.249 listed in list.dnswl.org] 1.5 HEADER_FROM_DIFFERENT_DOMAINS From and EnvelopeFrom 2nd level mail domains are different -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -1.0 MAILING_LIST_MULTI Multiple indicators imply a widely-seen list manager -0.0 DKIMWL_WL_HIGH DKIMwl.org - High trust sender SpamTally: Final spam score: 4 6.17-stable review patch. If anyone has any objections, please let me know. ------------------ From: Dan Carpenter [ Upstream commit 5c76c794bf29399394ebacaa5af8436b8bed0d46 ] Bitwise AND was intended instead of OR. With the current code the condition is always true. Fixes: cbdd16b818ee ("HID: i2c-hid: Make elan touch controllers power on after panel is enabled") Signed-off-by: Dan Carpenter Reviewed-by: Douglas Anderson Reviewed-by: Pin-yen Lin Acked-by: Jiri Kosina Signed-off-by: Douglas Anderson Link: https://lore.kernel.org/r/aK8Au3CgZSTvfEJ6@stanley.mountain Signed-off-by: Sasha Levin --- drivers/hid/i2c-hid/i2c-hid-core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/hid/i2c-hid/i2c-hid-core.c b/drivers/hid/i2c-hid/i2c-hid-core.c index 99ce6386176c6..30ebde1273be3 100644 --- a/drivers/hid/i2c-hid/i2c-hid-core.c +++ b/drivers/hid/i2c-hid/i2c-hid-core.c @@ -1189,7 +1189,7 @@ static int i2c_hid_core_register_panel_follower(struct i2c_hid *ihid) struct device *dev = &ihid->client->dev; int ret; - if (ihid->hid->initial_quirks | HID_QUIRK_POWER_ON_AFTER_BACKLIGHT) + if (ihid->hid->initial_quirks & HID_QUIRK_POWER_ON_AFTER_BACKLIGHT) ihid->panel_follower.funcs = &i2c_hid_core_panel_follower_enable_funcs; else ihid->panel_follower.funcs = &i2c_hid_core_panel_follower_prepare_funcs; -- 2.51.0 From - Mon Oct 13 15:56:01 2025 X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 Return-Path: Delivered-To: hi@josie.lol Received: from witcher.mxrouting.net by witcher.mxrouting.net with LMTP id IMeJDOcf7WhIQjwAYBR5ng (envelope-from ) for ; Mon, 13 Oct 2025 15:51:03 +0000 Return-path: Envelope-to: hi@josie.lol Delivery-date: Mon, 13 Oct 2025 15:51:03 +0000 Received: from am.mirrors.kernel.org ([147.75.80.249]) by witcher.mxrouting.net with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.98) (envelope-from ) id 1v8KpC-0000000HBOR-3NRT for hi@josie.lol; Mon, 13 Oct 2025 15:51:03 +0000 Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 75FA1189FF75 for ; Mon, 13 Oct 2025 15:51:25 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 8B9BE30B510; Mon, 13 Oct 2025 15:32:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="s0+3Cs3W" X-Original-To: stable@vger.kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 6458B2FE564; Mon, 13 Oct 2025 15:32:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369552; cv=none; b=FaMa4l1faAc2aN6P+NROg6buhC1c3AzznH0AYl7lAB8i0WLWiRKPWZDKjdvtPnZEtU1OMaqIMxgzbfO+1SypN/0G2JbBD858oaW7G0Uec9bs6LU+mYKRs4zS1IhlHUXxIf2/vWHtlqx7vfIyKpzX4z9Xd+HJf1JExdA7ZhRpw2o= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369552; c=relaxed/simple; bh=5UVdqTPr+TNpu++CYmLE8vu320R1qoTuzw349w/mj1U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=me1hbIH61X9StPk6AqgGLVgt2oLtE4BoPdEC0jo+9T9eMbhDJaBEIgjri3CskPJcSjC+nKulQmu0aB6KRqnWRbGavjQGC60IAwtPNRsVehJe7DlQjZ7skq5CqcxCp8QXkeyory12tPhJ224NceOy8RN5KZid0uzElu2Ahlyvus0= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b=s0+3Cs3W; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 86110C4CEFE; Mon, 13 Oct 2025 15:32:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1760369551; bh=5UVdqTPr+TNpu++CYmLE8vu320R1qoTuzw349w/mj1U=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=s0+3Cs3WvRRY8gc2mCX3g6fMFEAHF1sXSS6mnKecgi1FbsAH2mjlQyt4j8hBOikuv 8VyQEcuxKg5QvCgaix7tKlaKXatl87+kPeScZN+ZRGKtAQ2RtlWfptKfSctAgVHIkG JCHspAGTRy/zTsUqJK14/klJX5zjBnwCDe+YeDfU= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, Christian Marangi , Andrew Lunn , Jakub Kicinski , Sasha Levin Subject: [PATCH 6.17 269/563] net: phy: introduce phy_id_compare_vendor() PHY ID helper Date: Mon, 13 Oct 2025 16:42:10 +0200 Message-ID: <20251013144421.020763433@linuxfoundation.org> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251013144411.274874080@linuxfoundation.org> References: <20251013144411.274874080@linuxfoundation.org> User-Agent: quilt/0.69 X-stable: review X-Patchwork-Hint: ignore Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-DKIM: signer='linuxfoundation.org' status='pass' reason='' DKIMCheck: Server passes DKIM test, 0 Spam score X-Spam-Score: -1.9 (-) X-Spam-Report: Spam detection software, running on the system "witcher.mxrouting.net", has performed the tests listed below against this email. Information: https://mxroutedocs.com/directadmin/spamfilters/ --- Content analysis details: (-1.9 points) --- pts rule name description ---- ---------------------- ----------------------------------------- 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [URIs: msgid.link] -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [147.75.80.249 listed in list.dnswl.org] 1.5 HEADER_FROM_DIFFERENT_DOMAINS From and EnvelopeFrom 2nd level mail domains are different -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -1.0 MAILING_LIST_MULTI Multiple indicators imply a widely-seen list manager -0.0 DKIMWL_WL_HIGH DKIMwl.org - High trust sender SpamTally: Final spam score: -18 6.17-stable review patch. If anyone has any objections, please let me know. ------------------ From: Christian Marangi [ Upstream commit 1abe21ef1adf0c5b6dbb5878c2fa4573df8d29fc ] Introduce phy_id_compare_vendor() PHY ID helper to compare a PHY ID with the PHY ID Vendor using the generic PHY ID Vendor mask. While at it also rework the PHY_ID_MATCH macro and move the mask to dedicated define so that PHY driver can make use of the mask if needed. Signed-off-by: Christian Marangi Reviewed-by: Andrew Lunn Link: https://patch.msgid.link/20250823134431.4854-1-ansuelsmth@gmail.com Signed-off-by: Jakub Kicinski Stable-dep-of: b4d5cd20507b ("net: phy: as21xxx: better handle PHY HW reset on soft-reboot") Signed-off-by: Sasha Levin --- include/linux/phy.h | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/include/linux/phy.h b/include/linux/phy.h index bb45787d86848..04553419adc3f 100644 --- a/include/linux/phy.h +++ b/include/linux/phy.h @@ -1273,9 +1273,13 @@ struct phy_driver { #define to_phy_driver(d) container_of_const(to_mdio_common_driver(d), \ struct phy_driver, mdiodrv) -#define PHY_ID_MATCH_EXACT(id) .phy_id = (id), .phy_id_mask = GENMASK(31, 0) -#define PHY_ID_MATCH_MODEL(id) .phy_id = (id), .phy_id_mask = GENMASK(31, 4) -#define PHY_ID_MATCH_VENDOR(id) .phy_id = (id), .phy_id_mask = GENMASK(31, 10) +#define PHY_ID_MATCH_EXTACT_MASK GENMASK(31, 0) +#define PHY_ID_MATCH_MODEL_MASK GENMASK(31, 4) +#define PHY_ID_MATCH_VENDOR_MASK GENMASK(31, 10) + +#define PHY_ID_MATCH_EXACT(id) .phy_id = (id), .phy_id_mask = PHY_ID_MATCH_EXTACT_MASK +#define PHY_ID_MATCH_MODEL(id) .phy_id = (id), .phy_id_mask = PHY_ID_MATCH_MODEL_MASK +#define PHY_ID_MATCH_VENDOR(id) .phy_id = (id), .phy_id_mask = PHY_ID_MATCH_VENDOR_MASK /** * phy_id_compare - compare @id1 with @id2 taking account of @mask @@ -1291,6 +1295,19 @@ static inline bool phy_id_compare(u32 id1, u32 id2, u32 mask) return !((id1 ^ id2) & mask); } +/** + * phy_id_compare_vendor - compare @id with @vendor mask + * @id: PHY ID + * @vendor_mask: PHY Vendor mask + * + * Return: true if the bits from @id match @vendor using the + * generic PHY Vendor mask. + */ +static inline bool phy_id_compare_vendor(u32 id, u32 vendor_mask) +{ + return phy_id_compare(id, vendor_mask, PHY_ID_MATCH_VENDOR_MASK); +} + /** * phydev_id_compare - compare @id with the PHY's Clause 22 ID * @phydev: the PHY device -- 2.51.0 From - Mon Oct 13 15:56:01 2025 X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 Return-Path: Delivered-To: hi@josie.lol Received: from witcher.mxrouting.net by witcher.mxrouting.net with LMTP id cEM+LMAf7WgybTkAYBR5ng (envelope-from ) for ; Mon, 13 Oct 2025 15:50:24 +0000 Return-path: Envelope-to: hi@josie.lol Delivery-date: Mon, 13 Oct 2025 15:50:24 +0000 Received: from ams.mirrors.kernel.org ([213.196.21.55]) by witcher.mxrouting.net with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.98) (envelope-from ) id 1v8Koa-0000000HA4F-1hkH for hi@josie.lol; Mon, 13 Oct 2025 15:50:24 +0000 Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.mirrors.kernel.org (Postfix) with ESMTPS id 730E034AC18 for ; Mon, 13 Oct 2025 15:50:23 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 1CBBD30AAC1; Mon, 13 Oct 2025 15:31:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="OUQi77q9" X-Original-To: stable@vger.kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 E9CDE30AAC0; Mon, 13 Oct 2025 15:31:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369470; cv=none; b=qqHqY23v1mMVe5juDufuR5NX+Xo7rN2ya6ymrSC/CvHX5/jLBRBB+SbBxBGgYJOnDnw7g32J8/lnWoUm0kvSze5Pyz7/i2kgaQq4EQ+ZvZSlu+s0pRe9LpV5iIyyhk+1osSyl4M5pRjYAKYTgVq1Dp/CU5L4+ao+hO6kuUmLQkI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369470; c=relaxed/simple; bh=td3/PoSQATC12nR6t7ymnPxLhZV/RPHlJ2DqLMjeeq4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=BJunFsHQvEFeZDYsX1ez8Rkliftih6j2w2eiutBasXOOxbeIPgV4ezaZsOJB1LhOn+UqtyekC3IkMDqQOO0uZxWwd85crzNx/yUaUbQ5p2Xc4Fn1k5DiNiGYTjUvIJKCqGFDen23nFHYKW6VotK1Rr6N9goFq5W48GbZgIB/APo= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b=OUQi77q9; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 72BB1C4CEE7; Mon, 13 Oct 2025 15:31:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1760369469; bh=td3/PoSQATC12nR6t7ymnPxLhZV/RPHlJ2DqLMjeeq4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=OUQi77q9FZBetcThA7SGX2PQlgNrJuryb/n6xb6rV9Q9u+0/FlrowULXHI76q0r4U naw6AyNTb4Am4jroo6pC8EFO/+Kk9TPDuZrodIVlItFtgB0+ywPOOquH54Aqe42g7d zH1opd3Eni5qbcOPc+rLIn/2Qew9PJvsGHZPZjmE= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, Thorsten Blum , Herbert Xu , Sasha Levin Subject: [PATCH 6.17 257/563] crypto: octeontx2 - Call strscpy() with correct size argument Date: Mon, 13 Oct 2025 16:41:58 +0200 Message-ID: <20251013144420.589810038@linuxfoundation.org> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251013144411.274874080@linuxfoundation.org> References: <20251013144411.274874080@linuxfoundation.org> User-Agent: quilt/0.69 X-stable: review X-Patchwork-Hint: ignore Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-DKIM: signer='linuxfoundation.org' status='pass' reason='' DKIMCheck: Server passes DKIM test, 0 Spam score X-Spam-Score: 0.4 (/) X-Spam-Report: Spam detection software, running on the system "witcher.mxrouting.net", has performed the tests listed below against this email. Information: https://mxroutedocs.com/directadmin/spamfilters/ --- Content analysis details: (0.4 points) --- pts rule name description ---- ---------------------- ----------------------------------------- 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [URIs: linuxfoundation.org] 1.5 HEADER_FROM_DIFFERENT_DOMAINS From and EnvelopeFrom 2nd level mail domains are different -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -1.0 MAILING_LIST_MULTI Multiple indicators imply a widely-seen list manager -0.0 DKIMWL_WL_HIGH DKIMwl.org - High trust sender SpamTally: Final spam score: 4 6.17-stable review patch. If anyone has any objections, please let me know. ------------------ From: Thorsten Blum [ Upstream commit 361fa7f813e7056cecdb24f3582ab0ad4a088e4e ] In otx2_cpt_dl_custom_egrp_create(), strscpy() is called with the length of the source string rather than the size of the destination buffer. This is fine as long as the destination buffer is larger than the source string, but we should still use the destination buffer size instead to call strscpy() as intended. And since 'tmp_buf' is a fixed-size buffer, we can safely omit the size argument and let strscpy() infer it using sizeof(). Fixes: d9d7749773e8 ("crypto: octeontx2 - add apis for custom engine groups") Signed-off-by: Thorsten Blum Signed-off-by: Herbert Xu Signed-off-by: Sasha Levin --- drivers/crypto/marvell/octeontx2/otx2_cptpf_ucode.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/crypto/marvell/octeontx2/otx2_cptpf_ucode.c b/drivers/crypto/marvell/octeontx2/otx2_cptpf_ucode.c index cc47e361089a0..ebdf4efa09d4d 100644 --- a/drivers/crypto/marvell/octeontx2/otx2_cptpf_ucode.c +++ b/drivers/crypto/marvell/octeontx2/otx2_cptpf_ucode.c @@ -1615,7 +1615,7 @@ int otx2_cpt_dl_custom_egrp_create(struct otx2_cptpf_dev *cptpf, return -EINVAL; } err_msg = "Invalid engine group format"; - strscpy(tmp_buf, ctx->val.vstr, strlen(ctx->val.vstr) + 1); + strscpy(tmp_buf, ctx->val.vstr); start = tmp_buf; has_se = has_ie = has_ae = false; -- 2.51.0 From - Mon Oct 13 15:56:01 2025 X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 Return-Path: Delivered-To: hi@josie.lol Received: from witcher.mxrouting.net by witcher.mxrouting.net with LMTP id KJW8HLof7WgybTkAYBR5ng (envelope-from ) for ; Mon, 13 Oct 2025 15:50:18 +0000 Return-path: Envelope-to: hi@josie.lol Delivery-date: Mon, 13 Oct 2025 15:50:18 +0000 Received: from am.mirrors.kernel.org ([147.75.80.249]) by witcher.mxrouting.net with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.98) (envelope-from ) id 1v8KoU-0000000H9sy-0W4K for hi@josie.lol; Mon, 13 Oct 2025 15:50:18 +0000 Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id CC2AB189EAF0 for ; Mon, 13 Oct 2025 15:50:40 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 342CE30AAA9; Mon, 13 Oct 2025 15:30:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="sFDjIjeO" X-Original-To: stable@vger.kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 0D9F5309F1E; Mon, 13 Oct 2025 15:30:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369456; cv=none; b=KDrb3euK5lNuWBF/4JV8ULgGFraWtoKWbMnvPc0iI4RiWzZ/HEWg2IendKLqIiotPXE/3n0NVO76Cq0JVb4PGkJ2vV9YUZN/qYK+lDIzUBk44bBn1NQewBW53YzEVzMrvqg9CC4OXvaxmq11pFuSbAYlznnwzC0m6p5lRYPGlyQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369456; c=relaxed/simple; bh=LZTksf8pwxdWRLKrbGa4rbWXESNX8P+rmYrciyzTLKU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=S2S9L4MnaCtGOa2S9M/BLegiC1gF4mvI3qutq/WDOJlCYh3Ju4QIy2QJ4OTkNxYOjYyExVXC35eAxSgdBMq8hva1LkcHgY3gyNgQoYipOutJy8QZrvt5tPzUX3AK3zztsZ0mtV0WVjKRsUnZAQVDd7jklOabnQ3xtA0etV5QimU= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b=sFDjIjeO; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7E3E9C4CEE7; Mon, 13 Oct 2025 15:30:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1760369455; bh=LZTksf8pwxdWRLKrbGa4rbWXESNX8P+rmYrciyzTLKU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=sFDjIjeOz8Cdz4RESCR4awvT20dcIa/A8vyCXFL7UlHvdqB2+C3+SKXfaR9NLxSmd XW2jmtZ0YbfuqgzI257x5ZmLG+6V/GlrRKimXsLS+hR79Ti6joxJ/wl4Gt9ljx1LTO GM6xNqTsbEojLYgd8oPyr0KfG0aNcRLG7kSDPTV4= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, Thomas Fourier , "Martin K. Petersen" , Sasha Levin Subject: [PATCH 6.17 252/563] scsi: myrs: Fix dma_alloc_coherent() error check Date: Mon, 13 Oct 2025 16:41:53 +0200 Message-ID: <20251013144420.411454504@linuxfoundation.org> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251013144411.274874080@linuxfoundation.org> References: <20251013144411.274874080@linuxfoundation.org> User-Agent: quilt/0.69 X-stable: review X-Patchwork-Hint: ignore Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-DKIM: signer='linuxfoundation.org' status='pass' reason='' DKIMCheck: Server passes DKIM test, 0 Spam score X-Spam-Score: -1.9 (-) X-Spam-Report: Spam detection software, running on the system "witcher.mxrouting.net", has performed the tests listed below against this email. Information: https://mxroutedocs.com/directadmin/spamfilters/ --- Content analysis details: (-1.9 points) --- pts rule name description ---- ---------------------- ----------------------------------------- 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [URIs: linuxfoundation.org] -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [147.75.80.249 listed in list.dnswl.org] 1.5 HEADER_FROM_DIFFERENT_DOMAINS From and EnvelopeFrom 2nd level mail domains are different -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -1.0 MAILING_LIST_MULTI Multiple indicators imply a widely-seen list manager -0.0 DKIMWL_WL_HIGH DKIMwl.org - High trust sender SpamTally: Final spam score: -18 6.17-stable review patch. If anyone has any objections, please let me know. ------------------ From: Thomas Fourier [ Upstream commit edb35b1ffc686fd9b5a91902f034eb9f4d2c9f6b ] Check for NULL return value with dma_alloc_coherent(), because DMA address is not always set by dma_alloc_coherent() on failure. Fixes: 77266186397c ("scsi: myrs: Add Mylex RAID controller (SCSI interface)") Signed-off-by: Thomas Fourier Link: https://lore.kernel.org/r/20250725083112.43975-2-fourier.thomas@gmail.com Signed-off-by: Martin K. Petersen Signed-off-by: Sasha Levin --- drivers/scsi/myrs.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/scsi/myrs.c b/drivers/scsi/myrs.c index 95af3bb03834c..a58abd796603b 100644 --- a/drivers/scsi/myrs.c +++ b/drivers/scsi/myrs.c @@ -498,14 +498,14 @@ static bool myrs_enable_mmio_mbox(struct myrs_hba *cs, /* Temporary dma mapping, used only in the scope of this function */ mbox = dma_alloc_coherent(&pdev->dev, sizeof(union myrs_cmd_mbox), &mbox_addr, GFP_KERNEL); - if (dma_mapping_error(&pdev->dev, mbox_addr)) + if (!mbox) return false; /* These are the base addresses for the command memory mailbox array */ cs->cmd_mbox_size = MYRS_MAX_CMD_MBOX * sizeof(union myrs_cmd_mbox); cmd_mbox = dma_alloc_coherent(&pdev->dev, cs->cmd_mbox_size, &cs->cmd_mbox_addr, GFP_KERNEL); - if (dma_mapping_error(&pdev->dev, cs->cmd_mbox_addr)) { + if (!cmd_mbox) { dev_err(&pdev->dev, "Failed to map command mailbox\n"); goto out_free; } @@ -520,7 +520,7 @@ static bool myrs_enable_mmio_mbox(struct myrs_hba *cs, cs->stat_mbox_size = MYRS_MAX_STAT_MBOX * sizeof(struct myrs_stat_mbox); stat_mbox = dma_alloc_coherent(&pdev->dev, cs->stat_mbox_size, &cs->stat_mbox_addr, GFP_KERNEL); - if (dma_mapping_error(&pdev->dev, cs->stat_mbox_addr)) { + if (!stat_mbox) { dev_err(&pdev->dev, "Failed to map status mailbox\n"); goto out_free; } @@ -533,7 +533,7 @@ static bool myrs_enable_mmio_mbox(struct myrs_hba *cs, cs->fwstat_buf = dma_alloc_coherent(&pdev->dev, sizeof(struct myrs_fwstat), &cs->fwstat_addr, GFP_KERNEL); - if (dma_mapping_error(&pdev->dev, cs->fwstat_addr)) { + if (!cs->fwstat_buf) { dev_err(&pdev->dev, "Failed to map firmware health buffer\n"); cs->fwstat_buf = NULL; goto out_free; -- 2.51.0 From - Mon Oct 13 15:56:01 2025 X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 Return-Path: Delivered-To: hi@josie.lol Received: from witcher.mxrouting.net by witcher.mxrouting.net with LMTP id eFAqErUf7Wg70jwAYBR5ng (envelope-from ) for ; Mon, 13 Oct 2025 15:50:13 +0000 Return-path: Envelope-to: hi@josie.lol Delivery-date: Mon, 13 Oct 2025 15:50:13 +0000 Received: from ams.mirrors.kernel.org ([213.196.21.55]) by witcher.mxrouting.net with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.98) (envelope-from ) id 1v8KoO-0000000H9ka-3lzs for hi@josie.lol; Mon, 13 Oct 2025 15:50:13 +0000 Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.mirrors.kernel.org (Postfix) with ESMTPS id C7322343702 for ; Mon, 13 Oct 2025 15:50:11 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id C6E85309F15; Mon, 13 Oct 2025 15:30:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="CStMfVLr" X-Original-To: stable@vger.kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 9FE8A309F14; Mon, 13 Oct 2025 15:30:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369444; cv=none; b=PSxoS5UawAxKZkTwVjMho8goax4CbjgquJ/cUCI1Gu3B7PtU5s1Aj1yDhw2u/6Hi8NJt3DWYyScDBld35y+mi7uTvAHrZGQ55NiaGtEnLVmylUeD3F/R2Syhi8X1pVlntR2yFQEbprH2LvdGqqCmreKSwjevL6IZi6skytmPM9Y= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760369444; c=relaxed/simple; bh=rKPOsOoso5kdXLWCoG5jgdxitTU+IZjgsdWp6xqCzTo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jFP6+StTdmCn9soXco/Ue1d+tAU01YU0BJOxRDwjYzecgtWcisgFfembRSlg53Q+4Ui/ldIqcklFgxsVWvUhQoM3mVOyYUv2w2/ImVmqHGUrSj5Rr9jp4mKVTAw+UCXLeSeoZDT30w7mbAnpHcl5GXkxMKpjUq3O09RbEyXworI= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b=CStMfVLr; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1AB21C4CEFE; Mon, 13 Oct 2025 15:30:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1760369444; bh=rKPOsOoso5kdXLWCoG5jgdxitTU+IZjgsdWp6xqCzTo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CStMfVLrwOk0iosolkuNQ6Q8JRt8f+Z5UAiNu/CYgj9G9ZHNdOpVYM0kZrsfL9rAN 9LViuHf4ZEI3PWkSkoUsfSFftY9rCSkxEdLc7oLGFVPL1gcu7mqknwCVWowj0srDol jFe+B0k3AMsEyGLKDG8+2j6/5Fox/yRAP46Vmn6E= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, Niklas Cassel , Damien Le Moal , "Martin K. Petersen" , Sasha Levin Subject: [PATCH 6.17 249/563] scsi: pm80xx: Add helper function to get the local phy id Date: Mon, 13 Oct 2025 16:41:50 +0200