From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-ej1-f45.google.com (mail-ej1-f45.google.com [209.85.218.45]) (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 488B27A; Fri, 4 Mar 2022 12:59:27 +0000 (UTC) Received: by mail-ej1-f45.google.com with SMTP id hw13so17254015ejc.9; Fri, 04 Mar 2022 04:59:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=ln4FCzFPSro+Ut4SgBBNjvILZ4e+LysX8Gy/fmSPh5g=; b=P+Ohi+IdH1WH7ELc1GY8Dqz3xuAIwLJFPIogyC/GDStdmMkEcFMOWUl3yGCIrWZ34w DJVISgjifRusB8R56aA7KAgi7u7t/Sg/6nLMlDDPmsL09r8TMtawC8eb2qZ+ddqRu8Eg XhNINQWf3mCr0wbiFRLiQQBpcAlDeQUBlAR1AUFIkGQSKz8TVQrjNc+BFyKBTtAS82Kx Iw0gBeeHaknqA/eXD9Sx8oTmWW0tMKFbiqglhyOIvoRx1FledNnO07r8z0MJbHsRBUTD oH37WGe29ACtCA59dzHW9NSndYxEvgQ8NNKFKMDGbSERPDCrKN0e46vaM0m2Qg9KMSdn CH3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=ln4FCzFPSro+Ut4SgBBNjvILZ4e+LysX8Gy/fmSPh5g=; b=plwIzkbxhHSe69OdiGv+PV+EJIUSmECE9UVT1FYJN+bfPmgxmpeFWCWhqIG2Cau7Bx N9MV+oJprfVns4jLglKOxgipKP80a1a5GakGrRE4aNp+p7H0plizaBlxmBqrRwZCcktZ +vAsqh05VXwj2KLETrRxWgOKhJLFOBpg+AKtZF1f6WhGS0iEqvQy6L+SFPgFg7QWAkiF QXjPMvxES+lau91aIqKTf0KnKrlTh5f0tm+H5MCUHy+A0M6osFCfvWzf46I+k0PnfRec IzxAFRwCjiA6NCaoSr1Ja4NoDPs4PSJD5qIb0/qoVHBhvAr6bukPdZ39c6YKQVwIK5EZ Zwxw== X-Gm-Message-State: AOAM533RSQ2WnwYmDZxRju8QdSGXO+trkAcuwS2sFfmhqcxlUxJMer2G LtjkyGvW42J1zBEgVdbI/709XbnA6eB4rDy+Cks= X-Google-Smtp-Source: ABdhPJy5ATyl9FikK6JTQ2LV3A6ScWCl741hg3bhCI4Kftprbltxss7tD4scm6SywmqRJeO57KOSgF/1m8GMnBhA3jc= X-Received: by 2002:a17:907:7704:b0:6cf:48ac:b4a8 with SMTP id kw4-20020a170907770400b006cf48acb4a8mr30127074ejc.305.1646398764922; Fri, 04 Mar 2022 04:59:24 -0800 (PST) Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 References: <20220225164600.1044663-1-benjamin.gaignard@collabora.com> <678c1f01-c6cd-d1be-bd0b-277a808b006a@collabora.com> In-Reply-To: <678c1f01-c6cd-d1be-bd0b-277a808b006a@collabora.com> From: Adam Ford Date: Fri, 4 Mar 2022 06:59:14 -0600 Message-ID: Subject: Re: [PATCH v3 00/14] Move HEVC stateless controls out of staging To: Benjamin Gaignard Cc: Mauro Carvalho Chehab , Ezequiel Garcia , Philipp Zabel , Greg Kroah-Hartman , mripard@kernel.org, paul.kocialkowski@bootlin.com, Chen-Yu Tsai , "jernej.skrabec" , Jonas Karlman , Nicolas Dufresne , linux-media , Linux Kernel Mailing List , "open list:STAGING SUBSYSTEM" , arm-soc , linux-sunxi@lists.linux.dev, kernel , knaerzche@gmail.com, jc@kynesim.co.uk Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Mar 3, 2022 at 4:13 AM Benjamin Gaignard wrote: > > > Le 03/03/2022 =C3=A0 02:23, Adam Ford a =C3=A9crit : > > On Mon, Feb 28, 2022 at 4:13 AM Benjamin Gaignard > > wrote: > >> > >> Le 26/02/2022 =C3=A0 23:25, Adam Ford a =C3=A9crit : > >>> On Fri, Feb 25, 2022 at 4:41 PM Benjamin Gaignard > >>> wrote: > >>>> This series aims to make HEVC uapi stable and usable for hardware > >>>> decoder. HEVC uapi is used by 2 mainlined drivers (Cedrus and Hantro= ) > >>>> and 2 out of the tree drivers (rkvdec and RPI). > >>>> > >>>> After the remarks done on version 2, I have completely reworked to p= atches > >>>> split so changelogs are meaningless. I have also drop "RFC" from the > >>>> titles. > >>>> > >>>> In this v3 I do all the changes (new controls, documentation, etc..) > >>>> in the staging directory before moving the HEVC uAPI to stable > >>>> steps by steps (unlike the big one patch in v2). > >>>> > >>>> At the end fluster tests results on IMX8MQ is 77/147 for HEVC codec. > >> I have push a branch here: > >> https://gitlab.collabora.com/benjamin.gaignard/for-upstream/-/commits/= HEVC_UAPI_V4 > >> > >> it is the incoming version 4 of this series + patches to enable G2 on = my IMX8MQ > > Benjamin, > > > > I checked this repo out, and built it along with pulling the latest > > versions of G-streamer and fluster. > > When I check for v4l2 compatibility, I get the following: > > > > GStreamer-H.264-V4L2-Gst1.0: GStreamer H.264 V4L2 decoder for > > GStreamer 1.0... =E2=9D=8C > > GStreamer-H.264-V4L2SL-Gst1.0: GStreamer H.264 V4L2SL decoder for > > GStreamer 1.0... =E2=9C=94=EF=B8=8F > > GStreamer-AV1-V4L2SL-Gst1.0: GStreamer AV1 V4L2SL decoder for > > GStreamer 1.0... =E2=9D=8C > > GStreamer-H.265-V4L2-Gst1.0: GStreamer H.265 V4L2 decoder for > > GStreamer 1.0... =E2=9D=8C > > GStreamer-H.265-V4L2SL-Gst1.0: GStreamer H.265 V4L2SL decoder for > > GStreamer 1.0... =E2=9D=8C > > GStreamer-VP8-V4L2-Gst1.0: GStreamer VP8 V4L2 decoder for GStreame= r 1.0... =E2=9D=8C > > GStreamer-VP8-V4L2SL-Gst1.0: GStreamer VP8 V4L2SL decoder for > > GStreamer 1.0... =E2=9C=94=EF=B8=8F > > GStreamer-VP9-V4L2SL-Gst1.0: GStreamer VP9 V4L2SL decoder for > > GStreamer 1.0... =E2=9C=94=EF=B8=8F > > > > I see H,264, VP8 and VP9, but I would have also expected > > GStreamer-H.265-V4L2SL-Gst1.0 to return with a check box. > > > > When I checked to see if both decoders were being enumerated, I found t= hey were. > > [gst-main] root@localhost:~/gstreamer/fluster# dmesg |grep -i hantro > > [ 16.044243] hantro_vpu: module is from the staging directory, the > > quality is unknown, you have been warned. > > [ 16.044243] hantro_vpu: module is from the staging directory, the > > quality is unknown, you have been warned. > > [ 16.095661] hantro-vpu 38300000.video-codec: registered > > nxp,imx8mq-vpu-g1-dec as /dev/video0 > > [ 16.096782] hantro-vpu 38310000.video-codec: registered > > nxp,imx8mq-vpu-g2-dec as /dev/video1 > > > > Did I do something wrong, or did I miss something? > > Hi Adam, > > I guess it could be a misalignment between v4l2 kernel headers > and GStreamer v4l2 headers. > I have push a new version of the GST merge request which is aligned with > HEVC uAPI v4 proposal. > > When you inspect v4l2codecs gst plugin (gst-inspect-1.0 v4l2codecs) do > you see v4l2slh265dec plugin ? > I have fluster happy with it: > ./fluster.py list -c I pulled the latest from g-streamer's git repo again, and re-built. gst-instpect does not appear to show the h265 codec anymore. # gst-inspect-1.0 |grep v4l2codecs v4l2codecs: v4l2slh264dec: V4L2 Stateless H.264 Video Decoder v4l2codecs: v4l2slmpeg2dec: V4L2 Stateless Mpeg2 Video Decoder v4l2codecs: v4l2slvp8alphadecodebin: VP8 Alpha Decoder v4l2codecs: v4l2slvp8dec: V4L2 Stateless VP8 Video Decoder v4l2codecs: v4l2slvp9alphadecodebin: VP9 Alpha Decoder v4l2codecs: v4l2slvp9dec: V4L2 Stateless VP9 Video Decoder Is there a specific branch of g-streamer I should be using that can handle the newer API? adam > > > H265 > ... > GStreamer-H.265-V4L2-Gst1.0: GStreamer H.265 V4L2 decoder for GStrea= mer 1.0... =E2=9D=8C > GStreamer-H.265-V4L2SL-Gst1.0: GStreamer H.265 V4L2SL decoder for GS= treamer 1.0... =E2=9C=94=EF=B8=8F > GStreamer-H.265-VA-Gst1.0: GStreamer H.265 VA decoder for GStreamer = 1.0... =E2=9D=8C > GStreamer-H.265-VAAPI-Gst1.0: GStreamer H.265 VAAPI decoder for GStr= eamer 1.0... =E2=9D=8C > JCT-VT-H.265: JCT-VT H.265/HEVC reference decoder... =E2=9D=8C > > I hope that will help you, > > Regards, > Benjamin > > > > > adam > > > >> Regards, > >> Benjamin > >> > >>> Benjamin, > >>> > >>> I have an imx8mm and imx8mq that I can test. Do you happen to have a > >>> repo that I can clone to test this? The imx8m stuff is spread around > >>> between the media tree and the imx tree since it hasn't been fully > >>> merged yet. > >>> > >>> thanks, > >>> > >>> adam > >>> > >>>> Benjamin > >>>> > >>>> Benjamin Gaignard (11): > >>>> media: uapi: HEVC: Add missing fields in HEVC controls > >>>> media: uapi: HEVC: Rename HEVC stateless controls with STATELESS > >>>> prefix > >>>> media: uapi: HEVC: Add document uAPI structure > >>>> media: uapi: HEVC: Define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS a= s a > >>>> dynamic array > >>>> media: uapi: Move parsed HEVC pixel format out of staging > >>>> media: uapi: Add V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSET cont= rol > >>>> media: uapi: Move the HEVC stateless control type out of staging > >>>> media: controls: Log HEVC stateless control in .std_log > >>>> media: uapi: Create a dedicated header for Hantro control > >>>> media: uapi: HEVC: fix padding in v4l2 control structures > >>>> media: uapi: move HEVC stateless controls out of staging > >>>> > >>>> Hans Verkuil (3): > >>>> videodev2.h: add V4L2_CTRL_FLAG_DYNAMIC_ARRAY > >>>> v4l2-ctrls: add support for dynamically allocated arrays. > >>>> vivid: add dynamic array test control > >>>> > >>>> .../userspace-api/media/drivers/hantro.rst | 5 - > >>>> .../media/v4l/ext-ctrls-codec-stateless.rst | 831 +++++++++++++= +++++ > >>>> .../media/v4l/ext-ctrls-codec.rst | 780 -------------= --- > >>>> .../media/v4l/pixfmt-compressed.rst | 7 +- > >>>> .../media/v4l/vidioc-g-ext-ctrls.rst | 20 + > >>>> .../media/v4l/vidioc-queryctrl.rst | 8 + > >>>> .../media/videodev2.h.rst.exceptions | 5 + > >>>> .../media/test-drivers/vivid/vivid-ctrls.c | 15 + > >>>> drivers/media/v4l2-core/v4l2-ctrls-api.c | 103 ++- > >>>> drivers/media/v4l2-core/v4l2-ctrls-core.c | 198 ++++- > >>>> drivers/media/v4l2-core/v4l2-ctrls-defs.c | 32 +- > >>>> drivers/media/v4l2-core/v4l2-ctrls-priv.h | 3 +- > >>>> drivers/media/v4l2-core/v4l2-ctrls-request.c | 13 +- > >>>> drivers/staging/media/hantro/hantro_drv.c | 27 +- > >>>> drivers/staging/media/hantro/hantro_hevc.c | 8 +- > >>>> drivers/staging/media/sunxi/cedrus/cedrus.c | 24 +- > >>>> .../staging/media/sunxi/cedrus/cedrus_dec.c | 10 +- > >>>> include/media/hevc-ctrls.h | 250 ------ > >>>> include/media/v4l2-ctrls.h | 48 +- > >>>> include/uapi/linux/hantro-media.h | 19 + > >>>> include/uapi/linux/v4l2-controls.h | 436 +++++++++ > >>>> include/uapi/linux/videodev2.h | 13 + > >>>> 22 files changed, 1686 insertions(+), 1169 deletions(-) > >>>> delete mode 100644 include/media/hevc-ctrls.h > >>>> create mode 100644 include/uapi/linux/hantro-media.h > >>>> > >>>> -- > >>>> 2.32.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 110ABC433EF for ; Fri, 4 Mar 2022 13:00:53 +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:Cc:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=DymaVbTZu+3sI+4Ed+Rikj2+osUNAOX/QQi+0jkMZJE=; b=dfvysPwxrhT9D/ jaSIQtZzne5tkoBMeuiYTP8YRNuzATHFhjpSHqURcThPo5TM7YfeCW794BR31Gu3LIm3C+W58ucwV XC7FCWstObyLynaU5rlAfLta1qwh4eESKMVvxa6EvCgaqGPhEE5hWslKskxkSXLa89qR5eGJ0cS1E ChP0UGecU0F2/pwc/JPJfFPefaLb2ud5hOSjPPZ2UVd5TDtH1PjBgSIXd1FUa/ALvj2I0qDCmVddx NP578GgHgPbrLnnnISKpTdg6E0jfVaWbIAAh9AbUh7xJQ8k6A/Doj+CaLKqJplFeB8hbyQH7U0eMf XfvfNacKWU0laTIsYzjg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nQ7Wu-00A2Vu-2i; Fri, 04 Mar 2022 12:59:32 +0000 Received: from mail-ej1-x633.google.com ([2a00:1450:4864:20::633]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nQ7Wp-00A2Uf-Tu for linux-arm-kernel@lists.infradead.org; Fri, 04 Mar 2022 12:59:29 +0000 Received: by mail-ej1-x633.google.com with SMTP id hw13so17254019ejc.9 for ; Fri, 04 Mar 2022 04:59:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=ln4FCzFPSro+Ut4SgBBNjvILZ4e+LysX8Gy/fmSPh5g=; b=P+Ohi+IdH1WH7ELc1GY8Dqz3xuAIwLJFPIogyC/GDStdmMkEcFMOWUl3yGCIrWZ34w DJVISgjifRusB8R56aA7KAgi7u7t/Sg/6nLMlDDPmsL09r8TMtawC8eb2qZ+ddqRu8Eg XhNINQWf3mCr0wbiFRLiQQBpcAlDeQUBlAR1AUFIkGQSKz8TVQrjNc+BFyKBTtAS82Kx Iw0gBeeHaknqA/eXD9Sx8oTmWW0tMKFbiqglhyOIvoRx1FledNnO07r8z0MJbHsRBUTD oH37WGe29ACtCA59dzHW9NSndYxEvgQ8NNKFKMDGbSERPDCrKN0e46vaM0m2Qg9KMSdn CH3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=ln4FCzFPSro+Ut4SgBBNjvILZ4e+LysX8Gy/fmSPh5g=; b=jgd3ZNI38vTOUUydoLA5vlTUombz2jk0181IIkCYLzikDQZTgiGGzEo4RfBSKN/npH YNT4FPQHuZVpi8OM7mgKqrQyAyq+wN1vDSoNhTzzSppeGSrZWudBWSu45eLZt5RpjBmT z1hpuXcPkoG8pwWVcfa/fHS4IbwifodcTnvONh/WUGBWB/WuCyLtCVhqlL8Gj6z+Icda bcy5YRhH7QdPEJQ1dCw4WtF8VMq5kjMXyrsWHkYmqHX3ZHxog6biipO8U1n+ZO3up5iT km2RtN9kSSFPn6QuSCOjgX11pBV+l61H+zTf3QAljvyQOCnIEhAP5bf2BLtbt1yA6jyI GGEw== X-Gm-Message-State: AOAM530S5icmF5tXgHPiXIoV2q8+zZzDnCZsrmylCBUQ+GbHJZRGfLtH RWgyX3qwICxpFWLJJ9zHslOuL7HYKN2Yra6Tn6o= X-Google-Smtp-Source: ABdhPJy5ATyl9FikK6JTQ2LV3A6ScWCl741hg3bhCI4Kftprbltxss7tD4scm6SywmqRJeO57KOSgF/1m8GMnBhA3jc= X-Received: by 2002:a17:907:7704:b0:6cf:48ac:b4a8 with SMTP id kw4-20020a170907770400b006cf48acb4a8mr30127074ejc.305.1646398764922; Fri, 04 Mar 2022 04:59:24 -0800 (PST) MIME-Version: 1.0 References: <20220225164600.1044663-1-benjamin.gaignard@collabora.com> <678c1f01-c6cd-d1be-bd0b-277a808b006a@collabora.com> In-Reply-To: <678c1f01-c6cd-d1be-bd0b-277a808b006a@collabora.com> From: Adam Ford Date: Fri, 4 Mar 2022 06:59:14 -0600 Message-ID: Subject: Re: [PATCH v3 00/14] Move HEVC stateless controls out of staging To: Benjamin Gaignard Cc: Mauro Carvalho Chehab , Ezequiel Garcia , Philipp Zabel , Greg Kroah-Hartman , mripard@kernel.org, paul.kocialkowski@bootlin.com, Chen-Yu Tsai , "jernej.skrabec" , Jonas Karlman , Nicolas Dufresne , linux-media , Linux Kernel Mailing List , "open list:STAGING SUBSYSTEM" , arm-soc , linux-sunxi@lists.linux.dev, kernel , knaerzche@gmail.com, jc@kynesim.co.uk X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220304_045927_997361_0FE77658 X-CRM114-Status: GOOD ( 38.57 ) 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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gVGh1LCBNYXIgMywgMjAyMiBhdCA0OjEzIEFNIEJlbmphbWluIEdhaWduYXJkCjxiZW5qYW1p bi5nYWlnbmFyZEBjb2xsYWJvcmEuY29tPiB3cm90ZToKPgo+Cj4gTGUgMDMvMDMvMjAyMiDDoCAw MjoyMywgQWRhbSBGb3JkIGEgw6ljcml0IDoKPiA+IE9uIE1vbiwgRmViIDI4LCAyMDIyIGF0IDQ6 MTMgQU0gQmVuamFtaW4gR2FpZ25hcmQKPiA+IDxiZW5qYW1pbi5nYWlnbmFyZEBjb2xsYWJvcmEu Y29tPiB3cm90ZToKPiA+Pgo+ID4+IExlIDI2LzAyLzIwMjIgw6AgMjM6MjUsIEFkYW0gRm9yZCBh IMOpY3JpdCA6Cj4gPj4+IE9uIEZyaSwgRmViIDI1LCAyMDIyIGF0IDQ6NDEgUE0gQmVuamFtaW4g R2FpZ25hcmQKPiA+Pj4gPGJlbmphbWluLmdhaWduYXJkQGNvbGxhYm9yYS5jb20+IHdyb3RlOgo+ ID4+Pj4gVGhpcyBzZXJpZXMgYWltcyB0byBtYWtlIEhFVkMgdWFwaSBzdGFibGUgYW5kIHVzYWJs ZSBmb3IgaGFyZHdhcmUKPiA+Pj4+IGRlY29kZXIuIEhFVkMgdWFwaSBpcyB1c2VkIGJ5IDIgbWFp bmxpbmVkIGRyaXZlcnMgKENlZHJ1cyBhbmQgSGFudHJvKQo+ID4+Pj4gYW5kIDIgb3V0IG9mIHRo ZSB0cmVlIGRyaXZlcnMgKHJrdmRlYyBhbmQgUlBJKS4KPiA+Pj4+Cj4gPj4+PiBBZnRlciB0aGUg cmVtYXJrcyBkb25lIG9uIHZlcnNpb24gMiwgSSBoYXZlIGNvbXBsZXRlbHkgcmV3b3JrZWQgdG8g cGF0Y2hlcwo+ID4+Pj4gc3BsaXQgc28gY2hhbmdlbG9ncyBhcmUgbWVhbmluZ2xlc3MuIEkgaGF2 ZSBhbHNvIGRyb3AgIlJGQyIgZnJvbSB0aGUKPiA+Pj4+IHRpdGxlcy4KPiA+Pj4+Cj4gPj4+PiBJ biB0aGlzIHYzIEkgZG8gYWxsIHRoZSBjaGFuZ2VzIChuZXcgY29udHJvbHMsIGRvY3VtZW50YXRp b24sIGV0Yy4uKQo+ID4+Pj4gaW4gdGhlIHN0YWdpbmcgZGlyZWN0b3J5IGJlZm9yZSBtb3Zpbmcg dGhlIEhFVkMgdUFQSSB0byBzdGFibGUKPiA+Pj4+IHN0ZXBzIGJ5IHN0ZXBzICh1bmxpa2UgdGhl IGJpZyBvbmUgcGF0Y2ggaW4gdjIpLgo+ID4+Pj4KPiA+Pj4+IEF0IHRoZSBlbmQgZmx1c3RlciB0 ZXN0cyByZXN1bHRzIG9uIElNWDhNUSBpcyA3Ny8xNDcgZm9yIEhFVkMgY29kZWMuCj4gPj4gSSBo YXZlIHB1c2ggYSBicmFuY2ggaGVyZToKPiA+PiBodHRwczovL2dpdGxhYi5jb2xsYWJvcmEuY29t L2JlbmphbWluLmdhaWduYXJkL2Zvci11cHN0cmVhbS8tL2NvbW1pdHMvSEVWQ19VQVBJX1Y0Cj4g Pj4KPiA+PiBpdCBpcyB0aGUgaW5jb21pbmcgdmVyc2lvbiA0IG9mIHRoaXMgc2VyaWVzICsgcGF0 Y2hlcyB0byBlbmFibGUgRzIgb24gbXkgSU1YOE1RCj4gPiBCZW5qYW1pbiwKPiA+Cj4gPiBJIGNo ZWNrZWQgdGhpcyByZXBvIG91dCwgYW5kIGJ1aWx0IGl0IGFsb25nIHdpdGggcHVsbGluZyB0aGUg bGF0ZXN0Cj4gPiB2ZXJzaW9ucyBvZiBHLXN0cmVhbWVyIGFuZCBmbHVzdGVyLgo+ID4gV2hlbiBJ IGNoZWNrIGZvciB2NGwyIGNvbXBhdGliaWxpdHksIEkgZ2V0IHRoZSBmb2xsb3dpbmc6Cj4gPgo+ ID4gICAgICBHU3RyZWFtZXItSC4yNjQtVjRMMi1Hc3QxLjA6IEdTdHJlYW1lciBILjI2NCBWNEwy IGRlY29kZXIgZm9yCj4gPiBHU3RyZWFtZXIgMS4wLi4uIOKdjAo+ID4gICAgICBHU3RyZWFtZXIt SC4yNjQtVjRMMlNMLUdzdDEuMDogR1N0cmVhbWVyIEguMjY0IFY0TDJTTCBkZWNvZGVyIGZvcgo+ ID4gR1N0cmVhbWVyIDEuMC4uLiDinJTvuI8KPiA+ICAgICAgR1N0cmVhbWVyLUFWMS1WNEwyU0wt R3N0MS4wOiBHU3RyZWFtZXIgQVYxIFY0TDJTTCBkZWNvZGVyIGZvcgo+ID4gR1N0cmVhbWVyIDEu MC4uLiDinYwKPiA+ICAgICAgR1N0cmVhbWVyLUguMjY1LVY0TDItR3N0MS4wOiBHU3RyZWFtZXIg SC4yNjUgVjRMMiBkZWNvZGVyIGZvcgo+ID4gR1N0cmVhbWVyIDEuMC4uLiDinYwKPiA+ICAgICAg R1N0cmVhbWVyLUguMjY1LVY0TDJTTC1Hc3QxLjA6IEdTdHJlYW1lciBILjI2NSBWNEwyU0wgZGVj b2RlciBmb3IKPiA+IEdTdHJlYW1lciAxLjAuLi4g4p2MCj4gPiAgICAgIEdTdHJlYW1lci1WUDgt VjRMMi1Hc3QxLjA6IEdTdHJlYW1lciBWUDggVjRMMiBkZWNvZGVyIGZvciBHU3RyZWFtZXIgMS4w Li4uIOKdjAo+ID4gICAgICBHU3RyZWFtZXItVlA4LVY0TDJTTC1Hc3QxLjA6IEdTdHJlYW1lciBW UDggVjRMMlNMIGRlY29kZXIgZm9yCj4gPiBHU3RyZWFtZXIgMS4wLi4uIOKclO+4jwo+ID4gICAg ICBHU3RyZWFtZXItVlA5LVY0TDJTTC1Hc3QxLjA6IEdTdHJlYW1lciBWUDkgVjRMMlNMIGRlY29k ZXIgZm9yCj4gPiBHU3RyZWFtZXIgMS4wLi4uIOKclO+4jwo+ID4KPiA+IEkgc2VlIEgsMjY0LCBW UDggYW5kIFZQOSwgYnV0IEkgd291bGQgaGF2ZSBhbHNvIGV4cGVjdGVkCj4gPiBHU3RyZWFtZXIt SC4yNjUtVjRMMlNMLUdzdDEuMCB0byByZXR1cm4gd2l0aCBhIGNoZWNrIGJveC4KPiA+Cj4gPiBX aGVuIEkgY2hlY2tlZCB0byBzZWUgaWYgYm90aCBkZWNvZGVycyB3ZXJlIGJlaW5nIGVudW1lcmF0 ZWQsIEkgZm91bmQgdGhleSB3ZXJlLgo+ID4gW2dzdC1tYWluXSByb290QGxvY2FsaG9zdDp+L2dz dHJlYW1lci9mbHVzdGVyIyBkbWVzZyB8Z3JlcCAtaSBoYW50cm8KPiA+IFsgICAxNi4wNDQyNDNd IGhhbnRyb192cHU6IG1vZHVsZSBpcyBmcm9tIHRoZSBzdGFnaW5nIGRpcmVjdG9yeSwgdGhlCj4g PiBxdWFsaXR5IGlzIHVua25vd24sIHlvdSBoYXZlIGJlZW4gd2FybmVkLgo+ID4gWyAgIDE2LjA0 NDI0M10gaGFudHJvX3ZwdTogbW9kdWxlIGlzIGZyb20gdGhlIHN0YWdpbmcgZGlyZWN0b3J5LCB0 aGUKPiA+IHF1YWxpdHkgaXMgdW5rbm93biwgeW91IGhhdmUgYmVlbiB3YXJuZWQuCj4gPiBbICAg MTYuMDk1NjYxXSBoYW50cm8tdnB1IDM4MzAwMDAwLnZpZGVvLWNvZGVjOiByZWdpc3RlcmVkCj4g PiBueHAsaW14OG1xLXZwdS1nMS1kZWMgYXMgL2Rldi92aWRlbzAKPiA+IFsgICAxNi4wOTY3ODJd IGhhbnRyby12cHUgMzgzMTAwMDAudmlkZW8tY29kZWM6IHJlZ2lzdGVyZWQKPiA+IG54cCxpbXg4 bXEtdnB1LWcyLWRlYyBhcyAvZGV2L3ZpZGVvMQo+ID4KPiA+IERpZCBJIGRvIHNvbWV0aGluZyB3 cm9uZywgb3IgZGlkIEkgbWlzcyBzb21ldGhpbmc/Cj4KPiBIaSBBZGFtLAo+Cj4gSSBndWVzcyBp dCBjb3VsZCBiZSBhIG1pc2FsaWdubWVudCBiZXR3ZWVuIHY0bDIga2VybmVsIGhlYWRlcnMKPiBh bmQgR1N0cmVhbWVyIHY0bDIgaGVhZGVycy4KPiBJIGhhdmUgcHVzaCBhIG5ldyB2ZXJzaW9uIG9m IHRoZSBHU1QgbWVyZ2UgcmVxdWVzdCB3aGljaCBpcyBhbGlnbmVkIHdpdGgKPiBIRVZDIHVBUEkg djQgcHJvcG9zYWwuCj4KPiBXaGVuIHlvdSBpbnNwZWN0IHY0bDJjb2RlY3MgZ3N0IHBsdWdpbiAo Z3N0LWluc3BlY3QtMS4wIHY0bDJjb2RlY3MpIGRvCj4geW91IHNlZSB2NGwyc2xoMjY1ZGVjIHBs dWdpbiA/Cj4gSSBoYXZlIGZsdXN0ZXIgaGFwcHkgd2l0aCBpdDoKPiAuL2ZsdXN0ZXIucHkgbGlz dCAtYwoKSSBwdWxsZWQgdGhlIGxhdGVzdCBmcm9tIGctc3RyZWFtZXIncyBnaXQgcmVwbyBhZ2Fp biwgYW5kIHJlLWJ1aWx0Lgpnc3QtaW5zdHBlY3QgZG9lcyBub3QgYXBwZWFyIHRvIHNob3cgdGhl IGgyNjUgY29kZWMgYW55bW9yZS4KCiMgZ3N0LWluc3BlY3QtMS4wIHxncmVwIHY0bDJjb2RlY3MK djRsMmNvZGVjczogIHY0bDJzbGgyNjRkZWM6IFY0TDIgU3RhdGVsZXNzIEguMjY0IFZpZGVvIERl Y29kZXIKdjRsMmNvZGVjczogIHY0bDJzbG1wZWcyZGVjOiBWNEwyIFN0YXRlbGVzcyBNcGVnMiBW aWRlbyBEZWNvZGVyCnY0bDJjb2RlY3M6ICB2NGwyc2x2cDhhbHBoYWRlY29kZWJpbjogVlA4IEFs cGhhIERlY29kZXIKdjRsMmNvZGVjczogIHY0bDJzbHZwOGRlYzogVjRMMiBTdGF0ZWxlc3MgVlA4 IFZpZGVvIERlY29kZXIKdjRsMmNvZGVjczogIHY0bDJzbHZwOWFscGhhZGVjb2RlYmluOiBWUDkg QWxwaGEgRGVjb2Rlcgp2NGwyY29kZWNzOiAgdjRsMnNsdnA5ZGVjOiBWNEwyIFN0YXRlbGVzcyBW UDkgVmlkZW8gRGVjb2RlcgoKSXMgdGhlcmUgYSBzcGVjaWZpYyBicmFuY2ggb2YgZy1zdHJlYW1l ciBJIHNob3VsZCBiZSB1c2luZyB0aGF0IGNhbgpoYW5kbGUgdGhlIG5ld2VyIEFQST8KCmFkYW0K Pgo+Cj4gSDI2NQo+ICAgICAgLi4uCj4gICAgICBHU3RyZWFtZXItSC4yNjUtVjRMMi1Hc3QxLjA6 IEdTdHJlYW1lciBILjI2NSBWNEwyIGRlY29kZXIgZm9yIEdTdHJlYW1lciAxLjAuLi4g4p2MCj4g ICAgICBHU3RyZWFtZXItSC4yNjUtVjRMMlNMLUdzdDEuMDogR1N0cmVhbWVyIEguMjY1IFY0TDJT TCBkZWNvZGVyIGZvciBHU3RyZWFtZXIgMS4wLi4uIOKclO+4jwo+ICAgICAgR1N0cmVhbWVyLUgu MjY1LVZBLUdzdDEuMDogR1N0cmVhbWVyIEguMjY1IFZBIGRlY29kZXIgZm9yIEdTdHJlYW1lciAx LjAuLi4g4p2MCj4gICAgICBHU3RyZWFtZXItSC4yNjUtVkFBUEktR3N0MS4wOiBHU3RyZWFtZXIg SC4yNjUgVkFBUEkgZGVjb2RlciBmb3IgR1N0cmVhbWVyIDEuMC4uLiDinYwKPiAgICAgIEpDVC1W VC1ILjI2NTogSkNULVZUIEguMjY1L0hFVkMgcmVmZXJlbmNlIGRlY29kZXIuLi4g4p2MCj4KPiBJ IGhvcGUgdGhhdCB3aWxsIGhlbHAgeW91LAo+Cj4gUmVnYXJkcywKPiBCZW5qYW1pbgo+Cj4gPgo+ ID4gYWRhbQo+ID4KPiA+PiBSZWdhcmRzLAo+ID4+IEJlbmphbWluCj4gPj4KPiA+Pj4gQmVuamFt aW4sCj4gPj4+Cj4gPj4+IEkgaGF2ZSBhbiBpbXg4bW0gYW5kIGlteDhtcSB0aGF0IEkgY2FuIHRl c3QuIERvIHlvdSBoYXBwZW4gdG8gaGF2ZSBhCj4gPj4+IHJlcG8gdGhhdCBJIGNhbiBjbG9uZSB0 byB0ZXN0IHRoaXM/ICBUaGUgaW14OG0gc3R1ZmYgaXMgc3ByZWFkIGFyb3VuZAo+ID4+PiBiZXR3 ZWVuIHRoZSBtZWRpYSB0cmVlIGFuZCB0aGUgaW14IHRyZWUgc2luY2UgaXQgaGFzbid0IGJlZW4g ZnVsbHkKPiA+Pj4gbWVyZ2VkIHlldC4KPiA+Pj4KPiA+Pj4gdGhhbmtzLAo+ID4+Pgo+ID4+PiBh ZGFtCj4gPj4+Cj4gPj4+PiBCZW5qYW1pbgo+ID4+Pj4KPiA+Pj4+IEJlbmphbWluIEdhaWduYXJk ICgxMSk6Cj4gPj4+PiAgICAgbWVkaWE6IHVhcGk6IEhFVkM6IEFkZCBtaXNzaW5nIGZpZWxkcyBp biBIRVZDIGNvbnRyb2xzCj4gPj4+PiAgICAgbWVkaWE6IHVhcGk6IEhFVkM6IFJlbmFtZSBIRVZD IHN0YXRlbGVzcyBjb250cm9scyB3aXRoIFNUQVRFTEVTUwo+ID4+Pj4gICAgICAgcHJlZml4Cj4g Pj4+PiAgICAgbWVkaWE6IHVhcGk6IEhFVkM6IEFkZCBkb2N1bWVudCB1QVBJIHN0cnVjdHVyZQo+ ID4+Pj4gICAgIG1lZGlhOiB1YXBpOiBIRVZDOiBEZWZpbmUgVjRMMl9DSURfU1RBVEVMRVNTX0hF VkNfU0xJQ0VfUEFSQU1TIGFzIGEKPiA+Pj4+ICAgICAgIGR5bmFtaWMgYXJyYXkKPiA+Pj4+ICAg ICBtZWRpYTogdWFwaTogTW92ZSBwYXJzZWQgSEVWQyBwaXhlbCBmb3JtYXQgb3V0IG9mIHN0YWdp bmcKPiA+Pj4+ICAgICBtZWRpYTogdWFwaTogQWRkIFY0TDJfQ0lEX1NUQVRFTEVTU19IRVZDX0VO VFJZX1BPSU5UX09GRlNFVCBjb250cm9sCj4gPj4+PiAgICAgbWVkaWE6IHVhcGk6IE1vdmUgdGhl IEhFVkMgc3RhdGVsZXNzIGNvbnRyb2wgdHlwZSBvdXQgb2Ygc3RhZ2luZwo+ID4+Pj4gICAgIG1l ZGlhOiBjb250cm9sczogTG9nIEhFVkMgc3RhdGVsZXNzIGNvbnRyb2wgaW4gLnN0ZF9sb2cKPiA+ Pj4+ICAgICBtZWRpYTogdWFwaTogQ3JlYXRlIGEgZGVkaWNhdGVkIGhlYWRlciBmb3IgSGFudHJv IGNvbnRyb2wKPiA+Pj4+ICAgICBtZWRpYTogdWFwaTogSEVWQzogZml4IHBhZGRpbmcgaW4gdjRs MiBjb250cm9sIHN0cnVjdHVyZXMKPiA+Pj4+ICAgICBtZWRpYTogdWFwaTogbW92ZSBIRVZDIHN0 YXRlbGVzcyBjb250cm9scyBvdXQgb2Ygc3RhZ2luZwo+ID4+Pj4KPiA+Pj4+IEhhbnMgVmVya3Vp bCAoMyk6Cj4gPj4+PiAgICAgdmlkZW9kZXYyLmg6IGFkZCBWNEwyX0NUUkxfRkxBR19EWU5BTUlD X0FSUkFZCj4gPj4+PiAgICAgdjRsMi1jdHJsczogYWRkIHN1cHBvcnQgZm9yIGR5bmFtaWNhbGx5 IGFsbG9jYXRlZCBhcnJheXMuCj4gPj4+PiAgICAgdml2aWQ6IGFkZCBkeW5hbWljIGFycmF5IHRl c3QgY29udHJvbAo+ID4+Pj4KPiA+Pj4+ICAgIC4uLi91c2Vyc3BhY2UtYXBpL21lZGlhL2RyaXZl cnMvaGFudHJvLnJzdCAgICB8ICAgNSAtCj4gPj4+PiAgICAuLi4vbWVkaWEvdjRsL2V4dC1jdHJs cy1jb2RlYy1zdGF0ZWxlc3MucnN0ICAgfCA4MzEgKysrKysrKysrKysrKysrKysrCj4gPj4+PiAg ICAuLi4vbWVkaWEvdjRsL2V4dC1jdHJscy1jb2RlYy5yc3QgICAgICAgICAgICAgfCA3ODAgLS0t LS0tLS0tLS0tLS0tLQo+ID4+Pj4gICAgLi4uL21lZGlhL3Y0bC9waXhmbXQtY29tcHJlc3NlZC5y c3QgICAgICAgICAgIHwgICA3ICstCj4gPj4+PiAgICAuLi4vbWVkaWEvdjRsL3ZpZGlvYy1nLWV4 dC1jdHJscy5yc3QgICAgICAgICAgfCAgMjAgKwo+ID4+Pj4gICAgLi4uL21lZGlhL3Y0bC92aWRp b2MtcXVlcnljdHJsLnJzdCAgICAgICAgICAgIHwgICA4ICsKPiA+Pj4+ICAgIC4uLi9tZWRpYS92 aWRlb2RldjIuaC5yc3QuZXhjZXB0aW9ucyAgICAgICAgICB8ICAgNSArCj4gPj4+PiAgICAuLi4v bWVkaWEvdGVzdC1kcml2ZXJzL3ZpdmlkL3ZpdmlkLWN0cmxzLmMgICAgfCAgMTUgKwo+ID4+Pj4g ICAgZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1jdHJscy1hcGkuYyAgICAgIHwgMTAzICsr LQo+ID4+Pj4gICAgZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1jdHJscy1jb3JlLmMgICAg IHwgMTk4ICsrKystCj4gPj4+PiAgICBkcml2ZXJzL21lZGlhL3Y0bDItY29yZS92NGwyLWN0cmxz LWRlZnMuYyAgICAgfCAgMzIgKy0KPiA+Pj4+ICAgIGRyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3Y0 bDItY3RybHMtcHJpdi5oICAgICB8ICAgMyArLQo+ID4+Pj4gICAgZHJpdmVycy9tZWRpYS92NGwy LWNvcmUvdjRsMi1jdHJscy1yZXF1ZXN0LmMgIHwgIDEzICstCj4gPj4+PiAgICBkcml2ZXJzL3N0 YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb19kcnYuYyAgICAgfCAgMjcgKy0KPiA+Pj4+ICAgIGRy aXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2hldmMuYyAgICB8ICAgOCArLQo+ID4+ Pj4gICAgZHJpdmVycy9zdGFnaW5nL21lZGlhL3N1bnhpL2NlZHJ1cy9jZWRydXMuYyAgIHwgIDI0 ICstCj4gPj4+PiAgICAuLi4vc3RhZ2luZy9tZWRpYS9zdW54aS9jZWRydXMvY2VkcnVzX2RlYy5j ICAgfCAgMTAgKy0KPiA+Pj4+ICAgIGluY2x1ZGUvbWVkaWEvaGV2Yy1jdHJscy5oICAgICAgICAg ICAgICAgICAgICB8IDI1MCAtLS0tLS0KPiA+Pj4+ICAgIGluY2x1ZGUvbWVkaWEvdjRsMi1jdHJs cy5oICAgICAgICAgICAgICAgICAgICB8ICA0OCArLQo+ID4+Pj4gICAgaW5jbHVkZS91YXBpL2xp bnV4L2hhbnRyby1tZWRpYS5oICAgICAgICAgICAgIHwgIDE5ICsKPiA+Pj4+ICAgIGluY2x1ZGUv dWFwaS9saW51eC92NGwyLWNvbnRyb2xzLmggICAgICAgICAgICB8IDQzNiArKysrKysrKysKPiA+ Pj4+ICAgIGluY2x1ZGUvdWFwaS9saW51eC92aWRlb2RldjIuaCAgICAgICAgICAgICAgICB8ICAx MyArCj4gPj4+PiAgICAyMiBmaWxlcyBjaGFuZ2VkLCAxNjg2IGluc2VydGlvbnMoKyksIDExNjkg ZGVsZXRpb25zKC0pCj4gPj4+PiAgICBkZWxldGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9tZWRpYS9o ZXZjLWN0cmxzLmgKPiA+Pj4+ICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3VhcGkvbGlu dXgvaGFudHJvLW1lZGlhLmgKPiA+Pj4+Cj4gPj4+PiAtLQo+ID4+Pj4gMi4zMi4wCj4gPj4+PgoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJt LWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3Jn Cmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtl cm5lbAo=