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 X-Spam-Level: X-Spam-Status: No, score=-5.4 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6E6F7C5DF60 for ; Fri, 8 Nov 2019 16:01:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 373D32178F for ; Fri, 8 Nov 2019 16:01:33 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="a3CdBefI" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726095AbfKHQBc (ORCPT ); Fri, 8 Nov 2019 11:01:32 -0500 Received: from perceval.ideasonboard.com ([213.167.242.64]:49570 "EHLO perceval.ideasonboard.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726036AbfKHQBc (ORCPT ); Fri, 8 Nov 2019 11:01:32 -0500 Received: from pendragon.ideasonboard.com (81-175-216-236.bb.dnainternet.fi [81.175.216.236]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 125B72D1; Fri, 8 Nov 2019 17:01:29 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1573228890; bh=nGpv04blxG3NVGRP7wEDeJ0sVvbAIrjW5vJ1nhtphnE=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=a3CdBefIyKG7GtGY30Odj/qWmJKye0lL/OYwIhlKXXCyGHNjOlNDYIRSqCCtwVgir YEV09jIB53LlRGaoaTtmmMwEqlYTbBZPdYBq9jm46w/diJiH2thnQm1kv/j9iWflaA HsmEySe4zHSiji07cXoFy742s7blrBFATqVpHZRQ= Date: Fri, 8 Nov 2019 18:01:20 +0200 From: Laurent Pinchart To: Rob Herring Cc: dri-devel , Michal Simek , Hyun Kwon , Satish Kumar Nagireddy , devicetree@vger.kernel.org Subject: Re: [PATCH v9 1/4] dt-bindings: display: xlnx: Add ZynqMP DP subsystem bindings Message-ID: <20191108160120.GC15731@pendragon.ideasonboard.com> References: <20190925235544.11524-1-laurent.pinchart@ideasonboard.com> <20190925235544.11524-2-laurent.pinchart@ideasonboard.com> <20190926142318.GB16469@pendragon.ideasonboard.com> <20191108140733.GJ4866@pendragon.ideasonboard.com> <20191108141040.GK4866@pendragon.ideasonboard.com> <20191108143155.GA15731@pendragon.ideasonboard.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.10.1 (2018-07-13) Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org Hi Rob, On Fri, Nov 08, 2019 at 09:57:55AM -0600, Rob Herring wrote: > On Fri, Nov 8, 2019 at 8:32 AM Laurent Pinchart wrote: > > On Fri, Nov 08, 2019 at 04:10:40PM +0200, Laurent Pinchart wrote: > > > On Fri, Nov 08, 2019 at 04:07:33PM +0200, Laurent Pinchart wrote: > > > > On Thu, Sep 26, 2019 at 09:57:29AM -0500, Rob Herring wrote: > > > > > On Thu, Sep 26, 2019 at 9:23 AM Laurent Pinchart wrote: > > > > >> On Thu, Sep 26, 2019 at 09:15:01AM -0500, Rob Herring wrote: > > > > >>> On Wed, Sep 25, 2019 at 6:56 PM Laurent Pinchart wrote: > > > > >>>> > > > > >>>> From: Hyun Kwon > > > > >>>> > > > > >>>> The bindings describe the ZynqMP DP subsystem. They don't support the > > > > >>>> interface with the programmable logic (FPGA) or audio yet. > > > > >>>> > > > > >>>> Signed-off-by: Hyun Kwon > > > > >>>> Signed-off-by: Laurent Pinchart > > > > >>>> --- > > > > >>>> Changes since v8: > > > > >>>> > > > > >>>> - Convert to yaml > > > > >>>> - Rename aclk to dp_apb_clk > > > > >>> > > > > >>> /builds/robherring/linux-dt-review/Documentation/devicetree/bindings/display/xlnx/xlnx,zynqmp-dpsub.example.dt.yaml: > > > > >>> display@fd4a0000: clock-names:2: 'dp_vtc_pixel_clk_in' was expected > > > > >> > > > > >> If you allow me to steal a bit of your brain time, could you help me > > > > >> expressing the clocks constraint ? > > > > >> > > > > >> clocks: > > > > >> description: > > > > >> The AXI clock and at least one video clock are mandatory, the audio clock > > > > >> optional. > > > > >> minItems: 2 > > > > >> maxItems: 4 > > > > >> items: > > > > >> - description: AXI clock > > > > >> - description: Audio clock > > > > >> - description: Non-live video clock (from Processing System) > > > > >> - description: Live video clock (from Programmable Logic) > > > > >> clock-names: > > > > >> minItems: 2 > > > > >> maxItems: 4 > > > > >> items: > > > > >> - const: dp_apb_clk > > > > >> - const: dp_aud_clk > > > > >> - const: dp_vtc_pixel_clk_in > > > > >> - const: dp_live_video_in_clk > > > > >> > > > > >> dp_apb_clk is required, dp_aud_clk is optional, and at least one of > > > > >> dp_vtc_pixel_clk_in and dp_live_video_in_clk is required. > > > > > > > > > > I'm hoping people's inability to express the schema will prevent > > > > > complicated ones like this in the first place... > > > > > > > > > > clock-names: > > > > > oneOf: > > > > > - minItems: 3 > > > > > maxItems: 4 > > > > > items: > > > > > - const: dp_apb_clk > > > > > - const: dp_aud_clk > > > > > - enum: [ dp_vtc_pixel_clk_in, dp_live_video_in_clk ] > > > > > - enum: [ dp_vtc_pixel_clk_in, dp_live_video_in_clk ] > > > > > - minItems: 2 > > > > > maxItems: 3 > > > > > items: > > > > > - const: dp_apb_clk > > > > > - enum: [ dp_vtc_pixel_clk_in, dp_live_video_in_clk ] > > > > > - enum: [ dp_vtc_pixel_clk_in, dp_live_video_in_clk ] > > > > > > > > The above would make > > > > > > > > clock-names = "dp_apb_clk", "dp_vtc_pixel_clk_in", "dp_vtc_pixel_clk_in"; > > > > > > > > valid. I've investigated a little bit and found uniqueItems which solves > > > > my issue. > > It wouldn't because uniqueItems is the default (not for json-schema, > but DT schema string-arrays). > > > > > Would the following simpler solution be acceptable ? > > > > > > > > clock-names: > > > > minItems: 2 > > > > maxItems: 4 > > > > items: > > > > - const: dp_apb_clk > > > > - enum: [ dp_vtc_pixel_clk_in, dp_live_video_in_clk ] > > > > - const: dp_aud_clk > > > > - enum: [ dp_vtc_pixel_clk_in, dp_live_video_in_clk ] > > > > uniqueItems: true > > > > > > To give more context, > > > > > > clocks: > > > description: > > > The AXI clock and at least one video clock are mandatory, the audio clock > > > is optional. > > > minItems: 2 > > > maxItems: 4 > > > items: > > > - description: dp_apb_clk is the AXI clock > > > - description: dp_aud_clk is the Audio clock > > > - description: > > > dp_vtc_pixel_clk_in is the non-live video clock (from Processing > > > System) > > > - description: > > > dp_live_video_in_clk is the live video clock (from Programmable > > > Logic) > > > clock-names: > > > minItems: 2 > > > maxItems: 4 > > > items: > > > - const: dp_apb_clk > > > - enum: [ dp_vtc_pixel_clk_in, dp_live_video_in_clk ] > > > - const: dp_aud_clk > > > - enum: [ dp_vtc_pixel_clk_in, dp_live_video_in_clk ] > > > uniqueItems: true > > 'clock' and 'clock-names' don't match. dp_aud_clk is in the wrong spot. You're right, and after thinking twice about it, this won't allow clock-names = "dp_apb_clk", "dp_vtc_pixel_clk_in", "dp_live_video_in_clk"; so your solution is the only one that will work. > > > > There's something going on that I can't really understand... > > > > clock-names: > > minItems: 2 > > maxItems: 4 > > items: > > - const: dp_apb_clk > > - enum: [ dp_vtc_pixel_clk_in, dp_live_video_in_clk ] > > - const: dp_aud_clk > > - enum: [ dp_vtc_pixel_clk_in, dp_live_video_in_clk ] > > uniqueItems: true > > > > results in dt_mk_schema complaining about an invalid schema. However, > > the following works: > > Because 'uniqueItems' is not allowed because it's not needed. Error messages could be improved :-) > > clock-names: > > oneOf: > > - minItems: 2 > > maxItems: 4 > > items: > > - const: dp_apb_clk > > - enum: [ dp_vtc_pixel_clk_in, dp_live_video_in_clk ] > > - const: dp_aud_clk > > - enum: [ dp_vtc_pixel_clk_in, dp_live_video_in_clk ] > > uniqueItems: true > > > > I assume this is due to clock-names being a string-array, which already > > contains uniqueItems. However, if I leave uniqueItems out, an example > > with a duplicated clock-names validates fine. > > Are you using 'DT_SCHEMA_FILES' as that leaves out all the core schema? Ah, that's probably why ! Thank you. > BTW, this case is probably allowed because we fail to apply the same > meta-schemas for schema behind the oneOf. -- Regards, Laurent Pinchart From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: Re: [PATCH v9 1/4] dt-bindings: display: xlnx: Add ZynqMP DP subsystem bindings Date: Fri, 8 Nov 2019 18:01:20 +0200 Message-ID: <20191108160120.GC15731@pendragon.ideasonboard.com> References: <20190925235544.11524-1-laurent.pinchart@ideasonboard.com> <20190925235544.11524-2-laurent.pinchart@ideasonboard.com> <20190926142318.GB16469@pendragon.ideasonboard.com> <20191108140733.GJ4866@pendragon.ideasonboard.com> <20191108141040.GK4866@pendragon.ideasonboard.com> <20191108143155.GA15731@pendragon.ideasonboard.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by gabe.freedesktop.org (Postfix) with ESMTPS id EE00D6F9DF for ; Fri, 8 Nov 2019 16:01:31 +0000 (UTC) Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Rob Herring Cc: devicetree@vger.kernel.org, Hyun Kwon , Michal Simek , dri-devel , Satish Kumar Nagireddy List-Id: dri-devel@lists.freedesktop.org SGkgUm9iLAoKT24gRnJpLCBOb3YgMDgsIDIwMTkgYXQgMDk6NTc6NTVBTSAtMDYwMCwgUm9iIEhl cnJpbmcgd3JvdGU6Cj4gT24gRnJpLCBOb3YgOCwgMjAxOSBhdCA4OjMyIEFNIExhdXJlbnQgUGlu Y2hhcnQgd3JvdGU6Cj4gPiBPbiBGcmksIE5vdiAwOCwgMjAxOSBhdCAwNDoxMDo0MFBNICswMjAw LCBMYXVyZW50IFBpbmNoYXJ0IHdyb3RlOgo+ID4gPiBPbiBGcmksIE5vdiAwOCwgMjAxOSBhdCAw NDowNzozM1BNICswMjAwLCBMYXVyZW50IFBpbmNoYXJ0IHdyb3RlOgo+ID4gPiA+IE9uIFRodSwg U2VwIDI2LCAyMDE5IGF0IDA5OjU3OjI5QU0gLTA1MDAsIFJvYiBIZXJyaW5nIHdyb3RlOgo+ID4g PiA+ID4gT24gVGh1LCBTZXAgMjYsIDIwMTkgYXQgOToyMyBBTSBMYXVyZW50IFBpbmNoYXJ0IHdy b3RlOgo+ID4gPiA+ID4+IE9uIFRodSwgU2VwIDI2LCAyMDE5IGF0IDA5OjE1OjAxQU0gLTA1MDAs IFJvYiBIZXJyaW5nIHdyb3RlOgo+ID4gPiA+ID4+PiBPbiBXZWQsIFNlcCAyNSwgMjAxOSBhdCA2 OjU2IFBNIExhdXJlbnQgUGluY2hhcnQgd3JvdGU6Cj4gPiA+ID4gPj4+Pgo+ID4gPiA+ID4+Pj4g RnJvbTogSHl1biBLd29uIDxoeXVuLmt3b25AeGlsaW54LmNvbT4KPiA+ID4gPiA+Pj4+Cj4gPiA+ ID4gPj4+PiBUaGUgYmluZGluZ3MgZGVzY3JpYmUgdGhlIFp5bnFNUCBEUCBzdWJzeXN0ZW0uIFRo ZXkgZG9uJ3Qgc3VwcG9ydCB0aGUKPiA+ID4gPiA+Pj4+IGludGVyZmFjZSB3aXRoIHRoZSBwcm9n cmFtbWFibGUgbG9naWMgKEZQR0EpIG9yIGF1ZGlvIHlldC4KPiA+ID4gPiA+Pj4+Cj4gPiA+ID4g Pj4+PiBTaWduZWQtb2ZmLWJ5OiBIeXVuIEt3b24gPGh5dW4ua3dvbkB4aWxpbnguY29tPgo+ID4g PiA+ID4+Pj4gU2lnbmVkLW9mZi1ieTogTGF1cmVudCBQaW5jaGFydCA8bGF1cmVudC5waW5jaGFy dEBpZGVhc29uYm9hcmQuY29tPgo+ID4gPiA+ID4+Pj4gLS0tCj4gPiA+ID4gPj4+PiBDaGFuZ2Vz IHNpbmNlIHY4Ogo+ID4gPiA+ID4+Pj4KPiA+ID4gPiA+Pj4+IC0gQ29udmVydCB0byB5YW1sCj4g PiA+ID4gPj4+PiAtIFJlbmFtZSBhY2xrIHRvIGRwX2FwYl9jbGsKPiA+ID4gPiA+Pj4KPiA+ID4g PiA+Pj4gL2J1aWxkcy9yb2JoZXJyaW5nL2xpbnV4LWR0LXJldmlldy9Eb2N1bWVudGF0aW9uL2Rl dmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS94bG54L3hsbngsenlucW1wLWRwc3ViLmV4YW1wbGUu ZHQueWFtbDoKPiA+ID4gPiA+Pj4gZGlzcGxheUBmZDRhMDAwMDogY2xvY2stbmFtZXM6MjogJ2Rw X3Z0Y19waXhlbF9jbGtfaW4nIHdhcyBleHBlY3RlZAo+ID4gPiA+ID4+Cj4gPiA+ID4gPj4gSWYg eW91IGFsbG93IG1lIHRvIHN0ZWFsIGEgYml0IG9mIHlvdXIgYnJhaW4gdGltZSwgY291bGQgeW91 IGhlbHAgbWUKPiA+ID4gPiA+PiBleHByZXNzaW5nIHRoZSBjbG9ja3MgY29uc3RyYWludCA/Cj4g PiA+ID4gPj4KPiA+ID4gPiA+PiAgIGNsb2NrczoKPiA+ID4gPiA+PiAgICAgZGVzY3JpcHRpb246 Cj4gPiA+ID4gPj4gICAgICAgVGhlIEFYSSBjbG9jayBhbmQgYXQgbGVhc3Qgb25lIHZpZGVvIGNs b2NrIGFyZSBtYW5kYXRvcnksIHRoZSBhdWRpbyBjbG9jawo+ID4gPiA+ID4+ICAgICAgIG9wdGlv bmFsLgo+ID4gPiA+ID4+ICAgICBtaW5JdGVtczogMgo+ID4gPiA+ID4+ICAgICBtYXhJdGVtczog NAo+ID4gPiA+ID4+ICAgICBpdGVtczoKPiA+ID4gPiA+PiAgICAgICAtIGRlc2NyaXB0aW9uOiBB WEkgY2xvY2sKPiA+ID4gPiA+PiAgICAgICAtIGRlc2NyaXB0aW9uOiBBdWRpbyBjbG9jawo+ID4g PiA+ID4+ICAgICAgIC0gZGVzY3JpcHRpb246IE5vbi1saXZlIHZpZGVvIGNsb2NrIChmcm9tIFBy b2Nlc3NpbmcgU3lzdGVtKQo+ID4gPiA+ID4+ICAgICAgIC0gZGVzY3JpcHRpb246IExpdmUgdmlk ZW8gY2xvY2sgKGZyb20gUHJvZ3JhbW1hYmxlIExvZ2ljKQo+ID4gPiA+ID4+ICAgY2xvY2stbmFt ZXM6Cj4gPiA+ID4gPj4gICAgIG1pbkl0ZW1zOiAyCj4gPiA+ID4gPj4gICAgIG1heEl0ZW1zOiA0 Cj4gPiA+ID4gPj4gICAgIGl0ZW1zOgo+ID4gPiA+ID4+ICAgICAgIC0gY29uc3Q6IGRwX2FwYl9j bGsKPiA+ID4gPiA+PiAgICAgICAtIGNvbnN0OiBkcF9hdWRfY2xrCj4gPiA+ID4gPj4gICAgICAg LSBjb25zdDogZHBfdnRjX3BpeGVsX2Nsa19pbgo+ID4gPiA+ID4+ICAgICAgIC0gY29uc3Q6IGRw X2xpdmVfdmlkZW9faW5fY2xrCj4gPiA+ID4gPj4KPiA+ID4gPiA+PiBkcF9hcGJfY2xrIGlzIHJl cXVpcmVkLCBkcF9hdWRfY2xrIGlzIG9wdGlvbmFsLCBhbmQgYXQgbGVhc3Qgb25lIG9mCj4gPiA+ ID4gPj4gZHBfdnRjX3BpeGVsX2Nsa19pbiBhbmQgZHBfbGl2ZV92aWRlb19pbl9jbGsgaXMgcmVx dWlyZWQuCj4gPiA+ID4gPgo+ID4gPiA+ID4gSSdtIGhvcGluZyBwZW9wbGUncyBpbmFiaWxpdHkg dG8gZXhwcmVzcyB0aGUgc2NoZW1hIHdpbGwgcHJldmVudAo+ID4gPiA+ID4gY29tcGxpY2F0ZWQg b25lcyBsaWtlIHRoaXMgaW4gdGhlIGZpcnN0IHBsYWNlLi4uCj4gPiA+ID4gPgo+ID4gPiA+ID4g Y2xvY2stbmFtZXM6Cj4gPiA+ID4gPiAgIG9uZU9mOgo+ID4gPiA+ID4gICAgIC0gbWluSXRlbXM6 IDMKPiA+ID4gPiA+ICAgICAgIG1heEl0ZW1zOiA0Cj4gPiA+ID4gPiAgICAgICBpdGVtczoKPiA+ ID4gPiA+ICAgICAgICAgLSBjb25zdDogZHBfYXBiX2Nsawo+ID4gPiA+ID4gICAgICAgICAtIGNv bnN0OiBkcF9hdWRfY2xrCj4gPiA+ID4gPiAgICAgICAgIC0gZW51bTogWyBkcF92dGNfcGl4ZWxf Y2xrX2luLCBkcF9saXZlX3ZpZGVvX2luX2NsayBdCj4gPiA+ID4gPiAgICAgICAgIC0gZW51bTog WyBkcF92dGNfcGl4ZWxfY2xrX2luLCBkcF9saXZlX3ZpZGVvX2luX2NsayBdCj4gPiA+ID4gPiAg ICAgLSBtaW5JdGVtczogMgo+ID4gPiA+ID4gICAgICAgbWF4SXRlbXM6IDMKPiA+ID4gPiA+ICAg ICAgIGl0ZW1zOgo+ID4gPiA+ID4gICAgICAgICAtIGNvbnN0OiBkcF9hcGJfY2xrCj4gPiA+ID4g PiAgICAgICAgIC0gZW51bTogWyBkcF92dGNfcGl4ZWxfY2xrX2luLCBkcF9saXZlX3ZpZGVvX2lu X2NsayBdCj4gPiA+ID4gPiAgICAgICAgIC0gZW51bTogWyBkcF92dGNfcGl4ZWxfY2xrX2luLCBk cF9saXZlX3ZpZGVvX2luX2NsayBdCj4gPiA+ID4KPiA+ID4gPiBUaGUgYWJvdmUgd291bGQgbWFr ZQo+ID4gPiA+Cj4gPiA+ID4gICAgIGNsb2NrLW5hbWVzID0gImRwX2FwYl9jbGsiLCAiZHBfdnRj X3BpeGVsX2Nsa19pbiIsICJkcF92dGNfcGl4ZWxfY2xrX2luIjsKPiA+ID4gPgo+ID4gPiA+IHZh bGlkLiBJJ3ZlIGludmVzdGlnYXRlZCBhIGxpdHRsZSBiaXQgYW5kIGZvdW5kIHVuaXF1ZUl0ZW1z IHdoaWNoIHNvbHZlcwo+ID4gPiA+IG15IGlzc3VlLgo+IAo+IEl0IHdvdWxkbid0IGJlY2F1c2Ug dW5pcXVlSXRlbXMgaXMgdGhlIGRlZmF1bHQgKG5vdCBmb3IganNvbi1zY2hlbWEsCj4gYnV0IERU IHNjaGVtYSBzdHJpbmctYXJyYXlzKS4KPiAKPiA+ID4gPiBXb3VsZCB0aGUgZm9sbG93aW5nIHNp bXBsZXIgc29sdXRpb24gYmUgYWNjZXB0YWJsZSA/Cj4gPiA+ID4KPiA+ID4gPiBjbG9jay1uYW1l czoKPiA+ID4gPiAgICAgbWluSXRlbXM6IDIKPiA+ID4gPiAgICAgbWF4SXRlbXM6IDQKPiA+ID4g PiAgICAgaXRlbXM6Cj4gPiA+ID4gICAgICAgLSBjb25zdDogZHBfYXBiX2Nsawo+ID4gPiA+ICAg ICAgIC0gZW51bTogWyBkcF92dGNfcGl4ZWxfY2xrX2luLCBkcF9saXZlX3ZpZGVvX2luX2NsayBd Cj4gPiA+ID4gICAgICAgLSBjb25zdDogZHBfYXVkX2Nsawo+ID4gPiA+ICAgICAgIC0gZW51bTog WyBkcF92dGNfcGl4ZWxfY2xrX2luLCBkcF9saXZlX3ZpZGVvX2luX2NsayBdCj4gPiA+ID4gICAg IHVuaXF1ZUl0ZW1zOiB0cnVlCj4gPiA+Cj4gPiA+IFRvIGdpdmUgbW9yZSBjb250ZXh0LAo+ID4g Pgo+ID4gPiAgIGNsb2NrczoKPiA+ID4gICAgIGRlc2NyaXB0aW9uOgo+ID4gPiAgICAgICBUaGUg QVhJIGNsb2NrIGFuZCBhdCBsZWFzdCBvbmUgdmlkZW8gY2xvY2sgYXJlIG1hbmRhdG9yeSwgdGhl IGF1ZGlvIGNsb2NrCj4gPiA+ICAgICAgIGlzIG9wdGlvbmFsLgo+ID4gPiAgICAgbWluSXRlbXM6 IDIKPiA+ID4gICAgIG1heEl0ZW1zOiA0Cj4gPiA+ICAgICBpdGVtczoKPiA+ID4gICAgICAgLSBk ZXNjcmlwdGlvbjogZHBfYXBiX2NsayBpcyB0aGUgQVhJIGNsb2NrCj4gPiA+ICAgICAgIC0gZGVz Y3JpcHRpb246IGRwX2F1ZF9jbGsgaXMgdGhlIEF1ZGlvIGNsb2NrCj4gPiA+ICAgICAgIC0gZGVz Y3JpcHRpb246Cj4gPiA+ICAgICAgICAgICBkcF92dGNfcGl4ZWxfY2xrX2luIGlzIHRoZSBub24t bGl2ZSB2aWRlbyBjbG9jayAoZnJvbSBQcm9jZXNzaW5nCj4gPiA+ICAgICAgICAgICBTeXN0ZW0p Cj4gPiA+ICAgICAgIC0gZGVzY3JpcHRpb246Cj4gPiA+ICAgICAgICAgICBkcF9saXZlX3ZpZGVv X2luX2NsayBpcyB0aGUgbGl2ZSB2aWRlbyBjbG9jayAoZnJvbSBQcm9ncmFtbWFibGUKPiA+ID4g ICAgICAgICAgIExvZ2ljKQo+ID4gPiAgIGNsb2NrLW5hbWVzOgo+ID4gPiAgICAgICBtaW5JdGVt czogMgo+ID4gPiAgICAgICBtYXhJdGVtczogNAo+ID4gPiAgICAgICBpdGVtczoKPiA+ID4gICAg ICAgICAtIGNvbnN0OiBkcF9hcGJfY2xrCj4gPiA+ICAgICAgICAgLSBlbnVtOiBbIGRwX3Z0Y19w aXhlbF9jbGtfaW4sIGRwX2xpdmVfdmlkZW9faW5fY2xrIF0KPiA+ID4gICAgICAgICAtIGNvbnN0 OiBkcF9hdWRfY2xrCj4gPiA+ICAgICAgICAgLSBlbnVtOiBbIGRwX3Z0Y19waXhlbF9jbGtfaW4s IGRwX2xpdmVfdmlkZW9faW5fY2xrIF0KPiA+ID4gICAgICAgdW5pcXVlSXRlbXM6IHRydWUKPiAK PiAnY2xvY2snIGFuZCAnY2xvY2stbmFtZXMnIGRvbid0IG1hdGNoLiBkcF9hdWRfY2xrIGlzIGlu IHRoZSB3cm9uZyBzcG90LgoKWW91J3JlIHJpZ2h0LCBhbmQgYWZ0ZXIgdGhpbmtpbmcgdHdpY2Ug YWJvdXQgaXQsIHRoaXMgd29uJ3QgYWxsb3cKCgljbG9jay1uYW1lcyA9ICJkcF9hcGJfY2xrIiwg ImRwX3Z0Y19waXhlbF9jbGtfaW4iLCAiZHBfbGl2ZV92aWRlb19pbl9jbGsiOwoKc28geW91ciBz b2x1dGlvbiBpcyB0aGUgb25seSBvbmUgdGhhdCB3aWxsIHdvcmsuCgo+ID4KPiA+IFRoZXJlJ3Mg c29tZXRoaW5nIGdvaW5nIG9uIHRoYXQgSSBjYW4ndCByZWFsbHkgdW5kZXJzdGFuZC4uLgo+ID4K PiA+IGNsb2NrLW5hbWVzOgo+ID4gICBtaW5JdGVtczogMgo+ID4gICBtYXhJdGVtczogNAo+ID4g ICBpdGVtczoKPiA+ICAgICAtIGNvbnN0OiBkcF9hcGJfY2xrCj4gPiAgICAgLSBlbnVtOiBbIGRw X3Z0Y19waXhlbF9jbGtfaW4sIGRwX2xpdmVfdmlkZW9faW5fY2xrIF0KPiA+ICAgICAtIGNvbnN0 OiBkcF9hdWRfY2xrCj4gPiAgICAgLSBlbnVtOiBbIGRwX3Z0Y19waXhlbF9jbGtfaW4sIGRwX2xp dmVfdmlkZW9faW5fY2xrIF0KPiA+ICAgdW5pcXVlSXRlbXM6IHRydWUKPiA+Cj4gPiByZXN1bHRz IGluIGR0X21rX3NjaGVtYSBjb21wbGFpbmluZyBhYm91dCBhbiBpbnZhbGlkIHNjaGVtYS4gSG93 ZXZlciwKPiA+IHRoZSBmb2xsb3dpbmcgd29ya3M6Cj4gCj4gQmVjYXVzZSAndW5pcXVlSXRlbXMn IGlzIG5vdCBhbGxvd2VkIGJlY2F1c2UgaXQncyBub3QgbmVlZGVkLgoKRXJyb3IgbWVzc2FnZXMg Y291bGQgYmUgaW1wcm92ZWQgOi0pCgo+ID4gY2xvY2stbmFtZXM6Cj4gPiAgIG9uZU9mOgo+ID4g ICAgIC0gbWluSXRlbXM6IDIKPiA+ICAgICAgIG1heEl0ZW1zOiA0Cj4gPiAgICAgICBpdGVtczoK PiA+ICAgICAgICAgLSBjb25zdDogZHBfYXBiX2Nsawo+ID4gICAgICAgICAtIGVudW06IFsgZHBf dnRjX3BpeGVsX2Nsa19pbiwgZHBfbGl2ZV92aWRlb19pbl9jbGsgXQo+ID4gICAgICAgICAtIGNv bnN0OiBkcF9hdWRfY2xrCj4gPiAgICAgICAgIC0gZW51bTogWyBkcF92dGNfcGl4ZWxfY2xrX2lu LCBkcF9saXZlX3ZpZGVvX2luX2NsayBdCj4gPiAgICAgICB1bmlxdWVJdGVtczogdHJ1ZQo+ID4K PiA+IEkgYXNzdW1lIHRoaXMgaXMgZHVlIHRvIGNsb2NrLW5hbWVzIGJlaW5nIGEgc3RyaW5nLWFy cmF5LCB3aGljaCBhbHJlYWR5Cj4gPiBjb250YWlucyB1bmlxdWVJdGVtcy4gSG93ZXZlciwgaWYg SSBsZWF2ZSB1bmlxdWVJdGVtcyBvdXQsIGFuIGV4YW1wbGUKPiA+IHdpdGggYSBkdXBsaWNhdGVk IGNsb2NrLW5hbWVzIHZhbGlkYXRlcyBmaW5lLgo+IAo+IEFyZSB5b3UgdXNpbmcgJ0RUX1NDSEVN QV9GSUxFUycgYXMgdGhhdCBsZWF2ZXMgb3V0IGFsbCB0aGUgY29yZSBzY2hlbWE/CgpBaCwgdGhh dCdzIHByb2JhYmx5IHdoeSAhIFRoYW5rIHlvdS4KCj4gQlRXLCB0aGlzIGNhc2UgaXMgcHJvYmFi bHkgYWxsb3dlZCBiZWNhdXNlIHdlIGZhaWwgdG8gYXBwbHkgdGhlIHNhbWUKPiBtZXRhLXNjaGVt YXMgZm9yIHNjaGVtYSBiZWhpbmQgdGhlIG9uZU9mLgoKLS0gClJlZ2FyZHMsCgpMYXVyZW50IFBp bmNoYXJ0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRy aS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRw czovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbA==