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 347B7C4332F for ; Fri, 3 Dec 2021 15:09:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1381658AbhLCPNW (ORCPT ); Fri, 3 Dec 2021 10:13:22 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34678 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1381671AbhLCPNU (ORCPT ); Fri, 3 Dec 2021 10:13:20 -0500 Received: from mail-qt1-x82d.google.com (mail-qt1-x82d.google.com [IPv6:2607:f8b0:4864:20::82d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8B78EC061353 for ; Fri, 3 Dec 2021 07:09:56 -0800 (PST) Received: by mail-qt1-x82d.google.com with SMTP id z9so3528936qtj.9 for ; Fri, 03 Dec 2021 07:09:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ndufresne-ca.20210112.gappssmtp.com; s=20210112; h=message-id:subject:from:to:cc:date:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=5VMkJHZbpjViTRA6Jhw7uB7mIcmNarQHy6QHizi1178=; b=71sGRR2nzOUu+vhocYFVTNVjY6/WqTrpjHHbfXEKt3elniexjPfWxOLr032mBBN+9Y Tw220SxKekKZsp8S/8e/xLS0Hnu6R5ruFD5wh6hN/9mO4ndz4eE7tHjJxeqQWDJNLqrq qfwGlUWt/qpUhoICghex1ctpDy+V5nUt/7Jh5j9M24TsTVjQOgeBpuc3+x3PNRQRmUZc zgAKIocNjvp9XXJRBoWZ3FkdzPnXuIDPL24wz+TmN3YYOYBxPgIVZsut/g6DIsjuL2Gt wSJaQt3bzU4ZgUkvsY6hg+Qq46O2COoQNWpTGqQeLJ24WsmNHOTnIDAckM1UfrhQqwhG F4tQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:subject:from:to:cc:date:in-reply-to :references:user-agent:mime-version:content-transfer-encoding; bh=5VMkJHZbpjViTRA6Jhw7uB7mIcmNarQHy6QHizi1178=; b=6ZTe7ACMuqH04OuOOv6tq/y3wdJWwz1jdcxAo4gu21+Pstb3071/cQmhsVxkZ+579X XsLnaehPVYh2PgS7X/uWAxa3k/wXiza9UwdDKm8Rwt78iwq/KtrC4W/m3nsUmTHc2gb7 GaS7GiGxmQB2KRGLARiV6sPsbbd2Le65eY4Ho+4c+eQ8v7OB6Y5ResXeniUa3qNenZRp XwhL6hVP/9EAuvAjgNg/QWjGnrGYG/C1pjULqsNZaDsvJt6PtA6zVRhsmdJFVYW3EjCd rJRgvnYY73VcOajjgBX43H7k8g6/ZYEyASK4l775EeHNVg9wXUexuetbdkLbkZ9XC6S4 M07Q== X-Gm-Message-State: AOAM5323KSfdeIY+Paf/hm2b4aRi3MmUoC+7VOp42RKaT+mt7HbcyffG pRyav9c4gxWMpCquFHGRvKE2FQ== X-Google-Smtp-Source: ABdhPJy61ZibMg8ILoK2AEsliArYVxsRd68TcRbdLO8nY0DiJ6C4K2+uM90k9CMi4r2w2KTjYsUWmg== X-Received: by 2002:ac8:598c:: with SMTP id e12mr21240483qte.337.1638544195661; Fri, 03 Dec 2021 07:09:55 -0800 (PST) Received: from nicolas-tpx395.localdomain (173-246-12-168.qc.cable.ebox.net. [173.246.12.168]) by smtp.gmail.com with ESMTPSA id u10sm2307205qkp.104.2021.12.03.07.09.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Dec 2021 07:09:55 -0800 (PST) Message-ID: <7e63c1665c96feccadd9c05dc603349b3a93900d.camel@ndufresne.ca> Subject: Re: [EXT] Re: [PATCH v13 08/13] media: amphion: add v4l2 m2m vpu decoder stateful driver From: Nicolas Dufresne To: Ming Qian , "mchehab@kernel.org" , "shawnguo@kernel.org" , "robh+dt@kernel.org" , "s.hauer@pengutronix.de" Cc: "hverkuil-cisco@xs4all.nl" , "kernel@pengutronix.de" , "festevam@gmail.com" , dl-linux-imx , Aisheng Dong , "linux-media@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "devicetree@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" Date: Fri, 03 Dec 2021 10:09:53 -0500 In-Reply-To: References: <9122e66af668c095548321d45dec33a3fd6ee77d.1638263914.git.ming.qian@nxp.com> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.42.1 (3.42.1-1.fc35) MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Le vendredi 03 décembre 2021 à 06:01 +0000, Ming Qian a écrit : > > -----Original Message----- > > From: Ming Qian > > Sent: Friday, December 3, 2021 1:43 PM > > To: Nicolas Dufresne ; mchehab@kernel.org; > > shawnguo@kernel.org; robh+dt@kernel.org; s.hauer@pengutronix.de > > Cc: hverkuil-cisco@xs4all.nl; kernel@pengutronix.de; festevam@gmail.com; > > dl-linux-imx ; Aisheng Dong ; > > linux-media@vger.kernel.org; linux-kernel@vger.kernel.org; > > devicetree@vger.kernel.org; linux-arm-kernel@lists.infradead.org > > Subject: RE: [EXT] Re: [PATCH v13 08/13] media: amphion: add v4l2 m2m vpu > > decoder stateful driver > > > > > -----Original Message----- > > > From: Nicolas Dufresne [mailto:nicolas@ndufresne.ca] > > > Sent: Friday, December 3, 2021 12:56 PM > > > To: Ming Qian ; mchehab@kernel.org; > > > shawnguo@kernel.org; robh+dt@kernel.org; s.hauer@pengutronix.de > > > Cc: hverkuil-cisco@xs4all.nl; kernel@pengutronix.de; > > > festevam@gmail.com; dl-linux-imx ; Aisheng Dong > > > ; linux-media@vger.kernel.org; > > > linux-kernel@vger.kernel.org; devicetree@vger.kernel.org; > > > linux-arm-kernel@lists.infradead.org > > > Subject: [EXT] Re: [PATCH v13 08/13] media: amphion: add v4l2 m2m vpu > > > decoder stateful driver > > > > > > Caution: EXT Email > > > > > > Le mardi 30 novembre 2021 à 17:48 +0800, Ming Qian a écrit : > > > > This consists of video decoder implementation plus decoder controls. > > > > > > > > Signed-off-by: Ming Qian > > > > Signed-off-by: Shijie Qin > > > > Signed-off-by: Zhou Peng > > > > --- > > > >  drivers/media/platform/amphion/vdec.c | 1680 > > > +++++++++++++++++++++++++ > > > > > > > > + > > > > +static void vdec_init_fmt(struct vpu_inst *inst) { > > > > + struct vdec_t *vdec = inst->priv; > > > > + const struct vpu_format *fmt; > > > > + int i; > > > > + > > > > + fmt = vpu_helper_find_format(inst, inst->cap_format.type, > > > vdec->codec_info.pixfmt); > > > > + inst->out_format.width = vdec->codec_info.width; > > > > + inst->out_format.height = vdec->codec_info.height; > > > > + inst->cap_format.width = vdec->codec_info.decoded_width; > > > > + inst->cap_format.height = vdec->codec_info.decoded_height; > > > > + inst->cap_format.pixfmt = vdec->codec_info.pixfmt; > > > > + if (fmt) { > > > > + inst->cap_format.num_planes = fmt->num_planes; > > > > + inst->cap_format.flags = fmt->flags; > > > > + } > > > > + for (i = 0; i < inst->cap_format.num_planes; i++) { > > > > + inst->cap_format.bytesperline[i] = > > > vdec->codec_info.bytesperline[i]; > > > > + inst->cap_format.sizeimage[i] = > > > vdec->codec_info.sizeimage[i]; > > > > + } > > > > + if (vdec->codec_info.progressive) > > > > + inst->cap_format.field = V4L2_FIELD_NONE; > > > > + else > > > > + inst->cap_format.field = V4L2_FIELD_INTERLACED; > > > > > > As a followup, this should be conditional to the chosen pixel format. > > > If I understood correct, you produce interlaced is only produce for > > > linear NV12, for tiled the fields are outputed seperated in their > > > respective v4l2_buffer. Note sure where yet, but the V4L2 spec > > > requires you to pair the fields by using the same seq_num on both. > > > > The amphion vpu will store the two fields into one v4l2_buf, So I'll change > > V4L2_FIELD_INTERLACED to V4L2_FIELD_SEQ_TB > > > > Hi Nicolas, >     Seems gstreamer doesn't support V4L2_FIELD_SEQ_TB yet. > >   switch (fmt.fmt.pix.field) { >     case V4L2_FIELD_ANY: >     case V4L2_FIELD_NONE: >       interlace_mode = GST_VIDEO_INTERLACE_MODE_PROGRESSIVE; >       break; >     case V4L2_FIELD_INTERLACED: >     case V4L2_FIELD_INTERLACED_TB: >     case V4L2_FIELD_INTERLACED_BT: >       interlace_mode = GST_VIDEO_INTERLACE_MODE_INTERLEAVED; >       break; >     case V4L2_FIELD_ALTERNATE: >       interlace_mode = GST_VIDEO_INTERLACE_MODE_ALTERNATE; >       break; >     default: >       goto unsupported_field; >   } This is correct, I had never had the chance to implement it. So far I only know IMX6 camera pipeline producing that, but rarely used in practice. What matters here is that your driver does report the right information so that userspace don't get fooled into thinking it's interleaved. > > > > > > > > + if (vdec->codec_info.color_primaries == > > V4L2_COLORSPACE_DEFAULT) > > > > + vdec->codec_info.color_primaries = > > > V4L2_COLORSPACE_REC709; > > > > + if (vdec->codec_info.transfer_chars == V4L2_XFER_FUNC_DEFAULT) > > > > + vdec->codec_info.transfer_chars = V4L2_XFER_FUNC_709; > > > > + if (vdec->codec_info.matrix_coeffs == V4L2_YCBCR_ENC_DEFAULT) > > > > + vdec->codec_info.matrix_coeffs = V4L2_YCBCR_ENC_709; > > > > + if (vdec->codec_info.full_range == V4L2_QUANTIZATION_DEFAULT) > > > > + vdec->codec_info.full_range = > > > V4L2_QUANTIZATION_LIM_RANGE; > > > > +} > > > > + 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 9B3C6C433F5 for ; Fri, 3 Dec 2021 15:21:46 +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: Date:Cc:To:From:Subject:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=KiQK1ioHZnq9q6WFpLJvfBGcZde3Zw25xpzyPhwMBkk=; b=Oki4IXGDmN+IZN FoPF6gnnkJ6wTFWJsQb4Y5Z8oyl+ZDHGYKkgwtwFjx1L0oySF4xP0THUGJl0aD+5jssHKQyWKXnv2 T4m6pj1PvBnNjwlGS5eCy4lwm+chTnm/70UJXvkumInA+1qMhJ6muFHB+Z2a/OoAcLTCzJ7ztxpyO VmpL0kUZFROHEi+HMCNtUahh0VfCNNpJ+ZGlgVbR7QY/JDg8ff4DKpmBQBCaYffO5eLT1Qhs8jNzq X0IId+TL/sbXxKeATAOikaEzoP3xUFyS1ctuIZlYd+Ld9BRJXbWwrGLQRpx2wn5RBwzjjl1IyywXy UYd1iiIuKVDgumaLDlKg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mtALO-00GLpJ-AR; Fri, 03 Dec 2021 15:19:27 +0000 Received: from mail-qt1-x829.google.com ([2607:f8b0:4864:20::829]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mtACD-00GJdU-6y for linux-arm-kernel@lists.infradead.org; Fri, 03 Dec 2021 15:09:58 +0000 Received: by mail-qt1-x829.google.com with SMTP id 8so3546377qtx.5 for ; Fri, 03 Dec 2021 07:09:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ndufresne-ca.20210112.gappssmtp.com; s=20210112; h=message-id:subject:from:to:cc:date:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=5VMkJHZbpjViTRA6Jhw7uB7mIcmNarQHy6QHizi1178=; b=71sGRR2nzOUu+vhocYFVTNVjY6/WqTrpjHHbfXEKt3elniexjPfWxOLr032mBBN+9Y Tw220SxKekKZsp8S/8e/xLS0Hnu6R5ruFD5wh6hN/9mO4ndz4eE7tHjJxeqQWDJNLqrq qfwGlUWt/qpUhoICghex1ctpDy+V5nUt/7Jh5j9M24TsTVjQOgeBpuc3+x3PNRQRmUZc zgAKIocNjvp9XXJRBoWZ3FkdzPnXuIDPL24wz+TmN3YYOYBxPgIVZsut/g6DIsjuL2Gt wSJaQt3bzU4ZgUkvsY6hg+Qq46O2COoQNWpTGqQeLJ24WsmNHOTnIDAckM1UfrhQqwhG F4tQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:subject:from:to:cc:date:in-reply-to :references:user-agent:mime-version:content-transfer-encoding; bh=5VMkJHZbpjViTRA6Jhw7uB7mIcmNarQHy6QHizi1178=; b=4LX9w5RWlRI7k0b9BMygqJph1l3/SyrsPjBgEzfgFE9R4Y8huOkXNiZfBBIKSb/Wf1 i96TmvXYtWFr82EJKqdTLKU80lC9ATHJl7QbqHl4Ta8C3zUsFK54SZpXLv0W70o5qGH7 hwniKB5be8NlrDSOOgTrHM8qkpQrJdDznEnwMDMFv22qLTdQSSwiQC10NQAFdXBfKL0L Se8GCJshSzwECVXuxwyRwDEmEXYNYmryJAZ8t0vr43ttnnK4b26iInQ4eszuaBD2/vo6 HHzxPpuYC//d/euEGgVRpnr5Ctx2fnV2cYqA5Gf47Zcd0MRwd+u3DS783Y0B9+SWupAN 2aAg== X-Gm-Message-State: AOAM5308G6eXncOoiPBD8YyTvi5FRr8CVUIIDYNpNUfWicDsYTnRELIW Bo9QTwgd19VlkSSSI+4QOs5/dg== X-Google-Smtp-Source: ABdhPJy61ZibMg8ILoK2AEsliArYVxsRd68TcRbdLO8nY0DiJ6C4K2+uM90k9CMi4r2w2KTjYsUWmg== X-Received: by 2002:ac8:598c:: with SMTP id e12mr21240483qte.337.1638544195661; Fri, 03 Dec 2021 07:09:55 -0800 (PST) Received: from nicolas-tpx395.localdomain (173-246-12-168.qc.cable.ebox.net. [173.246.12.168]) by smtp.gmail.com with ESMTPSA id u10sm2307205qkp.104.2021.12.03.07.09.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Dec 2021 07:09:55 -0800 (PST) Message-ID: <7e63c1665c96feccadd9c05dc603349b3a93900d.camel@ndufresne.ca> Subject: Re: [EXT] Re: [PATCH v13 08/13] media: amphion: add v4l2 m2m vpu decoder stateful driver From: Nicolas Dufresne To: Ming Qian , "mchehab@kernel.org" , "shawnguo@kernel.org" , "robh+dt@kernel.org" , "s.hauer@pengutronix.de" Cc: "hverkuil-cisco@xs4all.nl" , "kernel@pengutronix.de" , "festevam@gmail.com" , dl-linux-imx , Aisheng Dong , "linux-media@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "devicetree@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" Date: Fri, 03 Dec 2021 10:09:53 -0500 In-Reply-To: References: <9122e66af668c095548321d45dec33a3fd6ee77d.1638263914.git.ming.qian@nxp.com> User-Agent: Evolution 3.42.1 (3.42.1-1.fc35) MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211203_070957_315412_0E6804A7 X-CRM114-Status: GOOD ( 23.14 ) 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 TGUgdmVuZHJlZGkgMDMgZMOpY2VtYnJlIDIwMjEgw6AgMDY6MDEgKzAwMDAsIE1pbmcgUWlhbiBh IMOpY3JpdMKgOgo+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0KPiA+IEZyb206IE1pbmcg UWlhbgo+ID4gU2VudDogRnJpZGF5LCBEZWNlbWJlciAzLCAyMDIxIDE6NDMgUE0KPiA+IFRvOiBO aWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzQG5kdWZyZXNuZS5jYT47IG1jaGVoYWJAa2VybmVsLm9y ZzsKPiA+IHNoYXduZ3VvQGtlcm5lbC5vcmc7IHJvYmgrZHRAa2VybmVsLm9yZzsgcy5oYXVlckBw ZW5ndXRyb25peC5kZQo+ID4gQ2M6IGh2ZXJrdWlsLWNpc2NvQHhzNGFsbC5ubDsga2VybmVsQHBl bmd1dHJvbml4LmRlOyBmZXN0ZXZhbUBnbWFpbC5jb207Cj4gPiBkbC1saW51eC1pbXggPGxpbnV4 LWlteEBueHAuY29tPjsgQWlzaGVuZyBEb25nIDxhaXNoZW5nLmRvbmdAbnhwLmNvbT47Cj4gPiBs aW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7 Cj4gPiBkZXZpY2V0cmVlQHZnZXIua2VybmVsLm9yZzsgbGludXgtYXJtLWtlcm5lbEBsaXN0cy5p bmZyYWRlYWQub3JnCj4gPiBTdWJqZWN0OiBSRTogW0VYVF0gUmU6IFtQQVRDSCB2MTMgMDgvMTNd IG1lZGlhOiBhbXBoaW9uOiBhZGQgdjRsMiBtMm0gdnB1Cj4gPiBkZWNvZGVyIHN0YXRlZnVsIGRy aXZlcgo+ID4gCj4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tCj4gPiA+IEZyb206IE5p Y29sYXMgRHVmcmVzbmUgW21haWx0bzpuaWNvbGFzQG5kdWZyZXNuZS5jYV0KPiA+ID4gU2VudDog RnJpZGF5LCBEZWNlbWJlciAzLCAyMDIxIDEyOjU2IFBNCj4gPiA+IFRvOiBNaW5nIFFpYW4gPG1p bmcucWlhbkBueHAuY29tPjsgbWNoZWhhYkBrZXJuZWwub3JnOwo+ID4gPiBzaGF3bmd1b0BrZXJu ZWwub3JnOyByb2JoK2R0QGtlcm5lbC5vcmc7IHMuaGF1ZXJAcGVuZ3V0cm9uaXguZGUKPiA+ID4g Q2M6IGh2ZXJrdWlsLWNpc2NvQHhzNGFsbC5ubDsga2VybmVsQHBlbmd1dHJvbml4LmRlOwo+ID4g PiBmZXN0ZXZhbUBnbWFpbC5jb207IGRsLWxpbnV4LWlteCA8bGludXgtaW14QG54cC5jb20+OyBB aXNoZW5nIERvbmcKPiA+ID4gPGFpc2hlbmcuZG9uZ0BueHAuY29tPjsgbGludXgtbWVkaWFAdmdl ci5rZXJuZWwub3JnOwo+ID4gPiBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnOyBkZXZpY2V0 cmVlQHZnZXIua2VybmVsLm9yZzsKPiA+ID4gbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRl YWQub3JnCj4gPiA+IFN1YmplY3Q6IFtFWFRdIFJlOiBbUEFUQ0ggdjEzIDA4LzEzXSBtZWRpYTog YW1waGlvbjogYWRkIHY0bDIgbTJtIHZwdQo+ID4gPiBkZWNvZGVyIHN0YXRlZnVsIGRyaXZlcgo+ ID4gPiAKPiA+ID4gQ2F1dGlvbjogRVhUIEVtYWlsCj4gPiA+IAo+ID4gPiBMZSBtYXJkaSAzMCBu b3ZlbWJyZSAyMDIxIMOgIDE3OjQ4ICswODAwLCBNaW5nIFFpYW4gYSDDqWNyaXQgOgo+ID4gPiA+ IFRoaXMgY29uc2lzdHMgb2YgdmlkZW8gZGVjb2RlciBpbXBsZW1lbnRhdGlvbiBwbHVzIGRlY29k ZXIgY29udHJvbHMuCj4gPiA+ID4gCj4gPiA+ID4gU2lnbmVkLW9mZi1ieTogTWluZyBRaWFuIDxt aW5nLnFpYW5AbnhwLmNvbT4KPiA+ID4gPiBTaWduZWQtb2ZmLWJ5OiBTaGlqaWUgUWluIDxzaGlq aWUucWluQG54cC5jb20+Cj4gPiA+ID4gU2lnbmVkLW9mZi1ieTogWmhvdSBQZW5nIDxlYWdsZS56 aG91QG54cC5jb20+Cj4gPiA+ID4gLS0tCj4gPiA+ID4gwqBkcml2ZXJzL21lZGlhL3BsYXRmb3Jt L2FtcGhpb24vdmRlYy5jIHwgMTY4MAo+ID4gPiArKysrKysrKysrKysrKysrKysrKysrKysrCj4g PiAKPiA+IAo+ID4gPiA+ICsKPiA+ID4gPiArc3RhdGljIHZvaWQgdmRlY19pbml0X2ZtdChzdHJ1 Y3QgdnB1X2luc3QgKmluc3QpIHsKPiA+ID4gPiArICAgICBzdHJ1Y3QgdmRlY190ICp2ZGVjID0g aW5zdC0+cHJpdjsKPiA+ID4gPiArICAgICBjb25zdCBzdHJ1Y3QgdnB1X2Zvcm1hdCAqZm10Owo+ ID4gPiA+ICsgICAgIGludCBpOwo+ID4gPiA+ICsKPiA+ID4gPiArICAgICBmbXQgPSB2cHVfaGVs cGVyX2ZpbmRfZm9ybWF0KGluc3QsIGluc3QtPmNhcF9mb3JtYXQudHlwZSwKPiA+ID4gdmRlYy0+ Y29kZWNfaW5mby5waXhmbXQpOwo+ID4gPiA+ICsgICAgIGluc3QtPm91dF9mb3JtYXQud2lkdGgg PSB2ZGVjLT5jb2RlY19pbmZvLndpZHRoOwo+ID4gPiA+ICsgICAgIGluc3QtPm91dF9mb3JtYXQu aGVpZ2h0ID0gdmRlYy0+Y29kZWNfaW5mby5oZWlnaHQ7Cj4gPiA+ID4gKyAgICAgaW5zdC0+Y2Fw X2Zvcm1hdC53aWR0aCA9IHZkZWMtPmNvZGVjX2luZm8uZGVjb2RlZF93aWR0aDsKPiA+ID4gPiAr ICAgICBpbnN0LT5jYXBfZm9ybWF0LmhlaWdodCA9IHZkZWMtPmNvZGVjX2luZm8uZGVjb2RlZF9o ZWlnaHQ7Cj4gPiA+ID4gKyAgICAgaW5zdC0+Y2FwX2Zvcm1hdC5waXhmbXQgPSB2ZGVjLT5jb2Rl Y19pbmZvLnBpeGZtdDsKPiA+ID4gPiArICAgICBpZiAoZm10KSB7Cj4gPiA+ID4gKyAgICAgICAg ICAgICBpbnN0LT5jYXBfZm9ybWF0Lm51bV9wbGFuZXMgPSBmbXQtPm51bV9wbGFuZXM7Cj4gPiA+ ID4gKyAgICAgICAgICAgICBpbnN0LT5jYXBfZm9ybWF0LmZsYWdzID0gZm10LT5mbGFnczsKPiA+ ID4gPiArICAgICB9Cj4gPiA+ID4gKyAgICAgZm9yIChpID0gMDsgaSA8IGluc3QtPmNhcF9mb3Jt YXQubnVtX3BsYW5lczsgaSsrKSB7Cj4gPiA+ID4gKyAgICAgICAgICAgICBpbnN0LT5jYXBfZm9y bWF0LmJ5dGVzcGVybGluZVtpXSA9Cj4gPiA+IHZkZWMtPmNvZGVjX2luZm8uYnl0ZXNwZXJsaW5l W2ldOwo+ID4gPiA+ICsgICAgICAgICAgICAgaW5zdC0+Y2FwX2Zvcm1hdC5zaXplaW1hZ2VbaV0g PQo+ID4gPiB2ZGVjLT5jb2RlY19pbmZvLnNpemVpbWFnZVtpXTsKPiA+ID4gPiArICAgICB9Cj4g PiA+ID4gKyAgICAgaWYgKHZkZWMtPmNvZGVjX2luZm8ucHJvZ3Jlc3NpdmUpCj4gPiA+ID4gKyAg ICAgICAgICAgICBpbnN0LT5jYXBfZm9ybWF0LmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOwo+ID4g PiA+ICsgICAgIGVsc2UKPiA+ID4gPiArICAgICAgICAgICAgIGluc3QtPmNhcF9mb3JtYXQuZmll bGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7Cj4gPiA+IAo+ID4gPiBBcyBhIGZvbGxvd3VwLCB0 aGlzIHNob3VsZCBiZSBjb25kaXRpb25hbCB0byB0aGUgY2hvc2VuIHBpeGVsIGZvcm1hdC4KPiA+ ID4gSWYgSSB1bmRlcnN0b29kIGNvcnJlY3QsIHlvdSBwcm9kdWNlIGludGVybGFjZWQgaXMgb25s eSBwcm9kdWNlIGZvcgo+ID4gPiBsaW5lYXIgTlYxMiwgZm9yIHRpbGVkIHRoZSBmaWVsZHMgYXJl IG91dHB1dGVkIHNlcGVyYXRlZCBpbiB0aGVpcgo+ID4gPiByZXNwZWN0aXZlIHY0bDJfYnVmZmVy LiBOb3RlIHN1cmUgd2hlcmUgeWV0LCBidXQgdGhlIFY0TDIgc3BlYwo+ID4gPiByZXF1aXJlcyB5 b3UgdG8gcGFpciB0aGUgZmllbGRzIGJ5IHVzaW5nIHRoZSBzYW1lIHNlcV9udW0gb24gYm90aC4K PiA+IAo+ID4gVGhlIGFtcGhpb24gdnB1IHdpbGwgc3RvcmUgdGhlIHR3byBmaWVsZHMgaW50byBv bmUgdjRsMl9idWYsIFNvIEknbGwgY2hhbmdlCj4gPiBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQgdG8g VjRMMl9GSUVMRF9TRVFfVEIKPiA+IAo+IAo+IEhpIE5pY29sYXMsCj4gwqDCoMKgwqBTZWVtcyBn c3RyZWFtZXIgZG9lc24ndCBzdXBwb3J0IFY0TDJfRklFTERfU0VRX1RCIHlldC4KPiAKPiDCoMKg c3dpdGNoIChmbXQuZm10LnBpeC5maWVsZCkgewo+IMKgwqDCoMKgY2FzZSBWNEwyX0ZJRUxEX0FO WToKPiDCoMKgwqDCoGNhc2UgVjRMMl9GSUVMRF9OT05FOgo+IMKgwqDCoMKgwqDCoGludGVybGFj ZV9tb2RlID0gR1NUX1ZJREVPX0lOVEVSTEFDRV9NT0RFX1BST0dSRVNTSVZFOwo+IMKgwqDCoMKg wqDCoGJyZWFrOwo+IMKgwqDCoMKgY2FzZSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ6Cj4gwqDCoMKg wqBjYXNlIFY0TDJfRklFTERfSU5URVJMQUNFRF9UQjoKPiDCoMKgwqDCoGNhc2UgVjRMMl9GSUVM RF9JTlRFUkxBQ0VEX0JUOgo+IMKgwqDCoMKgwqDCoGludGVybGFjZV9tb2RlID0gR1NUX1ZJREVP X0lOVEVSTEFDRV9NT0RFX0lOVEVSTEVBVkVEOwo+IMKgwqDCoMKgwqDCoGJyZWFrOwo+IMKgwqDC oMKgY2FzZSBWNEwyX0ZJRUxEX0FMVEVSTkFURToKPiDCoMKgwqDCoMKgwqBpbnRlcmxhY2VfbW9k ZSA9IEdTVF9WSURFT19JTlRFUkxBQ0VfTU9ERV9BTFRFUk5BVEU7Cj4gwqDCoMKgwqDCoMKgYnJl YWs7Cj4gwqDCoMKgwqBkZWZhdWx0Ogo+IMKgwqDCoMKgwqDCoGdvdG8gdW5zdXBwb3J0ZWRfZmll bGQ7Cj4gwqDCoH0KClRoaXMgaXMgY29ycmVjdCwgSSBoYWQgbmV2ZXIgaGFkIHRoZSBjaGFuY2Ug dG8gaW1wbGVtZW50IGl0LiBTbyBmYXIgSSBvbmx5IGtub3cKSU1YNiBjYW1lcmEgcGlwZWxpbmUg cHJvZHVjaW5nIHRoYXQsIGJ1dCByYXJlbHkgdXNlZCBpbiBwcmFjdGljZS4gV2hhdCBtYXR0ZXJz CmhlcmUgaXMgdGhhdCB5b3VyIGRyaXZlciBkb2VzIHJlcG9ydCB0aGUgcmlnaHQgaW5mb3JtYXRp b24gc28gdGhhdCB1c2Vyc3BhY2UKZG9uJ3QgZ2V0IGZvb2xlZCBpbnRvIHRoaW5raW5nIGl0J3Mg aW50ZXJsZWF2ZWQuCgo+IAo+ID4gPiAKPiA+ID4gPiArICAgICBpZiAodmRlYy0+Y29kZWNfaW5m by5jb2xvcl9wcmltYXJpZXMgPT0KPiA+IFY0TDJfQ09MT1JTUEFDRV9ERUZBVUxUKQo+ID4gPiA+ ICsgICAgICAgICAgICAgdmRlYy0+Y29kZWNfaW5mby5jb2xvcl9wcmltYXJpZXMgPQo+ID4gPiBW NEwyX0NPTE9SU1BBQ0VfUkVDNzA5Owo+ID4gPiA+ICsgICAgIGlmICh2ZGVjLT5jb2RlY19pbmZv LnRyYW5zZmVyX2NoYXJzID09IFY0TDJfWEZFUl9GVU5DX0RFRkFVTFQpCj4gPiA+ID4gKyAgICAg ICAgICAgICB2ZGVjLT5jb2RlY19pbmZvLnRyYW5zZmVyX2NoYXJzID0gVjRMMl9YRkVSX0ZVTkNf NzA5Owo+ID4gPiA+ICsgICAgIGlmICh2ZGVjLT5jb2RlY19pbmZvLm1hdHJpeF9jb2VmZnMgPT0g VjRMMl9ZQ0JDUl9FTkNfREVGQVVMVCkKPiA+ID4gPiArICAgICAgICAgICAgIHZkZWMtPmNvZGVj X2luZm8ubWF0cml4X2NvZWZmcyA9IFY0TDJfWUNCQ1JfRU5DXzcwOTsKPiA+ID4gPiArICAgICBp ZiAodmRlYy0+Y29kZWNfaW5mby5mdWxsX3JhbmdlID09IFY0TDJfUVVBTlRJWkFUSU9OX0RFRkFV TFQpCj4gPiA+ID4gKyAgICAgICAgICAgICB2ZGVjLT5jb2RlY19pbmZvLmZ1bGxfcmFuZ2UgPQo+ ID4gPiBWNEwyX1FVQU5USVpBVElPTl9MSU1fUkFOR0U7Cj4gPiA+ID4gK30KPiA+ID4gPiArCgoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJt LWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3Jn Cmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtl cm5lbAo=