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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 84038C4332F for ; Thu, 3 Nov 2022 16:26:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231688AbiKCQ0K (ORCPT ); Thu, 3 Nov 2022 12:26:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50364 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229950AbiKCQ0D (ORCPT ); Thu, 3 Nov 2022 12:26:03 -0400 Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E85391AD85 for ; Thu, 3 Nov 2022 09:26:02 -0700 (PDT) Received: from [127.0.0.1] (p578adb1c.dip0.t-ipconnect.de [87.138.219.28]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: marex@denx.de) by phobos.denx.de (Postfix) with ESMTPSA id 5DEB18519D; Thu, 3 Nov 2022 17:25:59 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=denx.de; s=phobos-20191101; t=1667492761; bh=XyGlCckHVL9Mp4qbwYrY3wTxsiY5XVy50GuuK2Hwr38=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=zcrxY9K5YKhjpJHBv4/GXrJ9WLCPqi32lTd/+V+eGVyleZTYmoIJEkOI05rtgcUPB ey+lYsICO6LDNhpfLVQIiww19x0grg81w0qUfFba9fCtWUKo60BIGwp7BdeQS277Df J/WnhG2OLJ9oYpVliHJ1FwHT92TKNW4k1xYSPiqlnn3SFVTzE4waLL2OLbErNzzqjy D4CmmJx7yNLN7CW62a/6I1s7m8OkI0Yn1ZX8lgYvnZHGTTlGGzjG2q4J75Z8uyHsxK rYTQZsdi485ZHlKCVOoABddUM4CqnR7IqFPonPPuXdOnvBjW5v5FDoW1tJBWOes8hc 6NBJJcQ20ZVUw== Message-ID: <9262c207-2b72-6638-0274-0ce1d0d830c9@denx.de> Date: Thu, 3 Nov 2022 17:02:13 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.0 Subject: Re: [PATCH v7 07/10] drm: bridge: samsung-dsim: Add atomic_get_input_bus_fmts Content-Language: en-US To: Jagan Teki Cc: Andrzej Hajda , Inki Dae , Marek Szyprowski , Joonyoung Shim , Seung-Woo Kim , Kyungmin Park , Frieder Schrempf , Fancy Fang , Tim Harvey , Michael Nazzareno Trimarchi , Adam Ford , Neil Armstrong , Robert Foss , Laurent Pinchart , Tommaso Merciai , Matteo Lisi , dri-devel@lists.freedesktop.org, linux-samsung-soc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, NXP Linux Team , linux-amarula References: <20221005151309.7278-1-jagan@amarulasolutions.com> <20221005151309.7278-8-jagan@amarulasolutions.com> From: Marek Vasut In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Virus-Scanned: clamav-milter 0.103.6 at phobos.denx.de X-Virus-Status: Clean Precedence: bulk List-ID: X-Mailing-List: linux-samsung-soc@vger.kernel.org On 11/3/22 10:39, Jagan Teki wrote: > On Sun, Oct 16, 2022 at 3:31 AM Marek Vasut wrote: >> >> On 10/5/22 17:13, Jagan Teki wrote: >> >> [...] >> >>> @@ -1321,6 +1322,32 @@ static void samsung_dsim_atomic_post_disable(struct drm_bridge *bridge, >>> pm_runtime_put_sync(dsi->dev); >>> } >>> >>> +#define MAX_INPUT_SEL_FORMATS 1 >>> + >>> +static u32 * >>> +samsung_dsim_atomic_get_input_bus_fmts(struct drm_bridge *bridge, >>> + struct drm_bridge_state *bridge_state, >>> + struct drm_crtc_state *crtc_state, >>> + struct drm_connector_state *conn_state, >>> + u32 output_fmt, >>> + unsigned int *num_input_fmts) >>> +{ >>> + u32 *input_fmts; >>> + >>> + *num_input_fmts = 0; >>> + >>> + input_fmts = kcalloc(MAX_INPUT_SEL_FORMATS, sizeof(*input_fmts), >>> + GFP_KERNEL); >>> + if (!input_fmts) >>> + return NULL; >>> + >>> + /* This is the DSI-end bus format */ >>> + input_fmts[0] = MEDIA_BUS_FMT_RGB888_1X24; >>> + *num_input_fmts = 1; >> >> Is this the only supported format ? NXP AN13573 lists the following: >> >> i.MX 8/RT MIPI DSI/CSI-2, Rev. 0, 21 March 2022 >> 3.7.4 Pixel formats >> Table 14. DSI pixel packing formats >> >> Loosely Packed Pixel Stream, 20-bit YCbCr, 4:2:2 >> Packed Pixel Stream, 24-bit YCbCr, 4:2:2 >> Packed Pixel Stream, 16-bit YCbCr, 4:2:2 > > Look like these are unsupported in media-bus-format.h list. Aren't those: MEDIA_BUS_FMT_UYVY12_1X24 MEDIA_BUS_FMT_UYVY8_1X16 ? Those are packed, and subsampled 4:2:2 >> Packed Pixel Stream, 30-bit RGB, 10-10-10 MEDIA_BUS_FMT_RGB101010_1X30 >> Packed Pixel Stream, 36-bit RGB, 12-12-12 MEDIA_BUS_FMT_RGB121212_1X36 >> Packed Pixel Stream, 12-bit YCbCr, 4:2:0 > > Same issue, unsupported. The 12-bit packed 4:2:0 might be something along the lines of drivers/media/platform/rockchip/rkisp1/rkisp1-resizer.c MEDIA_BUS_FMT_YUYV8_1_5X8, /* YUV420 */ >> Packed Pixel Stream, 16-bit RGB, 5-6-5 > > MEDIA_BUS_FMT_RGB565_1X16 > >> Packed Pixel Stream, 18-bit RGB, 6-6-6 > > Same issue, unsupported. MEDIA_BUS_FMT_RGB666_1X18 >> Loosely Packed Pixel Stream, 18-bit RGB, 6-6-6 >> Packed Pixel Stream, 24-bit RGB, 8-8-8 Format > > MEDIA_BUS_FMT_RGB666_1X18 > MEDIA_BUS_FMT_RGB888_1X24 > >> >> The MX8MM/MN LCDIF can generate all of those RGB formats , the MX8MP >> LCDIFv3 can also generate the 16bit YCbCr . > > Is YCbCr denoted as UYVY in media-bus-format.h ? I think this applies: https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/colorspaces.html " Sometimes people confuse Y’CbCr as being a colorspace. This is not correct, it is just an encoding of an R’G’B’ color into luma and chroma values. " And esp. this: " In order to correctly interpret a color you need to know the quantization range, whether it is R’G’B’ or Y’CbCr, the used Y’CbCr encoding and the colorspace. From that information you can calculate the corresponding CIE XYZ color and map that again to whatever colorspace your display device uses. " Which means that in order to properly describe or interpret the data, you need the entire v4l2_mbus_framefmt content, not just the pixel code: https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/subdev-formats.html But this information is not passed across the bus, that's metadata internal to the kernel. 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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (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 03FF7C4332F for ; Thu, 3 Nov 2022 16:26:07 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id CB2C810E257; Thu, 3 Nov 2022 16:26:06 +0000 (UTC) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) by gabe.freedesktop.org (Postfix) with ESMTPS id 27C8D10E257 for ; Thu, 3 Nov 2022 16:26:02 +0000 (UTC) Received: from [127.0.0.1] (p578adb1c.dip0.t-ipconnect.de [87.138.219.28]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: marex@denx.de) by phobos.denx.de (Postfix) with ESMTPSA id 5DEB18519D; Thu, 3 Nov 2022 17:25:59 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=denx.de; s=phobos-20191101; t=1667492761; bh=XyGlCckHVL9Mp4qbwYrY3wTxsiY5XVy50GuuK2Hwr38=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=zcrxY9K5YKhjpJHBv4/GXrJ9WLCPqi32lTd/+V+eGVyleZTYmoIJEkOI05rtgcUPB ey+lYsICO6LDNhpfLVQIiww19x0grg81w0qUfFba9fCtWUKo60BIGwp7BdeQS277Df J/WnhG2OLJ9oYpVliHJ1FwHT92TKNW4k1xYSPiqlnn3SFVTzE4waLL2OLbErNzzqjy D4CmmJx7yNLN7CW62a/6I1s7m8OkI0Yn1ZX8lgYvnZHGTTlGGzjG2q4J75Z8uyHsxK rYTQZsdi485ZHlKCVOoABddUM4CqnR7IqFPonPPuXdOnvBjW5v5FDoW1tJBWOes8hc 6NBJJcQ20ZVUw== Message-ID: <9262c207-2b72-6638-0274-0ce1d0d830c9@denx.de> Date: Thu, 3 Nov 2022 17:02:13 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.0 Subject: Re: [PATCH v7 07/10] drm: bridge: samsung-dsim: Add atomic_get_input_bus_fmts Content-Language: en-US To: Jagan Teki References: <20221005151309.7278-1-jagan@amarulasolutions.com> <20221005151309.7278-8-jagan@amarulasolutions.com> From: Marek Vasut In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Virus-Scanned: clamav-milter 0.103.6 at phobos.denx.de X-Virus-Status: Clean X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: dri-devel@lists.freedesktop.org, linux-samsung-soc@vger.kernel.org, Laurent Pinchart , Joonyoung Shim , Tommaso Merciai , linux-amarula , Seung-Woo Kim , Neil Armstrong , Frieder Schrempf , Kyungmin Park , Matteo Lisi , Robert Foss , Andrzej Hajda , NXP Linux Team , Fancy Fang , Michael Nazzareno Trimarchi , Adam Ford , linux-arm-kernel@lists.infradead.org, Marek Szyprowski Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" On 11/3/22 10:39, Jagan Teki wrote: > On Sun, Oct 16, 2022 at 3:31 AM Marek Vasut wrote: >> >> On 10/5/22 17:13, Jagan Teki wrote: >> >> [...] >> >>> @@ -1321,6 +1322,32 @@ static void samsung_dsim_atomic_post_disable(struct drm_bridge *bridge, >>> pm_runtime_put_sync(dsi->dev); >>> } >>> >>> +#define MAX_INPUT_SEL_FORMATS 1 >>> + >>> +static u32 * >>> +samsung_dsim_atomic_get_input_bus_fmts(struct drm_bridge *bridge, >>> + struct drm_bridge_state *bridge_state, >>> + struct drm_crtc_state *crtc_state, >>> + struct drm_connector_state *conn_state, >>> + u32 output_fmt, >>> + unsigned int *num_input_fmts) >>> +{ >>> + u32 *input_fmts; >>> + >>> + *num_input_fmts = 0; >>> + >>> + input_fmts = kcalloc(MAX_INPUT_SEL_FORMATS, sizeof(*input_fmts), >>> + GFP_KERNEL); >>> + if (!input_fmts) >>> + return NULL; >>> + >>> + /* This is the DSI-end bus format */ >>> + input_fmts[0] = MEDIA_BUS_FMT_RGB888_1X24; >>> + *num_input_fmts = 1; >> >> Is this the only supported format ? NXP AN13573 lists the following: >> >> i.MX 8/RT MIPI DSI/CSI-2, Rev. 0, 21 March 2022 >> 3.7.4 Pixel formats >> Table 14. DSI pixel packing formats >> >> Loosely Packed Pixel Stream, 20-bit YCbCr, 4:2:2 >> Packed Pixel Stream, 24-bit YCbCr, 4:2:2 >> Packed Pixel Stream, 16-bit YCbCr, 4:2:2 > > Look like these are unsupported in media-bus-format.h list. Aren't those: MEDIA_BUS_FMT_UYVY12_1X24 MEDIA_BUS_FMT_UYVY8_1X16 ? Those are packed, and subsampled 4:2:2 >> Packed Pixel Stream, 30-bit RGB, 10-10-10 MEDIA_BUS_FMT_RGB101010_1X30 >> Packed Pixel Stream, 36-bit RGB, 12-12-12 MEDIA_BUS_FMT_RGB121212_1X36 >> Packed Pixel Stream, 12-bit YCbCr, 4:2:0 > > Same issue, unsupported. The 12-bit packed 4:2:0 might be something along the lines of drivers/media/platform/rockchip/rkisp1/rkisp1-resizer.c MEDIA_BUS_FMT_YUYV8_1_5X8, /* YUV420 */ >> Packed Pixel Stream, 16-bit RGB, 5-6-5 > > MEDIA_BUS_FMT_RGB565_1X16 > >> Packed Pixel Stream, 18-bit RGB, 6-6-6 > > Same issue, unsupported. MEDIA_BUS_FMT_RGB666_1X18 >> Loosely Packed Pixel Stream, 18-bit RGB, 6-6-6 >> Packed Pixel Stream, 24-bit RGB, 8-8-8 Format > > MEDIA_BUS_FMT_RGB666_1X18 > MEDIA_BUS_FMT_RGB888_1X24 > >> >> The MX8MM/MN LCDIF can generate all of those RGB formats , the MX8MP >> LCDIFv3 can also generate the 16bit YCbCr . > > Is YCbCr denoted as UYVY in media-bus-format.h ? I think this applies: https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/colorspaces.html " Sometimes people confuse Y’CbCr as being a colorspace. This is not correct, it is just an encoding of an R’G’B’ color into luma and chroma values. " And esp. this: " In order to correctly interpret a color you need to know the quantization range, whether it is R’G’B’ or Y’CbCr, the used Y’CbCr encoding and the colorspace. From that information you can calculate the corresponding CIE XYZ color and map that again to whatever colorspace your display device uses. " Which means that in order to properly describe or interpret the data, you need the entire v4l2_mbus_framefmt content, not just the pixel code: https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/subdev-formats.html But this information is not passed across the bus, that's metadata internal to the kernel. 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 2BA30C4332F for ; Thu, 3 Nov 2022 16:27:35 +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-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=5m4kbGzvfmINkpcDpVpsQjDnRRPXHhFBZujz4LFUua0=; b=EL+BEEJEC8HJfe pJKRoNIHACYIrOwhkGcZAcuEA+5uHTTF8l4NBM2KktGvWg2N30PScZxqUNHXKfuZcJW+xPkC/ENNl lo1jKxbci11Ec7BdYl3AcPKUylYjvPhFaR3EDsTAaYISb850fw9x1CNJSlyvuZgC4XGDa1WY4GY+j 98vKIHIqDIlfENye51mA0vaFRnkaJgGXJemykZx30x+U4x9nNisJciO3loVqKoJR6IVS28IgcMiJp Yf5is9SvYpHwd5ngeewp1tPw/+sQcNShuw7IPvIWp7xHrr1UC6G3oYwwU0E2hzZ3pLScJOv5+clNs koZ6HCYLtOzJzV6MnIhQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oqd2p-000gB0-A7; Thu, 03 Nov 2022 16:26:19 +0000 Received: from phobos.denx.de ([2a01:238:438b:c500:173d:9f52:ddab:ee01]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1oqd2a-000g4u-Ob for linux-arm-kernel@lists.infradead.org; Thu, 03 Nov 2022 16:26:06 +0000 Received: from [127.0.0.1] (p578adb1c.dip0.t-ipconnect.de [87.138.219.28]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: marex@denx.de) by phobos.denx.de (Postfix) with ESMTPSA id 5DEB18519D; Thu, 3 Nov 2022 17:25:59 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=denx.de; s=phobos-20191101; t=1667492761; bh=XyGlCckHVL9Mp4qbwYrY3wTxsiY5XVy50GuuK2Hwr38=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=zcrxY9K5YKhjpJHBv4/GXrJ9WLCPqi32lTd/+V+eGVyleZTYmoIJEkOI05rtgcUPB ey+lYsICO6LDNhpfLVQIiww19x0grg81w0qUfFba9fCtWUKo60BIGwp7BdeQS277Df J/WnhG2OLJ9oYpVliHJ1FwHT92TKNW4k1xYSPiqlnn3SFVTzE4waLL2OLbErNzzqjy D4CmmJx7yNLN7CW62a/6I1s7m8OkI0Yn1ZX8lgYvnZHGTTlGGzjG2q4J75Z8uyHsxK rYTQZsdi485ZHlKCVOoABddUM4CqnR7IqFPonPPuXdOnvBjW5v5FDoW1tJBWOes8hc 6NBJJcQ20ZVUw== Message-ID: <9262c207-2b72-6638-0274-0ce1d0d830c9@denx.de> Date: Thu, 3 Nov 2022 17:02:13 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.0 Subject: Re: [PATCH v7 07/10] drm: bridge: samsung-dsim: Add atomic_get_input_bus_fmts Content-Language: en-US To: Jagan Teki Cc: Andrzej Hajda , Inki Dae , Marek Szyprowski , Joonyoung Shim , Seung-Woo Kim , Kyungmin Park , Frieder Schrempf , Fancy Fang , Tim Harvey , Michael Nazzareno Trimarchi , Adam Ford , Neil Armstrong , Robert Foss , Laurent Pinchart , Tommaso Merciai , Matteo Lisi , dri-devel@lists.freedesktop.org, linux-samsung-soc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, NXP Linux Team , linux-amarula References: <20221005151309.7278-1-jagan@amarulasolutions.com> <20221005151309.7278-8-jagan@amarulasolutions.com> From: Marek Vasut In-Reply-To: X-Virus-Scanned: clamav-milter 0.103.6 at phobos.denx.de X-Virus-Status: Clean X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20221103_092605_173010_02FFFEAA X-CRM114-Status: GOOD ( 19.21 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gMTEvMy8yMiAxMDozOSwgSmFnYW4gVGVraSB3cm90ZToKPiBPbiBTdW4sIE9jdCAxNiwgMjAy MiBhdCAzOjMxIEFNIE1hcmVrIFZhc3V0IDxtYXJleEBkZW54LmRlPiB3cm90ZToKPj4KPj4gT24g MTAvNS8yMiAxNzoxMywgSmFnYW4gVGVraSB3cm90ZToKPj4KPj4gWy4uLl0KPj4KPj4+IEBAIC0x MzIxLDYgKzEzMjIsMzIgQEAgc3RhdGljIHZvaWQgc2Ftc3VuZ19kc2ltX2F0b21pY19wb3N0X2Rp c2FibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKPj4+ICAgICAgICBwbV9ydW50aW1lX3B1 dF9zeW5jKGRzaS0+ZGV2KTsKPj4+ICAgIH0KPj4+Cj4+PiArI2RlZmluZSBNQVhfSU5QVVRfU0VM X0ZPUk1BVFMgICAgICAgIDEKPj4+ICsKPj4+ICtzdGF0aWMgdTMyICoKPj4+ICtzYW1zdW5nX2Rz aW1fYXRvbWljX2dldF9pbnB1dF9idXNfZm10cyhzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAo+ Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1fYnJpZGdl X3N0YXRlICpicmlkZ2Vfc3RhdGUsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+Pj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25u X3N0YXRlLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBvdXRw dXRfZm10LAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGludCAqbnVtX2lucHV0X2ZtdHMpCj4+PiArewo+Pj4gKyAgICAgdTMyICppbnB1dF9mbXRzOwo+ Pj4gKwo+Pj4gKyAgICAgKm51bV9pbnB1dF9mbXRzID0gMDsKPj4+ICsKPj4+ICsgICAgIGlucHV0 X2ZtdHMgPSBrY2FsbG9jKE1BWF9JTlBVVF9TRUxfRk9STUFUUywgc2l6ZW9mKCppbnB1dF9mbXRz KSwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIEdGUF9LRVJORUwpOwo+Pj4gKyAgICAg aWYgKCFpbnB1dF9mbXRzKQo+Pj4gKyAgICAgICAgICAgICByZXR1cm4gTlVMTDsKPj4+ICsKPj4+ ICsgICAgIC8qIFRoaXMgaXMgdGhlIERTSS1lbmQgYnVzIGZvcm1hdCAqLwo+Pj4gKyAgICAgaW5w dXRfZm10c1swXSA9IE1FRElBX0JVU19GTVRfUkdCODg4XzFYMjQ7Cj4+PiArICAgICAqbnVtX2lu cHV0X2ZtdHMgPSAxOwo+Pgo+PiBJcyB0aGlzIHRoZSBvbmx5IHN1cHBvcnRlZCBmb3JtYXQgPyBO WFAgQU4xMzU3MyBsaXN0cyB0aGUgZm9sbG93aW5nOgo+Pgo+PiBpLk1YIDgvUlQgTUlQSSBEU0kv Q1NJLTIsIFJldi4gMCwgMjEgTWFyY2ggMjAyMgo+PiAzLjcuNCBQaXhlbCBmb3JtYXRzCj4+IFRh YmxlIDE0LiBEU0kgcGl4ZWwgcGFja2luZyBmb3JtYXRzCj4+Cj4+IExvb3NlbHkgUGFja2VkIFBp eGVsIFN0cmVhbSwgMjAtYml0IFlDYkNyLCA0OjI6Mgo+PiBQYWNrZWQgUGl4ZWwgU3RyZWFtLCAy NC1iaXQgWUNiQ3IsIDQ6MjoyCj4+IFBhY2tlZCBQaXhlbCBTdHJlYW0sIDE2LWJpdCBZQ2JDciwg NDoyOjIKPiAKPiBMb29rIGxpa2UgdGhlc2UgYXJlIHVuc3VwcG9ydGVkIGluIG1lZGlhLWJ1cy1m b3JtYXQuaCBsaXN0LgoKQXJlbid0IHRob3NlOgoKTUVESUFfQlVTX0ZNVF9VWVZZMTJfMVgyNApN RURJQV9CVVNfRk1UX1VZVlk4XzFYMTYKCj8KClRob3NlIGFyZSBwYWNrZWQsIGFuZCBzdWJzYW1w bGVkIDQ6MjoyCgo+PiBQYWNrZWQgUGl4ZWwgU3RyZWFtLCAzMC1iaXQgUkdCLCAxMC0xMC0xMAoK TUVESUFfQlVTX0ZNVF9SR0IxMDEwMTBfMVgzMAoKPj4gUGFja2VkIFBpeGVsIFN0cmVhbSwgMzYt Yml0IFJHQiwgMTItMTItMTIKCk1FRElBX0JVU19GTVRfUkdCMTIxMjEyXzFYMzYKCj4+IFBhY2tl ZCBQaXhlbCBTdHJlYW0sIDEyLWJpdCBZQ2JDciwgNDoyOjAKPiAKPiBTYW1lIGlzc3VlLCB1bnN1 cHBvcnRlZC4KClRoZSAxMi1iaXQgcGFja2VkIDQ6MjowIG1pZ2h0IGJlIHNvbWV0aGluZyBhbG9u ZyB0aGUgbGluZXMgb2YKCmRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vcm9ja2NoaXAvcmtpc3AxL3Jr aXNwMS1yZXNpemVyLmMKTUVESUFfQlVTX0ZNVF9ZVVlWOF8xXzVYOCwgLyogWVVWNDIwICovCgo+ PiBQYWNrZWQgUGl4ZWwgU3RyZWFtLCAxNi1iaXQgUkdCLCA1LTYtNQo+IAo+IE1FRElBX0JVU19G TVRfUkdCNTY1XzFYMTYKPiAKPj4gUGFja2VkIFBpeGVsIFN0cmVhbSwgMTgtYml0IFJHQiwgNi02 LTYKPiAKPiBTYW1lIGlzc3VlLCB1bnN1cHBvcnRlZC4KCk1FRElBX0JVU19GTVRfUkdCNjY2XzFY MTgKCj4+IExvb3NlbHkgUGFja2VkIFBpeGVsIFN0cmVhbSwgMTgtYml0IFJHQiwgNi02LTYKPj4g UGFja2VkIFBpeGVsIFN0cmVhbSwgMjQtYml0IFJHQiwgOC04LTggRm9ybWF0Cj4gCj4gTUVESUFf QlVTX0ZNVF9SR0I2NjZfMVgxOAo+IE1FRElBX0JVU19GTVRfUkdCODg4XzFYMjQKPiAKPj4KPj4g VGhlIE1YOE1NL01OIExDRElGIGNhbiBnZW5lcmF0ZSBhbGwgb2YgdGhvc2UgUkdCIGZvcm1hdHMg LCB0aGUgTVg4TVAKPj4gTENESUZ2MyBjYW4gYWxzbyBnZW5lcmF0ZSB0aGUgMTZiaXQgWUNiQ3Ig Lgo+IAo+IElzIFlDYkNyIGRlbm90ZWQgYXMgVVlWWSBpbiBtZWRpYS1idXMtZm9ybWF0LmggPwpJ IHRoaW5rIHRoaXMgYXBwbGllczoKCmh0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvZG9jL2h0bWwvbGF0 ZXN0L3VzZXJzcGFjZS1hcGkvbWVkaWEvdjRsL2NvbG9yc3BhY2VzLmh0bWwKIgpTb21ldGltZXMg cGVvcGxlIGNvbmZ1c2UgWeKAmUNiQ3IgYXMgYmVpbmcgYSBjb2xvcnNwYWNlLiBUaGlzIGlzIG5v dCAKY29ycmVjdCwgaXQgaXMganVzdCBhbiBlbmNvZGluZyBvZiBhbiBS4oCZR+KAmULigJkgY29s b3IgaW50byBsdW1hIGFuZCBjaHJvbWEgCnZhbHVlcy4KIgoKQW5kIGVzcC4gdGhpczoKCiIKSW4g b3JkZXIgdG8gY29ycmVjdGx5IGludGVycHJldCBhIGNvbG9yIHlvdSBuZWVkIHRvIGtub3cgdGhl IApxdWFudGl6YXRpb24gcmFuZ2UsIHdoZXRoZXIgaXQgaXMgUuKAmUfigJlC4oCZIG9yIFnigJlD YkNyLCB0aGUgdXNlZCBZ4oCZQ2JDciAKZW5jb2RpbmcgYW5kIHRoZSBjb2xvcnNwYWNlLiBGcm9t IHRoYXQgaW5mb3JtYXRpb24geW91IGNhbiBjYWxjdWxhdGUgdGhlIApjb3JyZXNwb25kaW5nIENJ RSBYWVogY29sb3IgYW5kIG1hcCB0aGF0IGFnYWluIHRvIHdoYXRldmVyIGNvbG9yc3BhY2UgCnlv dXIgZGlzcGxheSBkZXZpY2UgdXNlcy4KIgoKV2hpY2ggbWVhbnMgdGhhdCBpbiBvcmRlciB0byBw cm9wZXJseSBkZXNjcmliZSBvciBpbnRlcnByZXQgdGhlIGRhdGEsIAp5b3UgbmVlZCB0aGUgZW50 aXJlIHY0bDJfbWJ1c19mcmFtZWZtdCBjb250ZW50LCBub3QganVzdCB0aGUgcGl4ZWwgY29kZToK Cmh0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvZG9jL2h0bWwvbGF0ZXN0L3VzZXJzcGFjZS1hcGkvbWVk aWEvdjRsL3N1YmRldi1mb3JtYXRzLmh0bWwKCkJ1dCB0aGlzIGluZm9ybWF0aW9uIGlzIG5vdCBw YXNzZWQgYWNyb3NzIHRoZSBidXMsIHRoYXQncyBtZXRhZGF0YSAKaW50ZXJuYWwgdG8gdGhlIGtl cm5lbC4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxp bnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFk ZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4 LWFybS1rZXJuZWwK