From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753988AbcJKQ3p (ORCPT ); Tue, 11 Oct 2016 12:29:45 -0400 Received: from mga01.intel.com ([192.55.52.88]:32178 "EHLO mga01.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753899AbcJKQ3o (ORCPT ); Tue, 11 Oct 2016 12:29:44 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.31,329,1473145200"; d="scan'208";a="1063397862" Date: Tue, 11 Oct 2016 19:25:59 +0300 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= To: Brian Starkey Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, liviu.dudau@arm.com, robdclark@gmail.com, hverkuil@xs4all.nl, eric@anholt.net, daniel@ffwll.ch Subject: Re: [RFC PATCH 00/11] Introduce writeback connectors Message-ID: <20161011162559.GR4329@intel.com> References: <1476197648-24918-1-git-send-email-brian.starkey@arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <1476197648-24918-1-git-send-email-brian.starkey@arm.com> User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Oct 11, 2016 at 03:53:57PM +0100, Brian Starkey wrote: > Hi, > > This RFC series introduces a new connector type: > DRM_MODE_CONNECTOR_WRITEBACK > It is a follow-on from a previous discussion: [1] > > Writeback connectors are used to expose the memory writeback engines > found in some display controllers, which can write a CRTC's > composition result to a memory buffer. > This is useful e.g. for testing, screen-recording, screenshots, > wireless display, display cloning, memory-to-memory composition. > > Patches 1-7 include the core framework changes required, and patches > 8-11 implement a writeback connector for the Mali-DP writeback engine. > The Mali-DP patches depend on this other series: [2]. > > The connector is given the FB_ID property for the output framebuffer, > and two new read-only properties: PIXEL_FORMATS and > PIXEL_FORMATS_SIZE, which expose the supported framebuffer pixel > formats of the engine. > > The EDID property is not exposed for writeback connectors. > > Writeback connector usage: > -------------------------- > Due to connector routing changes being treated as "full modeset" > operations, any client which wishes to use a writeback connector > should include the connector in every modeset. The writeback will not > actually become active until a framebuffer is attached. > > The writeback itself is enabled by attaching a framebuffer to the > FB_ID property of the connector. The driver must then ensure that the > CRTC content of that atomic commit is written into the framebuffer. > > The writeback works in a one-shot mode with each atomic commit. This > prevents the same content from being written multiple times. > In some cases (front-buffer rendering) there might be a desire for > continuous operation - I think a property could be added later for > this kind of control. I though people agreed that this sort of thing would go through v4l. Continously writing to the same buffer isn't perhaps all that sensible anyway, and so we'd need queueing, which is what v4l has already. Well, I guess we might add some queueing to atomic eventually? I guess for front buffer rendering type of thing you might have some use for a continuous mode targeting a single fb. Though I think peridically triggering a new write could do as well. Of course either way would likely tear horribly, and having multiple buffers seems like the better option. > > Writeback can be disabled by setting FB_ID to zero. > > Known issues: > ------------- > * I'm not sure what "DPMS" should mean for writeback connectors. > It could be used to disable writeback (even when a framebuffer is > attached), or it could be hidden entirely (which would break the > legacy DPMS call for writeback connectors). > * With Daniel's recent re-iteration of the userspace API rules, I > fully expect to provide some userspace code to support this. The > question is what, and where? We want to use writeback for testing, > so perhaps some tests in igt is suitable. > * Documentation. Probably some portion of this cover letter needs to > make it into Documentation/ > * Synchronisation. Our hardware will finish the writeback by the next > vsync. I've not implemented fence support here, but it would be an > obvious addition. > > See Also: > --------- > [1] https://lists.freedesktop.org/archives/dri-devel/2016-July/113197.html > [2] https://lists.freedesktop.org/archives/dri-devel/2016-October/120486.html > > I welcome any comments, especially if this approach does/doesn't fit > well with anyone else's hardware. > > Thanks, > > -Brian > > --- > > Brian Starkey (10): > drm: add writeback connector type > drm/fb-helper: skip writeback connectors > drm: extract CRTC/plane disable from drm_framebuffer_remove > drm: add __drm_framebuffer_remove_atomic > drm: add fb to connector state > drm: expose fb_id property for writeback connectors > drm: add writeback-connector pixel format properties > drm: mali-dp: rename malidp_input_format > drm: mali-dp: add RGB writeback formats for DP550/DP650 > drm: mali-dp: add writeback connector > > Liviu Dudau (1): > drm: mali-dp: Add support for writeback on DP550/DP650 > > drivers/gpu/drm/arm/Makefile | 1 + > drivers/gpu/drm/arm/malidp_crtc.c | 10 ++ > drivers/gpu/drm/arm/malidp_drv.c | 25 +++- > drivers/gpu/drm/arm/malidp_drv.h | 5 + > drivers/gpu/drm/arm/malidp_hw.c | 104 ++++++++++---- > drivers/gpu/drm/arm/malidp_hw.h | 27 +++- > drivers/gpu/drm/arm/malidp_mw.c | 268 +++++++++++++++++++++++++++++++++++ > drivers/gpu/drm/arm/malidp_planes.c | 8 +- > drivers/gpu/drm/arm/malidp_regs.h | 15 ++ > drivers/gpu/drm/drm_atomic.c | 40 ++++++ > drivers/gpu/drm/drm_atomic_helper.c | 4 + > drivers/gpu/drm/drm_connector.c | 79 ++++++++++- > drivers/gpu/drm/drm_crtc.c | 14 +- > drivers/gpu/drm/drm_fb_helper.c | 4 + > drivers/gpu/drm/drm_framebuffer.c | 249 ++++++++++++++++++++++++++++---- > drivers/gpu/drm/drm_ioctl.c | 7 + > include/drm/drmP.h | 2 + > include/drm/drm_atomic.h | 3 + > include/drm/drm_connector.h | 15 ++ > include/drm/drm_crtc.h | 12 ++ > include/uapi/drm/drm.h | 10 ++ > include/uapi/drm/drm_mode.h | 1 + > 22 files changed, 830 insertions(+), 73 deletions(-) > create mode 100644 drivers/gpu/drm/arm/malidp_mw.c > > -- > 1.7.9.5 -- Ville Syrjälä Intel OTC From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [RFC PATCH 00/11] Introduce writeback connectors Date: Tue, 11 Oct 2016 19:25:59 +0300 Message-ID: <20161011162559.GR4329@intel.com> References: <1476197648-24918-1-git-send-email-brian.starkey@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7C1BC6E6CB for ; Tue, 11 Oct 2016 16:26:04 +0000 (UTC) Content-Disposition: inline In-Reply-To: <1476197648-24918-1-git-send-email-brian.starkey@arm.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Brian Starkey Cc: liviu.dudau@arm.com, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, hverkuil@xs4all.nl, linux-media@vger.kernel.org List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCBPY3QgMTEsIDIwMTYgYXQgMDM6NTM6NTdQTSArMDEwMCwgQnJpYW4gU3RhcmtleSB3 cm90ZToKPiBIaSwKPiAKPiBUaGlzIFJGQyBzZXJpZXMgaW50cm9kdWNlcyBhIG5ldyBjb25uZWN0 b3IgdHlwZToKPiAgRFJNX01PREVfQ09OTkVDVE9SX1dSSVRFQkFDSwo+IEl0IGlzIGEgZm9sbG93 LW9uIGZyb20gYSBwcmV2aW91cyBkaXNjdXNzaW9uOiBbMV0KPiAKPiBXcml0ZWJhY2sgY29ubmVj dG9ycyBhcmUgdXNlZCB0byBleHBvc2UgdGhlIG1lbW9yeSB3cml0ZWJhY2sgZW5naW5lcwo+IGZv dW5kIGluIHNvbWUgZGlzcGxheSBjb250cm9sbGVycywgd2hpY2ggY2FuIHdyaXRlIGEgQ1JUQydz Cj4gY29tcG9zaXRpb24gcmVzdWx0IHRvIGEgbWVtb3J5IGJ1ZmZlci4KPiBUaGlzIGlzIHVzZWZ1 bCBlLmcuIGZvciB0ZXN0aW5nLCBzY3JlZW4tcmVjb3JkaW5nLCBzY3JlZW5zaG90cywKPiB3aXJl bGVzcyBkaXNwbGF5LCBkaXNwbGF5IGNsb25pbmcsIG1lbW9yeS10by1tZW1vcnkgY29tcG9zaXRp b24uCj4gCj4gUGF0Y2hlcyAxLTcgaW5jbHVkZSB0aGUgY29yZSBmcmFtZXdvcmsgY2hhbmdlcyBy ZXF1aXJlZCwgYW5kIHBhdGNoZXMKPiA4LTExIGltcGxlbWVudCBhIHdyaXRlYmFjayBjb25uZWN0 b3IgZm9yIHRoZSBNYWxpLURQIHdyaXRlYmFjayBlbmdpbmUuCj4gVGhlIE1hbGktRFAgcGF0Y2hl cyBkZXBlbmQgb24gdGhpcyBvdGhlciBzZXJpZXM6IFsyXS4KPiAKPiBUaGUgY29ubmVjdG9yIGlz IGdpdmVuIHRoZSBGQl9JRCBwcm9wZXJ0eSBmb3IgdGhlIG91dHB1dCBmcmFtZWJ1ZmZlciwKPiBh bmQgdHdvIG5ldyByZWFkLW9ubHkgcHJvcGVydGllczogUElYRUxfRk9STUFUUyBhbmQKPiBQSVhF TF9GT1JNQVRTX1NJWkUsIHdoaWNoIGV4cG9zZSB0aGUgc3VwcG9ydGVkIGZyYW1lYnVmZmVyIHBp eGVsCj4gZm9ybWF0cyBvZiB0aGUgZW5naW5lLgo+IAo+IFRoZSBFRElEIHByb3BlcnR5IGlzIG5v dCBleHBvc2VkIGZvciB3cml0ZWJhY2sgY29ubmVjdG9ycy4KPiAKPiBXcml0ZWJhY2sgY29ubmVj dG9yIHVzYWdlOgo+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gRHVlIHRvIGNvbm5lY3Rv ciByb3V0aW5nIGNoYW5nZXMgYmVpbmcgdHJlYXRlZCBhcyAiZnVsbCBtb2Rlc2V0Igo+IG9wZXJh dGlvbnMsIGFueSBjbGllbnQgd2hpY2ggd2lzaGVzIHRvIHVzZSBhIHdyaXRlYmFjayBjb25uZWN0 b3IKPiBzaG91bGQgaW5jbHVkZSB0aGUgY29ubmVjdG9yIGluIGV2ZXJ5IG1vZGVzZXQuIFRoZSB3 cml0ZWJhY2sgd2lsbCBub3QKPiBhY3R1YWxseSBiZWNvbWUgYWN0aXZlIHVudGlsIGEgZnJhbWVi dWZmZXIgaXMgYXR0YWNoZWQuCj4gCj4gVGhlIHdyaXRlYmFjayBpdHNlbGYgaXMgZW5hYmxlZCBi eSBhdHRhY2hpbmcgYSBmcmFtZWJ1ZmZlciB0byB0aGUKPiBGQl9JRCBwcm9wZXJ0eSBvZiB0aGUg Y29ubmVjdG9yLiBUaGUgZHJpdmVyIG11c3QgdGhlbiBlbnN1cmUgdGhhdCB0aGUKPiBDUlRDIGNv bnRlbnQgb2YgdGhhdCBhdG9taWMgY29tbWl0IGlzIHdyaXR0ZW4gaW50byB0aGUgZnJhbWVidWZm ZXIuCj4gCj4gVGhlIHdyaXRlYmFjayB3b3JrcyBpbiBhIG9uZS1zaG90IG1vZGUgd2l0aCBlYWNo IGF0b21pYyBjb21taXQuIFRoaXMKPiBwcmV2ZW50cyB0aGUgc2FtZSBjb250ZW50IGZyb20gYmVp bmcgd3JpdHRlbiBtdWx0aXBsZSB0aW1lcy4KPiBJbiBzb21lIGNhc2VzIChmcm9udC1idWZmZXIg cmVuZGVyaW5nKSB0aGVyZSBtaWdodCBiZSBhIGRlc2lyZSBmb3IKPiBjb250aW51b3VzIG9wZXJh dGlvbiAtIEkgdGhpbmsgYSBwcm9wZXJ0eSBjb3VsZCBiZSBhZGRlZCBsYXRlciBmb3IKPiB0aGlz IGtpbmQgb2YgY29udHJvbC4KCkkgdGhvdWdoIHBlb3BsZSBhZ3JlZWQgdGhhdCB0aGlzIHNvcnQg b2YgdGhpbmcgd291bGQgZ28gdGhyb3VnaCB2NGwuCkNvbnRpbm91c2x5IHdyaXRpbmcgdG8gdGhl IHNhbWUgYnVmZmVyIGlzbid0IHBlcmhhcHMgYWxsIHRoYXQgc2Vuc2libGUKYW55d2F5LCBhbmQg c28gd2UnZCBuZWVkIHF1ZXVlaW5nLCB3aGljaCBpcyB3aGF0IHY0bCBoYXMgYWxyZWFkeS4gV2Vs bCwKSSBndWVzcyB3ZSBtaWdodCBhZGQgc29tZSBxdWV1ZWluZyB0byBhdG9taWMgZXZlbnR1YWxs eT8KCkkgZ3Vlc3MgZm9yIGZyb250IGJ1ZmZlciByZW5kZXJpbmcgdHlwZSBvZiB0aGluZyB5b3Ug bWlnaHQgaGF2ZSBzb21lCnVzZSBmb3IgYSBjb250aW51b3VzIG1vZGUgdGFyZ2V0aW5nIGEgc2lu Z2xlIGZiLiBUaG91Z2ggSSB0aGluawpwZXJpZGljYWxseSB0cmlnZ2VyaW5nIGEgbmV3IHdyaXRl IGNvdWxkIGRvIGFzIHdlbGwuIE9mIGNvdXJzZSBlaXRoZXIKd2F5IHdvdWxkIGxpa2VseSB0ZWFy IGhvcnJpYmx5LCBhbmQgaGF2aW5nIG11bHRpcGxlIGJ1ZmZlcnMgc2VlbXMgbGlrZQp0aGUgYmV0 dGVyIG9wdGlvbi4KCj4gCj4gV3JpdGViYWNrIGNhbiBiZSBkaXNhYmxlZCBieSBzZXR0aW5nIEZC X0lEIHRvIHplcm8uCj4gCj4gS25vd24gaXNzdWVzOgo+IC0tLS0tLS0tLS0tLS0KPiAgKiBJJ20g bm90IHN1cmUgd2hhdCAiRFBNUyIgc2hvdWxkIG1lYW4gZm9yIHdyaXRlYmFjayBjb25uZWN0b3Jz Lgo+ICAgIEl0IGNvdWxkIGJlIHVzZWQgdG8gZGlzYWJsZSB3cml0ZWJhY2sgKGV2ZW4gd2hlbiBh IGZyYW1lYnVmZmVyIGlzCj4gICAgYXR0YWNoZWQpLCBvciBpdCBjb3VsZCBiZSBoaWRkZW4gZW50 aXJlbHkgKHdoaWNoIHdvdWxkIGJyZWFrIHRoZQo+ICAgIGxlZ2FjeSBEUE1TIGNhbGwgZm9yIHdy aXRlYmFjayBjb25uZWN0b3JzKS4KPiAgKiBXaXRoIERhbmllbCdzIHJlY2VudCByZS1pdGVyYXRp b24gb2YgdGhlIHVzZXJzcGFjZSBBUEkgcnVsZXMsIEkKPiAgICBmdWxseSBleHBlY3QgdG8gcHJv dmlkZSBzb21lIHVzZXJzcGFjZSBjb2RlIHRvIHN1cHBvcnQgdGhpcy4gVGhlCj4gICAgcXVlc3Rp b24gaXMgd2hhdCwgYW5kIHdoZXJlPyBXZSB3YW50IHRvIHVzZSB3cml0ZWJhY2sgZm9yIHRlc3Rp bmcsCj4gICAgc28gcGVyaGFwcyBzb21lIHRlc3RzIGluIGlndCBpcyBzdWl0YWJsZS4KPiAgKiBE b2N1bWVudGF0aW9uLiBQcm9iYWJseSBzb21lIHBvcnRpb24gb2YgdGhpcyBjb3ZlciBsZXR0ZXIg bmVlZHMgdG8KPiAgICBtYWtlIGl0IGludG8gRG9jdW1lbnRhdGlvbi8KPiAgKiBTeW5jaHJvbmlz YXRpb24uIE91ciBoYXJkd2FyZSB3aWxsIGZpbmlzaCB0aGUgd3JpdGViYWNrIGJ5IHRoZSBuZXh0 Cj4gICAgdnN5bmMuIEkndmUgbm90IGltcGxlbWVudGVkIGZlbmNlIHN1cHBvcnQgaGVyZSwgYnV0 IGl0IHdvdWxkIGJlIGFuCj4gICAgb2J2aW91cyBhZGRpdGlvbi4KPiAKPiBTZWUgQWxzbzoKPiAt LS0tLS0tLS0KPiBbMV0gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvYXJjaGl2ZXMvZHJp LWRldmVsLzIwMTYtSnVseS8xMTMxOTcuaHRtbAo+IFsyXSBodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9hcmNoaXZlcy9kcmktZGV2ZWwvMjAxNi1PY3RvYmVyLzEyMDQ4Ni5odG1sCj4gCj4g SSB3ZWxjb21lIGFueSBjb21tZW50cywgZXNwZWNpYWxseSBpZiB0aGlzIGFwcHJvYWNoIGRvZXMv ZG9lc24ndCBmaXQKPiB3ZWxsIHdpdGggYW55b25lIGVsc2UncyBoYXJkd2FyZS4KPiAKPiBUaGFu a3MsCj4gCj4gLUJyaWFuCj4gCj4gLS0tCj4gCj4gQnJpYW4gU3RhcmtleSAoMTApOgo+ICAgZHJt OiBhZGQgd3JpdGViYWNrIGNvbm5lY3RvciB0eXBlCj4gICBkcm0vZmItaGVscGVyOiBza2lwIHdy aXRlYmFjayBjb25uZWN0b3JzCj4gICBkcm06IGV4dHJhY3QgQ1JUQy9wbGFuZSBkaXNhYmxlIGZy b20gZHJtX2ZyYW1lYnVmZmVyX3JlbW92ZQo+ICAgZHJtOiBhZGQgX19kcm1fZnJhbWVidWZmZXJf cmVtb3ZlX2F0b21pYwo+ICAgZHJtOiBhZGQgZmIgdG8gY29ubmVjdG9yIHN0YXRlCj4gICBkcm06 IGV4cG9zZSBmYl9pZCBwcm9wZXJ0eSBmb3Igd3JpdGViYWNrIGNvbm5lY3RvcnMKPiAgIGRybTog YWRkIHdyaXRlYmFjay1jb25uZWN0b3IgcGl4ZWwgZm9ybWF0IHByb3BlcnRpZXMKPiAgIGRybTog bWFsaS1kcDogcmVuYW1lIG1hbGlkcF9pbnB1dF9mb3JtYXQKPiAgIGRybTogbWFsaS1kcDogYWRk IFJHQiB3cml0ZWJhY2sgZm9ybWF0cyBmb3IgRFA1NTAvRFA2NTAKPiAgIGRybTogbWFsaS1kcDog YWRkIHdyaXRlYmFjayBjb25uZWN0b3IKPiAKPiBMaXZpdSBEdWRhdSAoMSk6Cj4gICBkcm06IG1h bGktZHA6IEFkZCBzdXBwb3J0IGZvciB3cml0ZWJhY2sgb24gRFA1NTAvRFA2NTAKPiAKPiAgZHJp dmVycy9ncHUvZHJtL2FybS9NYWtlZmlsZSAgICAgICAgfCAgICAxICsKPiAgZHJpdmVycy9ncHUv ZHJtL2FybS9tYWxpZHBfY3J0Yy5jICAgfCAgIDEwICsrCj4gIGRyaXZlcnMvZ3B1L2RybS9hcm0v bWFsaWRwX2Rydi5jICAgIHwgICAyNSArKystCj4gIGRyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRw X2Rydi5oICAgIHwgICAgNSArCj4gIGRyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2h3LmMgICAg IHwgIDEwNCArKysrKysrKysrLS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9ody5o ICAgICB8ICAgMjcgKysrLQo+ICBkcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9tdy5jICAgICB8 ICAyNjggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgZHJpdmVycy9ncHUv ZHJtL2FybS9tYWxpZHBfcGxhbmVzLmMgfCAgICA4ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9hcm0v bWFsaWRwX3JlZ3MuaCAgIHwgICAxNSArKwo+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pYy5j ICAgICAgICB8ICAgNDAgKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX2hlbHBl ci5jIHwgICAgNCArCj4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fY29ubmVjdG9yLmMgICAgIHwgICA3 OSArKysrKysrKysrLQo+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYyAgICAgICAgICB8ICAg MTQgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYyAgICAgfCAgICA0ICsKPiAg ZHJpdmVycy9ncHUvZHJtL2RybV9mcmFtZWJ1ZmZlci5jICAgfCAgMjQ5ICsrKysrKysrKysrKysr KysrKysrKysrKysrKystLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9kcm1faW9jdGwuYyAgICAgICAg IHwgICAgNyArCj4gIGluY2x1ZGUvZHJtL2RybVAuaCAgICAgICAgICAgICAgICAgIHwgICAgMiAr Cj4gIGluY2x1ZGUvZHJtL2RybV9hdG9taWMuaCAgICAgICAgICAgIHwgICAgMyArCj4gIGluY2x1 ZGUvZHJtL2RybV9jb25uZWN0b3IuaCAgICAgICAgIHwgICAxNSArKwo+ICBpbmNsdWRlL2RybS9k cm1fY3J0Yy5oICAgICAgICAgICAgICB8ICAgMTIgKysKPiAgaW5jbHVkZS91YXBpL2RybS9kcm0u aCAgICAgICAgICAgICAgfCAgIDEwICsrCj4gIGluY2x1ZGUvdWFwaS9kcm0vZHJtX21vZGUuaCAg ICAgICAgIHwgICAgMSArCj4gIDIyIGZpbGVzIGNoYW5nZWQsIDgzMCBpbnNlcnRpb25zKCspLCA3 MyBkZWxldGlvbnMoLSkKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hcm0v bWFsaWRwX213LmMKPiAKPiAtLSAKPiAxLjcuOS41CgotLSAKVmlsbGUgU3lyasOkbMOkCkludGVs IE9UQwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmkt ZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK