From mboxrd@z Thu Jan 1 00:00:00 1970 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 EB751337BBD; Tue, 5 May 2026 09:52: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=1777974743; cv=none; b=Vs7TBqZGhUBtS44UIMLNUILo2j+Ym8giptDpdOS3cgflBkDxqTB6YMh/tjIehL4i5dgwYxqGYnL+vSbeHRxs6YUevisJBbwEMLTldrSQ6Ck2cqw9nqFoafsWjKjiYsei3f6X160jewv6dbP7LdGg82+c26FI2/p32l8+AUcNSx8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777974743; c=relaxed/simple; bh=y1Qfm0/uyx8vh96/sDNbnmLNVzbgaLb2euW3sAZ87qo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Dr3JuMYl+IaR3fVKQjJOrb4T/uLWrXXVa2/J0g3SWxAg73arOnknQSsbCWjyiG2es83j8apt7ywvfmbAZm8DchFXmrCk2Sw2WYTiXuBGF9Rvdaf0awB139M1sw3n5FVhtE8B4dasLYDhwZUHAXaZzFxL7k+CrPaKi3SGipH5YqA= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=FzTSWr5W; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="FzTSWr5W" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7A28AC2BCB9; Tue, 5 May 2026 09:52:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1777974742; bh=y1Qfm0/uyx8vh96/sDNbnmLNVzbgaLb2euW3sAZ87qo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=FzTSWr5WdJd8ONxMCuS6TcVZhoigKDuNTesK4DqVzz5MX7cr/xWNmHInKL3cTuOxQ M9LiOtZAFfRytPjhvAGLDJO3oKbg1pfbi23IjtgapVBs/BSilcv/YXyrcnwN+3NhvH XRWRTC56Od3fQ16AY18MtA6bdDpgb7Q1X6VxywrLMgXwqOI5v5vGH2BMlLDSOu/T5G 4dxFSADna51qZELpIOnMAA38+ddA2Tzq50nNiXwIJGqjvZhK7RwYx+dQpAptdvLKIT hyL4L9/k9WlrDtdVlPC0+Dg/0xqa0DQLhsOc0K2atrSt78iYqq0XYgu3461QWkEb+A HTCYfiQJtnLwQ== From: Sasha Levin To: patches@lists.linux.dev, stable@vger.kernel.org Cc: Troy Mitchell , Mark Brown , Sasha Levin , lgirdwood@gmail.com, perex@perex.cz, tiwai@suse.com, dlan@kernel.org, linux-sound@vger.kernel.org, linux-riscv@lists.infradead.org, spacemit@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH AUTOSEL 7.0] ASoC: spacemit: move hw constraints from hw_params to startup Date: Tue, 5 May 2026 05:51:26 -0400 Message-ID: <20260505095149.512052-10-sashal@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260505095149.512052-1-sashal@kernel.org> References: <20260505095149.512052-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: patches@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore X-stable-base: Linux 7.0.3 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: Troy Mitchell [ Upstream commit 6b4afbaaa342eaa52172e0be5ef8d1fcbf9ff460 ] Hardware constraints should be applied in the startup callback rather than hw_params, as hw_params may be called too late for the constraints to take effect properly. Move the channel count and format constraints for I2S and DSP_A/DSP_B modes into a new startup callback. This also tightens the I2S mode channel constraint from 1-2 to exactly 2, matching the actual hardware behavior. Signed-off-by: Troy Mitchell Link: https://patch.msgid.link/20260429-k3-i2s-v1-2-2fe99db11ecb@linux.spacemit.com Signed-off-by: Mark Brown Signed-off-by: Sasha Levin --- LLM Generated explanations, may be completely bogus: ## Phase Walkthrough Step 1.1 Record: Subsystem `ASoC: spacemit`; action verb `move`; intent is to apply PCM hardware constraints in `.startup` instead of `.hw_params`. Step 1.2 Record: Tags present: `Signed-off-by: Troy Mitchell`, `Link: ht tps://patch.msgid.link/20260429-k3-i2s-v1-2- 2fe99db11ecb@linux.spacemit.com`, `Signed-off-by: Mark Brown`. No `Fixes:`, `Reported-by:`, `Tested-by:`, `Reviewed-by`, `Acked-by`, or `Cc: stable`. Step 1.3 Record: The body says constraints in `.hw_params` may be too late to affect ALSA parameter negotiation, and that I2S should be constrained to exactly 2 channels. Symptom is invalid PCM formats/channel counts being allowed for the SpacemiT I2S mode. No crash trace or affected kernel versions are stated. Step 1.4 Record: This is a hidden bug fix: it is phrased as moving/refactoring constraints, but it corrects when ALSA constraints are installed and prevents unsupported hardware parameters. Step 2.1 Record: One file changed, `sound/soc/spacemit/k1_i2s.c`, 32 insertions and 13 deletions. Modified functions/objects: new `spacemit_i2s_startup`, existing `spacemit_i2s_hw_params`, and `spacemit_i2s_dai_ops`. Scope is single-file, driver-local, surgical. Step 2.2 Record: Before, the driver advertised broad 1-2 channel and S16/S32 capabilities and only added mode-specific constraints inside `.hw_params`, after parameters had already been selected. After, `.startup` constrains I2S to 2ch/S16 and DSP_A/DSP_B to 1ch/S32 before userspace parameter selection completes. Step 2.3 Record: Bug category is logic/correctness in hardware parameter negotiation. There is no memory safety, locking, refcounting, or resource lifetime change. Step 2.4 Record: Fix quality is good: it moves existing constraints to the ALSA callback used for early constraints and tightens I2S channels. Regression risk is low but not zero: unsupported mono I2S streams will now fail earlier, which is intended if the author’s hardware statement is correct. Step 3.1 Record: `git blame` shows the changed constraint code was introduced by `fce217449075d` / local full SHA `fce217449075d59b29052b8cdac567f0f3e22641`, “ASoC: spacemit: add i2s support for K1 SoC”, first described as contained before `v6.19-rc1`. Step 3.2 Record: No `Fixes:` tag in this candidate, so there was no tag to follow. I inspected the driver-introduction commit instead. Step 3.3 Record: Recent file history contains the original driver plus two small later fixes: failure handling for `spacemit_i2s_init_dai()` and an `sspa_clk` error-check fix. No prerequisite refactor is needed for this patch. Step 3.4 Record: Author Troy Mitchell authored the original K1 I2S driver and one related later fix, so he is directly familiar with this driver. Step 3.5 Record: The patch is part of a 7-patch series, but `b4` and `git apply --check` confirmed patch 2 applies cleanly standalone to the current tree. Step 4.1 Record: `b4 dig` against a temporary commit matched the lore thread at the provided patch-msgid URL. `b4 dig -a` found only v1. The full thread shows Mark Brown applied patch 2 to `broonie/sound.git for-7.1` as commit `6b4afbaaa342`. Step 4.2 Record: `b4 dig -w` shows ASoC/sound maintainers and lists were included, including Mark Brown, Liam Girdwood, Jaroslav Kysela, Takashi Iwai, `linux-sound`, and relevant SpacemiT/RISC-V lists. Step 4.3 Record: No separate bug report, syzbot report, or user report was linked for this specific patch. Step 4.4 Record: Series context: patches 1-3 are described as K1 bug fixes/refactoring; patches 4-7 are K3 feature/binding work. Mark Brown explicitly noted fixes and new features had no textual overlap and applied only patches 2 and 3 from the subset. Step 4.5 Record: Stable-specific web search was blocked by lore Anubis, and a local pending-branch grep was stopped after timing out. No stable- specific discussion was verified. Step 5.1 Record: Key function added/modified: `spacemit_i2s_startup`; key function simplified: `spacemit_i2s_hw_params`. Step 5.2 Record: Callers verified: `.startup` is called through `snd_soc_dai_startup()` from `__soc_pcm_open()`. `.hw_params` is called through `snd_soc_dai_hw_params()` from `__soc_pcm_hw_params()`. Step 5.3 Record: Key callees are `snd_pcm_hw_constraint_minmax()` and `snd_pcm_hw_constraint_mask64()` in startup, and clock/DMA/register setup remains in `hw_params`. Step 5.4 Record: Reachability is via ALSA PCM open and hw_params operations; userspace audio applications can trigger the affected negotiation path by opening/configuring a PCM device for this DAI. Step 5.5 Record: Similar local ASoC pattern verified: many drivers install constraints in `.startup`, and ASoC core comments confirm startup is part of PCM open. Step 6.1 Record: The file is absent at `v6.18` and present with the same blob in `v6.19`, `v7.0`, `v7.0.3`, `pending-6.19`, and `pending-7.0`. Likely relevant stable trees start at 6.19.y. Step 6.2 Record: Backport difficulty is low: the patch applies cleanly to the current 7.0.3 checkout, and the file blob is identical in checked 6.19/7.0 branches. Step 6.3 Record: No related fix for this exact subject exists in checked stable branches; the candidate commit exists locally as `6b4afbaaa342` but is not contained in the checked pending stable branches I verified. Step 7.1 Record: Subsystem is ASoC platform driver under `sound/soc/spacemit`; criticality is PERIPHERAL/driver-specific. Step 7.2 Record: Subsystem activity is low and localized: only four local commits under `sound/soc/spacemit`, including the original driver and small fixes. Step 8.1 Record: Affected population is config/platform-specific: `CONFIG_SND_SOC_K1_I2S`, depending on `COMPILE_TEST || ARCH_SPACEMIT`, `HAVE_CLK`, and `DMA_CMA`. Step 8.2 Record: Trigger is normal PCM device open/parameter selection on SpacemiT K1 I2S hardware. Unprivileged reachability depends on local audio device permissions, which I did not verify. Step 8.3 Record: Failure mode is unsupported audio configuration being accepted or constrained too late, causing bad/failed audio operation rather than a verified crash, corruption, or security issue. Severity: MEDIUM for affected hardware users. Step 8.4 Record: Benefit is moderate: corrects real hardware parameter negotiation for a supported driver. Risk is low: one driver, one file, no ABI/API change, clean apply, and maintainer-applied. Step 9.1 Record: Evidence for backporting: real driver correctness bug, normal userspace audio path, introduced in stable-relevant 6.19-era driver, small contained patch, clean apply, maintainer accepted. Evidence against: no reporter/test tag, no crash/security/data-loss evidence, exact “I2S is 2ch only” hardware fact not independently verified outside author/maintainer review. Step 9.2 Record: Stable rules: obviously correct enough: yes, based on ALSA callback ordering and existing constraints; real bug: yes; important issue: moderate hardware functionality bug, not critical; small/contained: yes; no new API/feature: yes; can apply: yes to checked 6.19/7.0-family trees. Step 9.3 Record: No automatic exception category like device ID, quirk, DT-only, build-only, or documentation-only applies. Step 9.4 Record: Decision is to backport. The risk is low and the patch fixes a real, user-visible hardware configuration bug in a stable- relevant driver. ## Verification - [Phase 1] Parsed commit `6b4afbaaa342` with `git show`; confirmed tags and lack of `Fixes`/reporter/stable tags. - [Phase 2] Inspected candidate diff; confirmed only `k1_i2s.c` changes, adding `.startup` and moving constraints out of `.hw_params`. - [Phase 3] Ran `git blame` on changed lines; confirmed original code from `fce217449075d`. - [Phase 3] Ran file history and author history; found only localized SpacemiT I2S changes. - [Phase 4] Used `b4 am`, `b4 mbox`, and `b4 dig`; confirmed v1 thread, maintainer application to `for-7.1`, and reviewer/maintainer recipients. - [Phase 5] Read ASoC core code; confirmed startup occurs during PCM open and hw_params occurs later during ALSA hardware parameter setup. - [Phase 6] Checked tags/branches and patch application; confirmed file presence from `v6.19` onward and clean standalone apply. - [Phase 7] Read `Kconfig`; confirmed driver-specific SpacemiT K1 I2S config scope. - [Phase 8] Assessed trigger/failure from verified ALSA call paths and driver-advertised constraints. - UNVERIFIED: Independent hardware documentation proving I2S mode is exactly 2 channels; this claim comes from the commit author and maintainer-accepted patch. - UNVERIFIED: Stable mailing-list search results, because lore WebFetch was blocked and one local pending-branch grep was stopped after timeout. **YES** sound/soc/spacemit/k1_i2s.c | 45 ++++++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/sound/soc/spacemit/k1_i2s.c b/sound/soc/spacemit/k1_i2s.c index 1cb99f1abc7cd..bb73d32a1b097 100644 --- a/sound/soc/spacemit/k1_i2s.c +++ b/sound/soc/spacemit/k1_i2s.c @@ -106,6 +106,37 @@ static void spacemit_i2s_init(struct spacemit_i2s_dev *i2s) writel(0, i2s->base + SSINTEN); } +static int spacemit_i2s_startup(struct snd_pcm_substream *substream, + struct snd_soc_dai *dai) +{ + struct spacemit_i2s_dev *i2s = snd_soc_dai_get_drvdata(dai); + + switch (i2s->dai_fmt & SND_SOC_DAIFMT_FORMAT_MASK) { + case SND_SOC_DAIFMT_I2S: + snd_pcm_hw_constraint_minmax(substream->runtime, + SNDRV_PCM_HW_PARAM_CHANNELS, + 2, 2); + snd_pcm_hw_constraint_mask64(substream->runtime, + SNDRV_PCM_HW_PARAM_FORMAT, + SNDRV_PCM_FMTBIT_S16_LE); + break; + case SND_SOC_DAIFMT_DSP_A: + case SND_SOC_DAIFMT_DSP_B: + snd_pcm_hw_constraint_minmax(substream->runtime, + SNDRV_PCM_HW_PARAM_CHANNELS, + 1, 1); + snd_pcm_hw_constraint_mask64(substream->runtime, + SNDRV_PCM_HW_PARAM_FORMAT, + SNDRV_PCM_FMTBIT_S32_LE); + break; + default: + dev_dbg(i2s->dev, "unexpected format type"); + return -EINVAL; + } + + return 0; +} + static int spacemit_i2s_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params, struct snd_soc_dai *dai) @@ -157,22 +188,9 @@ static int spacemit_i2s_hw_params(struct snd_pcm_substream *substream, dma_data->maxburst = 32; dma_data->addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; } - - snd_pcm_hw_constraint_minmax(substream->runtime, - SNDRV_PCM_HW_PARAM_CHANNELS, - 1, 2); - snd_pcm_hw_constraint_mask64(substream->runtime, - SNDRV_PCM_HW_PARAM_FORMAT, - SNDRV_PCM_FMTBIT_S16_LE); break; case SND_SOC_DAIFMT_DSP_A: case SND_SOC_DAIFMT_DSP_B: - snd_pcm_hw_constraint_minmax(substream->runtime, - SNDRV_PCM_HW_PARAM_CHANNELS, - 1, 1); - snd_pcm_hw_constraint_mask64(substream->runtime, - SNDRV_PCM_HW_PARAM_FORMAT, - SNDRV_PCM_FMTBIT_S32_LE); break; default: dev_dbg(i2s->dev, "unexpected format type"); @@ -303,6 +321,7 @@ static int spacemit_i2s_dai_remove(struct snd_soc_dai *dai) static const struct snd_soc_dai_ops spacemit_i2s_dai_ops = { .probe = spacemit_i2s_dai_probe, .remove = spacemit_i2s_dai_remove, + .startup = spacemit_i2s_startup, .hw_params = spacemit_i2s_hw_params, .set_sysclk = spacemit_i2s_set_sysclk, .set_fmt = spacemit_i2s_set_fmt, -- 2.53.0 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 937A8CD342F for ; Tue, 5 May 2026 09:52:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=kgMrt8GiudwgPNB2ZXKGu681AmBcZJJz5/BidBDO4xs=; b=rt/nF7cxWs2ycj ki1omfmrU1EfH9MFpBcp1/3hClX36TGuPe7+1R4RB2enPv/xE5cdP1EEaQYG4EYX2rwMVAFq1EfvS z0mJ5VudVZNqKHwrLeGch5X3GYJEzO2FgJhl7uipreR3aNH2H3wNX0KwVK0wMkXnXzxfECh2La1XE 9k7FJEoYSiMwAetpf/d0RMw+zykb0Bjx5BKZ9s7CRueIgYif0lnJQYNK+wXKFfdgEYwP/BosXEnXf Y51S8mhfVlcVEgzkLmddN4Exrt7S8Q0fvVw0GDDWJi8S7dc4m6at4o8wevM4Wm2DwZNo1/3lyv45K LRGSNUY/f5kItvzU45SA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1wKCS1-0000000FiDQ-2K62; Tue, 05 May 2026 09:52:25 +0000 Received: from tor.source.kernel.org ([172.105.4.254]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1wKCRz-0000000FiAp-37GH for linux-riscv@lists.infradead.org; Tue, 05 May 2026 09:52:23 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by tor.source.kernel.org (Postfix) with ESMTP id F33AC60181; Tue, 5 May 2026 09:52:22 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7A28AC2BCB9; Tue, 5 May 2026 09:52:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1777974742; bh=y1Qfm0/uyx8vh96/sDNbnmLNVzbgaLb2euW3sAZ87qo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=FzTSWr5WdJd8ONxMCuS6TcVZhoigKDuNTesK4DqVzz5MX7cr/xWNmHInKL3cTuOxQ M9LiOtZAFfRytPjhvAGLDJO3oKbg1pfbi23IjtgapVBs/BSilcv/YXyrcnwN+3NhvH XRWRTC56Od3fQ16AY18MtA6bdDpgb7Q1X6VxywrLMgXwqOI5v5vGH2BMlLDSOu/T5G 4dxFSADna51qZELpIOnMAA38+ddA2Tzq50nNiXwIJGqjvZhK7RwYx+dQpAptdvLKIT hyL4L9/k9WlrDtdVlPC0+Dg/0xqa0DQLhsOc0K2atrSt78iYqq0XYgu3461QWkEb+A HTCYfiQJtnLwQ== From: Sasha Levin To: patches@lists.linux.dev, stable@vger.kernel.org Cc: Troy Mitchell , Mark Brown , Sasha Levin , lgirdwood@gmail.com, perex@perex.cz, tiwai@suse.com, dlan@kernel.org, linux-sound@vger.kernel.org, linux-riscv@lists.infradead.org, spacemit@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH AUTOSEL 7.0] ASoC: spacemit: move hw constraints from hw_params to startup Date: Tue, 5 May 2026 05:51:26 -0400 Message-ID: <20260505095149.512052-10-sashal@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260505095149.512052-1-sashal@kernel.org> References: <20260505095149.512052-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore X-stable-base: Linux 7.0.3 X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org RnJvbTogVHJveSBNaXRjaGVsbCA8dHJveS5taXRjaGVsbEBsaW51eC5zcGFjZW1pdC5jb20+Cgpb IFVwc3RyZWFtIGNvbW1pdCA2YjRhZmJhYWEzNDJlYWE1MjE3MmUwYmU1ZWY4ZDFmY2JmOWZmNDYw IF0KCkhhcmR3YXJlIGNvbnN0cmFpbnRzIHNob3VsZCBiZSBhcHBsaWVkIGluIHRoZSBzdGFydHVw IGNhbGxiYWNrIHJhdGhlcgp0aGFuIGh3X3BhcmFtcywgYXMgaHdfcGFyYW1zIG1heSBiZSBjYWxs ZWQgdG9vIGxhdGUgZm9yIHRoZSBjb25zdHJhaW50cwp0byB0YWtlIGVmZmVjdCBwcm9wZXJseS4K Ck1vdmUgdGhlIGNoYW5uZWwgY291bnQgYW5kIGZvcm1hdCBjb25zdHJhaW50cyBmb3IgSTJTIGFu ZCBEU1BfQS9EU1BfQgptb2RlcyBpbnRvIGEgbmV3IHN0YXJ0dXAgY2FsbGJhY2suIFRoaXMgYWxz byB0aWdodGVucyB0aGUgSTJTIG1vZGUKY2hhbm5lbCBjb25zdHJhaW50IGZyb20gMS0yIHRvIGV4 YWN0bHkgMiwgbWF0Y2hpbmcgdGhlIGFjdHVhbCBoYXJkd2FyZQpiZWhhdmlvci4KClNpZ25lZC1v ZmYtYnk6IFRyb3kgTWl0Y2hlbGwgPHRyb3kubWl0Y2hlbGxAbGludXguc3BhY2VtaXQuY29tPgpM aW5rOiBodHRwczovL3BhdGNoLm1zZ2lkLmxpbmsvMjAyNjA0MjktazMtaTJzLXYxLTItMmZlOTlk YjExZWNiQGxpbnV4LnNwYWNlbWl0LmNvbQpTaWduZWQtb2ZmLWJ5OiBNYXJrIEJyb3duIDxicm9v bmllQGtlcm5lbC5vcmc+ClNpZ25lZC1vZmYtYnk6IFNhc2hhIExldmluIDxzYXNoYWxAa2VybmVs Lm9yZz4KLS0tCgpMTE0gR2VuZXJhdGVkIGV4cGxhbmF0aW9ucywgbWF5IGJlIGNvbXBsZXRlbHkg Ym9ndXM6CgojIyBQaGFzZSBXYWxrdGhyb3VnaApTdGVwIDEuMSBSZWNvcmQ6IFN1YnN5c3RlbSBg QVNvQzogc3BhY2VtaXRgOyBhY3Rpb24gdmVyYiBgbW92ZWA7IGludGVudAppcyB0byBhcHBseSBQ Q00gaGFyZHdhcmUgY29uc3RyYWludHMgaW4gYC5zdGFydHVwYCBpbnN0ZWFkIG9mCmAuaHdfcGFy YW1zYC4KClN0ZXAgMS4yIFJlY29yZDogVGFncyBwcmVzZW50OiBgU2lnbmVkLW9mZi1ieTogVHJv eSBNaXRjaGVsbGAsIGBMaW5rOiBodAp0cHM6Ly9wYXRjaC5tc2dpZC5saW5rLzIwMjYwNDI5LWsz LWkycy12MS0yLQoyZmU5OWRiMTFlY2JAbGludXguc3BhY2VtaXQuY29tYCwgYFNpZ25lZC1vZmYt Ynk6IE1hcmsgQnJvd25gLiBObwpgRml4ZXM6YCwgYFJlcG9ydGVkLWJ5OmAsIGBUZXN0ZWQtYnk6 YCwgYFJldmlld2VkLWJ5YCwgYEFja2VkLWJ5YCwgb3IKYENjOiBzdGFibGVgLgoKU3RlcCAxLjMg UmVjb3JkOiBUaGUgYm9keSBzYXlzIGNvbnN0cmFpbnRzIGluIGAuaHdfcGFyYW1zYCBtYXkgYmUg dG9vCmxhdGUgdG8gYWZmZWN0IEFMU0EgcGFyYW1ldGVyIG5lZ290aWF0aW9uLCBhbmQgdGhhdCBJ MlMgc2hvdWxkIGJlCmNvbnN0cmFpbmVkIHRvIGV4YWN0bHkgMiBjaGFubmVscy4gU3ltcHRvbSBp cyBpbnZhbGlkIFBDTQpmb3JtYXRzL2NoYW5uZWwgY291bnRzIGJlaW5nIGFsbG93ZWQgZm9yIHRo ZSBTcGFjZW1pVCBJMlMgbW9kZS4gTm8gY3Jhc2gKdHJhY2Ugb3IgYWZmZWN0ZWQga2VybmVsIHZl cnNpb25zIGFyZSBzdGF0ZWQuCgpTdGVwIDEuNCBSZWNvcmQ6IFRoaXMgaXMgYSBoaWRkZW4gYnVn IGZpeDogaXQgaXMgcGhyYXNlZCBhcwptb3ZpbmcvcmVmYWN0b3JpbmcgY29uc3RyYWludHMsIGJ1 dCBpdCBjb3JyZWN0cyB3aGVuIEFMU0EgY29uc3RyYWludHMKYXJlIGluc3RhbGxlZCBhbmQgcHJl dmVudHMgdW5zdXBwb3J0ZWQgaGFyZHdhcmUgcGFyYW1ldGVycy4KClN0ZXAgMi4xIFJlY29yZDog T25lIGZpbGUgY2hhbmdlZCwgYHNvdW5kL3NvYy9zcGFjZW1pdC9rMV9pMnMuY2AsIDMyCmluc2Vy dGlvbnMgYW5kIDEzIGRlbGV0aW9ucy4gTW9kaWZpZWQgZnVuY3Rpb25zL29iamVjdHM6IG5ldwpg c3BhY2VtaXRfaTJzX3N0YXJ0dXBgLCBleGlzdGluZyBgc3BhY2VtaXRfaTJzX2h3X3BhcmFtc2As IGFuZApgc3BhY2VtaXRfaTJzX2RhaV9vcHNgLiBTY29wZSBpcyBzaW5nbGUtZmlsZSwgZHJpdmVy LWxvY2FsLCBzdXJnaWNhbC4KClN0ZXAgMi4yIFJlY29yZDogQmVmb3JlLCB0aGUgZHJpdmVyIGFk dmVydGlzZWQgYnJvYWQgMS0yIGNoYW5uZWwgYW5kClMxNi9TMzIgY2FwYWJpbGl0aWVzIGFuZCBv bmx5IGFkZGVkIG1vZGUtc3BlY2lmaWMgY29uc3RyYWludHMgaW5zaWRlCmAuaHdfcGFyYW1zYCwg YWZ0ZXIgcGFyYW1ldGVycyBoYWQgYWxyZWFkeSBiZWVuIHNlbGVjdGVkLiBBZnRlciwKYC5zdGFy dHVwYCBjb25zdHJhaW5zIEkyUyB0byAyY2gvUzE2IGFuZCBEU1BfQS9EU1BfQiB0byAxY2gvUzMy IGJlZm9yZQp1c2Vyc3BhY2UgcGFyYW1ldGVyIHNlbGVjdGlvbiBjb21wbGV0ZXMuCgpTdGVwIDIu MyBSZWNvcmQ6IEJ1ZyBjYXRlZ29yeSBpcyBsb2dpYy9jb3JyZWN0bmVzcyBpbiBoYXJkd2FyZSBw YXJhbWV0ZXIKbmVnb3RpYXRpb24uIFRoZXJlIGlzIG5vIG1lbW9yeSBzYWZldHksIGxvY2tpbmcs IHJlZmNvdW50aW5nLCBvcgpyZXNvdXJjZSBsaWZldGltZSBjaGFuZ2UuCgpTdGVwIDIuNCBSZWNv cmQ6IEZpeCBxdWFsaXR5IGlzIGdvb2Q6IGl0IG1vdmVzIGV4aXN0aW5nIGNvbnN0cmFpbnRzIHRv CnRoZSBBTFNBIGNhbGxiYWNrIHVzZWQgZm9yIGVhcmx5IGNvbnN0cmFpbnRzIGFuZCB0aWdodGVu cyBJMlMgY2hhbm5lbHMuClJlZ3Jlc3Npb24gcmlzayBpcyBsb3cgYnV0IG5vdCB6ZXJvOiB1bnN1 cHBvcnRlZCBtb25vIEkyUyBzdHJlYW1zIHdpbGwKbm93IGZhaWwgZWFybGllciwgd2hpY2ggaXMg aW50ZW5kZWQgaWYgdGhlIGF1dGhvcuKAmXMgaGFyZHdhcmUgc3RhdGVtZW50CmlzIGNvcnJlY3Qu CgpTdGVwIDMuMSBSZWNvcmQ6IGBnaXQgYmxhbWVgIHNob3dzIHRoZSBjaGFuZ2VkIGNvbnN0cmFp bnQgY29kZSB3YXMKaW50cm9kdWNlZCBieSBgZmNlMjE3NDQ5MDc1ZGAgLyBsb2NhbCBmdWxsIFNI QQpgZmNlMjE3NDQ5MDc1ZDU5YjI5MDUyYjhjZGFjNTY3ZjBmM2UyMjY0MWAsIOKAnEFTb0M6IHNw YWNlbWl0OiBhZGQgaTJzCnN1cHBvcnQgZm9yIEsxIFNvQ+KAnSwgZmlyc3QgZGVzY3JpYmVkIGFz IGNvbnRhaW5lZCBiZWZvcmUgYHY2LjE5LXJjMWAuCgpTdGVwIDMuMiBSZWNvcmQ6IE5vIGBGaXhl czpgIHRhZyBpbiB0aGlzIGNhbmRpZGF0ZSwgc28gdGhlcmUgd2FzIG5vIHRhZwp0byBmb2xsb3cu IEkgaW5zcGVjdGVkIHRoZSBkcml2ZXItaW50cm9kdWN0aW9uIGNvbW1pdCBpbnN0ZWFkLgoKU3Rl cCAzLjMgUmVjb3JkOiBSZWNlbnQgZmlsZSBoaXN0b3J5IGNvbnRhaW5zIHRoZSBvcmlnaW5hbCBk cml2ZXIgcGx1cwp0d28gc21hbGwgbGF0ZXIgZml4ZXM6IGZhaWx1cmUgaGFuZGxpbmcgZm9yIGBz cGFjZW1pdF9pMnNfaW5pdF9kYWkoKWAKYW5kIGFuIGBzc3BhX2Nsa2AgZXJyb3ItY2hlY2sgZml4 LiBObyBwcmVyZXF1aXNpdGUgcmVmYWN0b3IgaXMgbmVlZGVkCmZvciB0aGlzIHBhdGNoLgoKU3Rl cCAzLjQgUmVjb3JkOiBBdXRob3IgVHJveSBNaXRjaGVsbCBhdXRob3JlZCB0aGUgb3JpZ2luYWwg SzEgSTJTCmRyaXZlciBhbmQgb25lIHJlbGF0ZWQgbGF0ZXIgZml4LCBzbyBoZSBpcyBkaXJlY3Rs eSBmYW1pbGlhciB3aXRoIHRoaXMKZHJpdmVyLgoKU3RlcCAzLjUgUmVjb3JkOiBUaGUgcGF0Y2gg aXMgcGFydCBvZiBhIDctcGF0Y2ggc2VyaWVzLCBidXQgYGI0YCBhbmQKYGdpdCBhcHBseSAtLWNo ZWNrYCBjb25maXJtZWQgcGF0Y2ggMiBhcHBsaWVzIGNsZWFubHkgc3RhbmRhbG9uZSB0byB0aGUK Y3VycmVudCB0cmVlLgoKU3RlcCA0LjEgUmVjb3JkOiBgYjQgZGlnYCBhZ2FpbnN0IGEgdGVtcG9y YXJ5IGNvbW1pdCBtYXRjaGVkIHRoZSBsb3JlCnRocmVhZCBhdCB0aGUgcHJvdmlkZWQgcGF0Y2gt bXNnaWQgVVJMLiBgYjQgZGlnIC1hYCBmb3VuZCBvbmx5IHYxLiBUaGUKZnVsbCB0aHJlYWQgc2hv d3MgTWFyayBCcm93biBhcHBsaWVkIHBhdGNoIDIgdG8gYGJyb29uaWUvc291bmQuZ2l0CmZvci03 LjFgIGFzIGNvbW1pdCBgNmI0YWZiYWFhMzQyYC4KClN0ZXAgNC4yIFJlY29yZDogYGI0IGRpZyAt d2Agc2hvd3MgQVNvQy9zb3VuZCBtYWludGFpbmVycyBhbmQgbGlzdHMgd2VyZQppbmNsdWRlZCwg aW5jbHVkaW5nIE1hcmsgQnJvd24sIExpYW0gR2lyZHdvb2QsIEphcm9zbGF2IEt5c2VsYSwgVGFr YXNoaQpJd2FpLCBgbGludXgtc291bmRgLCBhbmQgcmVsZXZhbnQgU3BhY2VtaVQvUklTQy1WIGxp c3RzLgoKU3RlcCA0LjMgUmVjb3JkOiBObyBzZXBhcmF0ZSBidWcgcmVwb3J0LCBzeXpib3QgcmVw b3J0LCBvciB1c2VyIHJlcG9ydAp3YXMgbGlua2VkIGZvciB0aGlzIHNwZWNpZmljIHBhdGNoLgoK U3RlcCA0LjQgUmVjb3JkOiBTZXJpZXMgY29udGV4dDogcGF0Y2hlcyAxLTMgYXJlIGRlc2NyaWJl ZCBhcyBLMSBidWcKZml4ZXMvcmVmYWN0b3Jpbmc7IHBhdGNoZXMgNC03IGFyZSBLMyBmZWF0dXJl L2JpbmRpbmcgd29yay4gTWFyayBCcm93bgpleHBsaWNpdGx5IG5vdGVkIGZpeGVzIGFuZCBuZXcg ZmVhdHVyZXMgaGFkIG5vIHRleHR1YWwgb3ZlcmxhcCBhbmQKYXBwbGllZCBvbmx5IHBhdGNoZXMg MiBhbmQgMyBmcm9tIHRoZSBzdWJzZXQuCgpTdGVwIDQuNSBSZWNvcmQ6IFN0YWJsZS1zcGVjaWZp YyB3ZWIgc2VhcmNoIHdhcyBibG9ja2VkIGJ5IGxvcmUgQW51YmlzLAphbmQgYSBsb2NhbCBwZW5k aW5nLWJyYW5jaCBncmVwIHdhcyBzdG9wcGVkIGFmdGVyIHRpbWluZyBvdXQuIE5vIHN0YWJsZS0K c3BlY2lmaWMgZGlzY3Vzc2lvbiB3YXMgdmVyaWZpZWQuCgpTdGVwIDUuMSBSZWNvcmQ6IEtleSBm dW5jdGlvbiBhZGRlZC9tb2RpZmllZDogYHNwYWNlbWl0X2kyc19zdGFydHVwYDsKa2V5IGZ1bmN0 aW9uIHNpbXBsaWZpZWQ6IGBzcGFjZW1pdF9pMnNfaHdfcGFyYW1zYC4KClN0ZXAgNS4yIFJlY29y ZDogQ2FsbGVycyB2ZXJpZmllZDogYC5zdGFydHVwYCBpcyBjYWxsZWQgdGhyb3VnaApgc25kX3Nv Y19kYWlfc3RhcnR1cCgpYCBmcm9tIGBfX3NvY19wY21fb3BlbigpYC4gYC5od19wYXJhbXNgIGlz IGNhbGxlZAp0aHJvdWdoIGBzbmRfc29jX2RhaV9od19wYXJhbXMoKWAgZnJvbSBgX19zb2NfcGNt X2h3X3BhcmFtcygpYC4KClN0ZXAgNS4zIFJlY29yZDogS2V5IGNhbGxlZXMgYXJlIGBzbmRfcGNt X2h3X2NvbnN0cmFpbnRfbWlubWF4KClgIGFuZApgc25kX3BjbV9od19jb25zdHJhaW50X21hc2s2 NCgpYCBpbiBzdGFydHVwLCBhbmQgY2xvY2svRE1BL3JlZ2lzdGVyCnNldHVwIHJlbWFpbnMgaW4g YGh3X3BhcmFtc2AuCgpTdGVwIDUuNCBSZWNvcmQ6IFJlYWNoYWJpbGl0eSBpcyB2aWEgQUxTQSBQ Q00gb3BlbiBhbmQgaHdfcGFyYW1zCm9wZXJhdGlvbnM7IHVzZXJzcGFjZSBhdWRpbyBhcHBsaWNh dGlvbnMgY2FuIHRyaWdnZXIgdGhlIGFmZmVjdGVkCm5lZ290aWF0aW9uIHBhdGggYnkgb3Blbmlu Zy9jb25maWd1cmluZyBhIFBDTSBkZXZpY2UgZm9yIHRoaXMgREFJLgoKU3RlcCA1LjUgUmVjb3Jk OiBTaW1pbGFyIGxvY2FsIEFTb0MgcGF0dGVybiB2ZXJpZmllZDogbWFueSBkcml2ZXJzCmluc3Rh bGwgY29uc3RyYWludHMgaW4gYC5zdGFydHVwYCwgYW5kIEFTb0MgY29yZSBjb21tZW50cyBjb25m aXJtCnN0YXJ0dXAgaXMgcGFydCBvZiBQQ00gb3Blbi4KClN0ZXAgNi4xIFJlY29yZDogVGhlIGZp bGUgaXMgYWJzZW50IGF0IGB2Ni4xOGAgYW5kIHByZXNlbnQgd2l0aCB0aGUgc2FtZQpibG9iIGlu IGB2Ni4xOWAsIGB2Ny4wYCwgYHY3LjAuM2AsIGBwZW5kaW5nLTYuMTlgLCBhbmQgYHBlbmRpbmct Ny4wYC4KTGlrZWx5IHJlbGV2YW50IHN0YWJsZSB0cmVlcyBzdGFydCBhdCA2LjE5LnkuCgpTdGVw IDYuMiBSZWNvcmQ6IEJhY2twb3J0IGRpZmZpY3VsdHkgaXMgbG93OiB0aGUgcGF0Y2ggYXBwbGll cyBjbGVhbmx5CnRvIHRoZSBjdXJyZW50IDcuMC4zIGNoZWNrb3V0LCBhbmQgdGhlIGZpbGUgYmxv YiBpcyBpZGVudGljYWwgaW4gY2hlY2tlZAo2LjE5LzcuMCBicmFuY2hlcy4KClN0ZXAgNi4zIFJl Y29yZDogTm8gcmVsYXRlZCBmaXggZm9yIHRoaXMgZXhhY3Qgc3ViamVjdCBleGlzdHMgaW4gY2hl Y2tlZApzdGFibGUgYnJhbmNoZXM7IHRoZSBjYW5kaWRhdGUgY29tbWl0IGV4aXN0cyBsb2NhbGx5 IGFzIGA2YjRhZmJhYWEzNDJgCmJ1dCBpcyBub3QgY29udGFpbmVkIGluIHRoZSBjaGVja2VkIHBl bmRpbmcgc3RhYmxlIGJyYW5jaGVzIEkgdmVyaWZpZWQuCgpTdGVwIDcuMSBSZWNvcmQ6IFN1YnN5 c3RlbSBpcyBBU29DIHBsYXRmb3JtIGRyaXZlciB1bmRlcgpgc291bmQvc29jL3NwYWNlbWl0YDsg Y3JpdGljYWxpdHkgaXMgUEVSSVBIRVJBTC9kcml2ZXItc3BlY2lmaWMuCgpTdGVwIDcuMiBSZWNv cmQ6IFN1YnN5c3RlbSBhY3Rpdml0eSBpcyBsb3cgYW5kIGxvY2FsaXplZDogb25seSBmb3VyCmxv Y2FsIGNvbW1pdHMgdW5kZXIgYHNvdW5kL3NvYy9zcGFjZW1pdGAsIGluY2x1ZGluZyB0aGUgb3Jp Z2luYWwgZHJpdmVyCmFuZCBzbWFsbCBmaXhlcy4KClN0ZXAgOC4xIFJlY29yZDogQWZmZWN0ZWQg cG9wdWxhdGlvbiBpcyBjb25maWcvcGxhdGZvcm0tc3BlY2lmaWM6CmBDT05GSUdfU05EX1NPQ19L MV9JMlNgLCBkZXBlbmRpbmcgb24gYENPTVBJTEVfVEVTVCB8fCBBUkNIX1NQQUNFTUlUYCwKYEhB VkVfQ0xLYCwgYW5kIGBETUFfQ01BYC4KClN0ZXAgOC4yIFJlY29yZDogVHJpZ2dlciBpcyBub3Jt YWwgUENNIGRldmljZSBvcGVuL3BhcmFtZXRlciBzZWxlY3Rpb24Kb24gU3BhY2VtaVQgSzEgSTJT IGhhcmR3YXJlLiBVbnByaXZpbGVnZWQgcmVhY2hhYmlsaXR5IGRlcGVuZHMgb24gbG9jYWwKYXVk aW8gZGV2aWNlIHBlcm1pc3Npb25zLCB3aGljaCBJIGRpZCBub3QgdmVyaWZ5LgoKU3RlcCA4LjMg UmVjb3JkOiBGYWlsdXJlIG1vZGUgaXMgdW5zdXBwb3J0ZWQgYXVkaW8gY29uZmlndXJhdGlvbiBi ZWluZwphY2NlcHRlZCBvciBjb25zdHJhaW5lZCB0b28gbGF0ZSwgY2F1c2luZyBiYWQvZmFpbGVk IGF1ZGlvIG9wZXJhdGlvbgpyYXRoZXIgdGhhbiBhIHZlcmlmaWVkIGNyYXNoLCBjb3JydXB0aW9u LCBvciBzZWN1cml0eSBpc3N1ZS4gU2V2ZXJpdHk6Ck1FRElVTSBmb3IgYWZmZWN0ZWQgaGFyZHdh cmUgdXNlcnMuCgpTdGVwIDguNCBSZWNvcmQ6IEJlbmVmaXQgaXMgbW9kZXJhdGU6IGNvcnJlY3Rz IHJlYWwgaGFyZHdhcmUgcGFyYW1ldGVyCm5lZ290aWF0aW9uIGZvciBhIHN1cHBvcnRlZCBkcml2 ZXIuIFJpc2sgaXMgbG93OiBvbmUgZHJpdmVyLCBvbmUgZmlsZSwKbm8gQUJJL0FQSSBjaGFuZ2Us IGNsZWFuIGFwcGx5LCBhbmQgbWFpbnRhaW5lci1hcHBsaWVkLgoKU3RlcCA5LjEgUmVjb3JkOiBF dmlkZW5jZSBmb3IgYmFja3BvcnRpbmc6IHJlYWwgZHJpdmVyIGNvcnJlY3RuZXNzIGJ1ZywKbm9y bWFsIHVzZXJzcGFjZSBhdWRpbyBwYXRoLCBpbnRyb2R1Y2VkIGluIHN0YWJsZS1yZWxldmFudCA2 LjE5LWVyYQpkcml2ZXIsIHNtYWxsIGNvbnRhaW5lZCBwYXRjaCwgY2xlYW4gYXBwbHksIG1haW50 YWluZXIgYWNjZXB0ZWQuCkV2aWRlbmNlIGFnYWluc3Q6IG5vIHJlcG9ydGVyL3Rlc3QgdGFnLCBu byBjcmFzaC9zZWN1cml0eS9kYXRhLWxvc3MKZXZpZGVuY2UsIGV4YWN0IOKAnEkyUyBpcyAyY2gg b25seeKAnSBoYXJkd2FyZSBmYWN0IG5vdCBpbmRlcGVuZGVudGx5CnZlcmlmaWVkIG91dHNpZGUg YXV0aG9yL21haW50YWluZXIgcmV2aWV3LgoKU3RlcCA5LjIgUmVjb3JkOiBTdGFibGUgcnVsZXM6 IG9idmlvdXNseSBjb3JyZWN0IGVub3VnaDogeWVzLCBiYXNlZCBvbgpBTFNBIGNhbGxiYWNrIG9y ZGVyaW5nIGFuZCBleGlzdGluZyBjb25zdHJhaW50czsgcmVhbCBidWc6IHllczsKaW1wb3J0YW50 IGlzc3VlOiBtb2RlcmF0ZSBoYXJkd2FyZSBmdW5jdGlvbmFsaXR5IGJ1Zywgbm90IGNyaXRpY2Fs OwpzbWFsbC9jb250YWluZWQ6IHllczsgbm8gbmV3IEFQSS9mZWF0dXJlOiB5ZXM7IGNhbiBhcHBs eTogeWVzIHRvIGNoZWNrZWQKNi4xOS83LjAtZmFtaWx5IHRyZWVzLgoKU3RlcCA5LjMgUmVjb3Jk OiBObyBhdXRvbWF0aWMgZXhjZXB0aW9uIGNhdGVnb3J5IGxpa2UgZGV2aWNlIElELCBxdWlyaywK RFQtb25seSwgYnVpbGQtb25seSwgb3IgZG9jdW1lbnRhdGlvbi1vbmx5IGFwcGxpZXMuCgpTdGVw IDkuNCBSZWNvcmQ6IERlY2lzaW9uIGlzIHRvIGJhY2twb3J0LiBUaGUgcmlzayBpcyBsb3cgYW5k IHRoZSBwYXRjaApmaXhlcyBhIHJlYWwsIHVzZXItdmlzaWJsZSBoYXJkd2FyZSBjb25maWd1cmF0 aW9uIGJ1ZyBpbiBhIHN0YWJsZS0KcmVsZXZhbnQgZHJpdmVyLgoKIyMgVmVyaWZpY2F0aW9uCi0g W1BoYXNlIDFdIFBhcnNlZCBjb21taXQgYDZiNGFmYmFhYTM0MmAgd2l0aCBgZ2l0IHNob3dgOyBj b25maXJtZWQgdGFncwogIGFuZCBsYWNrIG9mIGBGaXhlc2AvcmVwb3J0ZXIvc3RhYmxlIHRhZ3Mu Ci0gW1BoYXNlIDJdIEluc3BlY3RlZCBjYW5kaWRhdGUgZGlmZjsgY29uZmlybWVkIG9ubHkgYGsx X2kycy5jYCBjaGFuZ2VzLAogIGFkZGluZyBgLnN0YXJ0dXBgIGFuZCBtb3ZpbmcgY29uc3RyYWlu dHMgb3V0IG9mIGAuaHdfcGFyYW1zYC4KLSBbUGhhc2UgM10gUmFuIGBnaXQgYmxhbWVgIG9uIGNo YW5nZWQgbGluZXM7IGNvbmZpcm1lZCBvcmlnaW5hbCBjb2RlCiAgZnJvbSBgZmNlMjE3NDQ5MDc1 ZGAuCi0gW1BoYXNlIDNdIFJhbiBmaWxlIGhpc3RvcnkgYW5kIGF1dGhvciBoaXN0b3J5OyBmb3Vu ZCBvbmx5IGxvY2FsaXplZAogIFNwYWNlbWlUIEkyUyBjaGFuZ2VzLgotIFtQaGFzZSA0XSBVc2Vk IGBiNCBhbWAsIGBiNCBtYm94YCwgYW5kIGBiNCBkaWdgOyBjb25maXJtZWQgdjEgdGhyZWFkLAog IG1haW50YWluZXIgYXBwbGljYXRpb24gdG8gYGZvci03LjFgLCBhbmQgcmV2aWV3ZXIvbWFpbnRh aW5lcgogIHJlY2lwaWVudHMuCi0gW1BoYXNlIDVdIFJlYWQgQVNvQyBjb3JlIGNvZGU7IGNvbmZp cm1lZCBzdGFydHVwIG9jY3VycyBkdXJpbmcgUENNCiAgb3BlbiBhbmQgaHdfcGFyYW1zIG9jY3Vy cyBsYXRlciBkdXJpbmcgQUxTQSBoYXJkd2FyZSBwYXJhbWV0ZXIgc2V0dXAuCi0gW1BoYXNlIDZd IENoZWNrZWQgdGFncy9icmFuY2hlcyBhbmQgcGF0Y2ggYXBwbGljYXRpb247IGNvbmZpcm1lZCBm aWxlCiAgcHJlc2VuY2UgZnJvbSBgdjYuMTlgIG9ud2FyZCBhbmQgY2xlYW4gc3RhbmRhbG9uZSBh cHBseS4KLSBbUGhhc2UgN10gUmVhZCBgS2NvbmZpZ2A7IGNvbmZpcm1lZCBkcml2ZXItc3BlY2lm aWMgU3BhY2VtaVQgSzEgSTJTCiAgY29uZmlnIHNjb3BlLgotIFtQaGFzZSA4XSBBc3Nlc3NlZCB0 cmlnZ2VyL2ZhaWx1cmUgZnJvbSB2ZXJpZmllZCBBTFNBIGNhbGwgcGF0aHMgYW5kCiAgZHJpdmVy LWFkdmVydGlzZWQgY29uc3RyYWludHMuCi0gVU5WRVJJRklFRDogSW5kZXBlbmRlbnQgaGFyZHdh cmUgZG9jdW1lbnRhdGlvbiBwcm92aW5nIEkyUyBtb2RlIGlzCiAgZXhhY3RseSAyIGNoYW5uZWxz OyB0aGlzIGNsYWltIGNvbWVzIGZyb20gdGhlIGNvbW1pdCBhdXRob3IgYW5kCiAgbWFpbnRhaW5l ci1hY2NlcHRlZCBwYXRjaC4KLSBVTlZFUklGSUVEOiBTdGFibGUgbWFpbGluZy1saXN0IHNlYXJj aCByZXN1bHRzLCBiZWNhdXNlIGxvcmUgV2ViRmV0Y2gKICB3YXMgYmxvY2tlZCBhbmQgb25lIGxv Y2FsIHBlbmRpbmctYnJhbmNoIGdyZXAgd2FzIHN0b3BwZWQgYWZ0ZXIKICB0aW1lb3V0LgoKKipZ RVMqKgoKIHNvdW5kL3NvYy9zcGFjZW1pdC9rMV9pMnMuYyB8IDQ1ICsrKysrKysrKysrKysrKysr KysrKysrKysrLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAzMiBpbnNlcnRpb25zKCspLCAx MyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc3BhY2VtaXQvazFfaTJzLmMg Yi9zb3VuZC9zb2Mvc3BhY2VtaXQvazFfaTJzLmMKaW5kZXggMWNiOTlmMWFiYzdjZC4uYmI3M2Qz MmExYjA5NyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NwYWNlbWl0L2sxX2kycy5jCisrKyBiL3Nv dW5kL3NvYy9zcGFjZW1pdC9rMV9pMnMuYwpAQCAtMTA2LDYgKzEwNiwzNyBAQCBzdGF0aWMgdm9p ZCBzcGFjZW1pdF9pMnNfaW5pdChzdHJ1Y3Qgc3BhY2VtaXRfaTJzX2RldiAqaTJzKQogCXdyaXRl bCgwLCBpMnMtPmJhc2UgKyBTU0lOVEVOKTsKIH0KIAorc3RhdGljIGludCBzcGFjZW1pdF9pMnNf c3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwlzdHJ1Y3Qgc25k X3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc3BhY2VtaXRfaTJzX2RldiAqaTJzID0gc25kX3Nv Y19kYWlfZ2V0X2RydmRhdGEoZGFpKTsKKworCXN3aXRjaCAoaTJzLT5kYWlfZm10ICYgU05EX1NP Q19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKKwkJc25k X3BjbV9od19jb25zdHJhaW50X21pbm1heChzdWJzdHJlYW0tPnJ1bnRpbWUsCisJCQkJCSAgICAg U05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTLAorCQkJCQkgICAgIDIsIDIpOworCQlzbmRfcGNt X2h3X2NvbnN0cmFpbnRfbWFzazY0KHN1YnN0cmVhbS0+cnVudGltZSwKKwkJCQkJICAgICBTTkRS Vl9QQ01fSFdfUEFSQU1fRk9STUFULAorCQkJCQkgICAgIFNORFJWX1BDTV9GTVRCSVRfUzE2X0xF KTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQToKKwljYXNlIFNORF9TT0Nf REFJRk1UX0RTUF9COgorCQlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWlubWF4KHN1YnN0cmVhbS0+ cnVudGltZSwKKwkJCQkJICAgICBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMsCisJCQkJCSAg ICAgMSwgMSk7CisJCXNuZF9wY21faHdfY29uc3RyYWludF9tYXNrNjQoc3Vic3RyZWFtLT5ydW50 aW1lLAorCQkJCQkgICAgIFNORFJWX1BDTV9IV19QQVJBTV9GT1JNQVQsCisJCQkJCSAgICAgU05E UlZfUENNX0ZNVEJJVF9TMzJfTEUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZGJnKGky cy0+ZGV2LCAidW5leHBlY3RlZCBmb3JtYXQgdHlwZSIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9 CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBzcGFjZW1pdF9pMnNfaHdfcGFyYW1zKHN0 cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAogCQkJCSAgc3RydWN0IHNuZF9wY21f aHdfcGFyYW1zICpwYXJhbXMsCiAJCQkJICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKQEAgLTE1 NywyMiArMTg4LDkgQEAgc3RhdGljIGludCBzcGFjZW1pdF9pMnNfaHdfcGFyYW1zKHN0cnVjdCBz bmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAogCQkJZG1hX2RhdGEtPm1heGJ1cnN0ID0gMzI7 CiAJCQlkbWFfZGF0YS0+YWRkcl93aWR0aCA9IERNQV9TTEFWRV9CVVNXSURUSF80X0JZVEVTOwog CQl9Ci0KLQkJc25kX3BjbV9od19jb25zdHJhaW50X21pbm1heChzdWJzdHJlYW0tPnJ1bnRpbWUs Ci0JCQkJCSAgICAgU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTLAotCQkJCQkgICAgIDEsIDIp OwotCQlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWFzazY0KHN1YnN0cmVhbS0+cnVudGltZSwKLQkJ CQkJICAgICBTTkRSVl9QQ01fSFdfUEFSQU1fRk9STUFULAotCQkJCQkgICAgIFNORFJWX1BDTV9G TVRCSVRfUzE2X0xFKTsKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQToKIAlj YXNlIFNORF9TT0NfREFJRk1UX0RTUF9COgotCQlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWlubWF4 KHN1YnN0cmVhbS0+cnVudGltZSwKLQkJCQkJICAgICBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5F TFMsCi0JCQkJCSAgICAgMSwgMSk7Ci0JCXNuZF9wY21faHdfY29uc3RyYWludF9tYXNrNjQoc3Vi c3RyZWFtLT5ydW50aW1lLAotCQkJCQkgICAgIFNORFJWX1BDTV9IV19QQVJBTV9GT1JNQVQsCi0J CQkJCSAgICAgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUpOwogCQlicmVhazsKIAlkZWZhdWx0Ogog CQlkZXZfZGJnKGkycy0+ZGV2LCAidW5leHBlY3RlZCBmb3JtYXQgdHlwZSIpOwpAQCAtMzAzLDYg KzMyMSw3IEBAIHN0YXRpYyBpbnQgc3BhY2VtaXRfaTJzX2RhaV9yZW1vdmUoc3RydWN0IHNuZF9z b2NfZGFpICpkYWkpCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBzcGFjZW1p dF9pMnNfZGFpX29wcyA9IHsKIAkucHJvYmUgPSBzcGFjZW1pdF9pMnNfZGFpX3Byb2JlLAogCS5y ZW1vdmUgPSBzcGFjZW1pdF9pMnNfZGFpX3JlbW92ZSwKKwkuc3RhcnR1cCA9IHNwYWNlbWl0X2ky c19zdGFydHVwLAogCS5od19wYXJhbXMgPSBzcGFjZW1pdF9pMnNfaHdfcGFyYW1zLAogCS5zZXRf c3lzY2xrID0gc3BhY2VtaXRfaTJzX3NldF9zeXNjbGssCiAJLnNldF9mbXQgPSBzcGFjZW1pdF9p MnNfc2V0X2ZtdCwKLS0gCjIuNTMuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmxpbnV4LXJpc2N2IG1haWxpbmcgbGlzdApsaW51eC1yaXNjdkBsaXN0 cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGlu Zm8vbGludXgtcmlzY3YK