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=-2.4 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=no 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 5E9D2C17460 for ; Tue, 5 Nov 2019 13:30:50 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 2A87E2190F for ; Tue, 5 Nov 2019 13:30:50 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="i2X9SNHI" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389250AbfKENat (ORCPT ); Tue, 5 Nov 2019 08:30:49 -0500 Received: from lelv0143.ext.ti.com ([198.47.23.248]:59056 "EHLO lelv0143.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388883AbfKENas (ORCPT ); Tue, 5 Nov 2019 08:30:48 -0500 Received: from lelv0266.itg.ti.com ([10.180.67.225]) by lelv0143.ext.ti.com (8.15.2/8.15.2) with ESMTP id xA5DUeZa029559; Tue, 5 Nov 2019 07:30:40 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1572960640; bh=X2r1E+5verQirY3pPc+pLDG8R8Z0eAEU6/97FnwaeJE=; h=Subject:To:References:From:Date:In-Reply-To; b=i2X9SNHIaWyxje87ekrjovkH7KcKd8+Uv4zRDPgQqCS2KklVMgqThvsNrhGdccnO0 toL/VNiqQXNlum/mc5Loj8mvMERyzATixCxGkR+dpj1HHw40/9OFdIeuLBmrsQM+Y8 CPPptuc4zxsiS7Id6yM3FAGqjXt0hMah4inpCgxI= Received: from DLEE101.ent.ti.com (dlee101.ent.ti.com [157.170.170.31]) by lelv0266.itg.ti.com (8.15.2/8.15.2) with ESMTPS id xA5DUeIA012898 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 5 Nov 2019 07:30:40 -0600 Received: from DLEE111.ent.ti.com (157.170.170.22) by DLEE101.ent.ti.com (157.170.170.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Tue, 5 Nov 2019 07:30:25 -0600 Received: from lelv0327.itg.ti.com (10.180.67.183) by DLEE111.ent.ti.com (157.170.170.22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1847.3 via Frontend Transport; Tue, 5 Nov 2019 07:30:25 -0600 Received: from [10.250.45.147] (ileax41-snat.itg.ti.com [10.172.224.153]) by lelv0327.itg.ti.com (8.15.2/8.15.2) with ESMTP id xA5DUdiv055261; Tue, 5 Nov 2019 07:30:39 -0600 Subject: Re: [RFC][PATCH 0/2] Allow DMA BUF heaps to be loaded as modules To: John Stultz , lkml , Sandeep Patil , Mike Rapoport , Chenbo Feng , Alistair Strachan , Liam Mark , Yue Hu , dri-devel , Hridya Valsaraju , Andrew Morton , Pratik Patel References: <20191025234834.28214-1-john.stultz@linaro.org> <20191104095823.GD10326@phenom.ffwll.local> <20191105094259.GX10326@phenom.ffwll.local> From: "Andrew F. Davis" Message-ID: <5b591240-43c8-495a-e9c9-881a2997c492@ti.com> Date: Tue, 5 Nov 2019 08:30:38 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.9.0 MIME-Version: 1.0 In-Reply-To: <20191105094259.GX10326@phenom.ffwll.local> Content-Type: text/plain; charset="utf-8" Content-Language: en-US Content-Transfer-Encoding: 7bit X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 11/5/19 4:42 AM, Daniel Vetter wrote: > On Mon, Nov 04, 2019 at 10:57:44AM -0800, John Stultz wrote: >> On Mon, Nov 4, 2019 at 1:58 AM Daniel Vetter wrote: >>> On Fri, Oct 25, 2019 at 11:48:32PM +0000, John Stultz wrote: >>>> Now that the DMA BUF heaps core code has been queued, I wanted >>>> to send out some of the pending changes that I've been working >>>> on. >>>> >>>> For use with Android and their GKI effort, it is desired that >>>> DMA BUF heaps are able to be loaded as modules. This is required >>>> for migrating vendors off of ION which was also recently changed >>>> to support modules. >>>> >>>> So this patch series simply provides the necessary exported >>>> symbols and allows the system and CMA drivers to be built >>>> as modules. >>>> >>>> Due to the fact that dmabuf's allocated from a heap may >>>> be in use for quite some time, there isn't a way to safely >>>> unload the driver once it has been loaded. Thus these >>>> drivers do no implement module_exit() functions and will >>>> show up in lsmod as "[permanent]" >>>> >>>> Feedback and thoughts on this would be greatly appreciated! >>> >>> Do we actually want this? >> >> I guess that always depends on the definition of "we" :) >> >>> I figured if we just state that vendors should set up all the right >>> dma-buf heaps in dt, is that not enough? >> >> So even if the heaps are configured via DT (which at the moment there >> is no such binding, so that's not really a valid method yet), there's >> still the question of if the heap is necessary/makes sense on the >> device. And the DT would only control the availability of the heap >> interface, not if the heap driver is loaded or not. > > Hm I thought the cma regions are configured in DT? How does that work if > it's not using DT? > >> On the HiKey/HiKey960 boards, we have to allocate contiguous buffers >> for the display framebuffer. So gralloc uses ION to allocate from the >> CMA heap. However on the db845c, it has no such restrictions, so the >> CMA heap isn't necessary. > > Why do you have a CMA region for the 2nd board if you don't need it? > _That_ sounds like some serious memory waster, not a few lines of code > loaded for nothing :-) > >> With Android's GKI effort, there needs to be one kernel that works on >> all the devices, and they are using modules to try to minimize the >> amount of memory spent on functionality that isn't universally needed. >> So on devices that don't need the CMA heap, they'd probably prefer not >> to load the CMA dmabuf heap driver, so it would be best if it could be >> built as a module. If we want to build the CMA heap as a module, the >> symbols it uses need to be exported. > > Yeah, I guess I'm disagreeing on whether dma-buf heaps are core or not. > >>> Exporting symbols for no real in-tree users feels fishy. >> >> I'm submitting an in-tree user here. So I'm not sure what you mean? I >> suspect you're thinking there is some hidden/nefarious plan here, but >> really there isn't. > > I was working under the assumption that you're only exporting the symbols > for other heaps, and keep the current ones in-tree. Are there even any > out-of-tree dma-buf heaps still? out-of-tree and legit different use-case > I mean ofc, not just out-of-tree because inertia :-) Not sure what you mean here, hopefully all the heaps can be "in-tree" some day. https://patchwork.kernel.org/patch/10863957/ Plus some non-caching heaps and one that forces early allocation of our PAT (gart like) IP. All this stuff is going into our evil vendor tree next cycle (if not upstream by then :)), if we want some of these "specialty" heaps to go into generic kernel builds at some point they will need to be modules if the core is. Although I am still thinking Heaps should be always built in + system + CMA heaps, then the rando heaps could be modules if needed. Andrew > -Daniel > 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=-2.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=no 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 85772C17461 for ; Tue, 5 Nov 2019 13:30:48 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 61DBA2190F for ; Tue, 5 Nov 2019 13:30:48 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 61DBA2190F Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=ti.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id DA8926EA5E; Tue, 5 Nov 2019 13:30:47 +0000 (UTC) Received: from lelv0143.ext.ti.com (lelv0143.ext.ti.com [198.47.23.248]) by gabe.freedesktop.org (Postfix) with ESMTPS id AFB156EA5E for ; Tue, 5 Nov 2019 13:30:46 +0000 (UTC) Received: from lelv0266.itg.ti.com ([10.180.67.225]) by lelv0143.ext.ti.com (8.15.2/8.15.2) with ESMTP id xA5DUeZa029559; Tue, 5 Nov 2019 07:30:40 -0600 Received: from DLEE101.ent.ti.com (dlee101.ent.ti.com [157.170.170.31]) by lelv0266.itg.ti.com (8.15.2/8.15.2) with ESMTPS id xA5DUeIA012898 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 5 Nov 2019 07:30:40 -0600 Received: from DLEE111.ent.ti.com (157.170.170.22) by DLEE101.ent.ti.com (157.170.170.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Tue, 5 Nov 2019 07:30:25 -0600 Received: from lelv0327.itg.ti.com (10.180.67.183) by DLEE111.ent.ti.com (157.170.170.22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1847.3 via Frontend Transport; Tue, 5 Nov 2019 07:30:25 -0600 Received: from [10.250.45.147] (ileax41-snat.itg.ti.com [10.172.224.153]) by lelv0327.itg.ti.com (8.15.2/8.15.2) with ESMTP id xA5DUdiv055261; Tue, 5 Nov 2019 07:30:39 -0600 Subject: Re: [RFC][PATCH 0/2] Allow DMA BUF heaps to be loaded as modules To: John Stultz , lkml , Sandeep Patil , Mike Rapoport , Chenbo Feng , Alistair Strachan , Liam Mark , Yue Hu , dri-devel , Hridya Valsaraju , Andrew Morton , Pratik Patel References: <20191025234834.28214-1-john.stultz@linaro.org> <20191104095823.GD10326@phenom.ffwll.local> <20191105094259.GX10326@phenom.ffwll.local> From: "Andrew F. Davis" Message-ID: <5b591240-43c8-495a-e9c9-881a2997c492@ti.com> Date: Tue, 5 Nov 2019 08:30:38 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.9.0 MIME-Version: 1.0 In-Reply-To: <20191105094259.GX10326@phenom.ffwll.local> Content-Language: en-US X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1572960640; bh=X2r1E+5verQirY3pPc+pLDG8R8Z0eAEU6/97FnwaeJE=; h=Subject:To:References:From:Date:In-Reply-To; b=i2X9SNHIaWyxje87ekrjovkH7KcKd8+Uv4zRDPgQqCS2KklVMgqThvsNrhGdccnO0 toL/VNiqQXNlum/mc5Loj8mvMERyzATixCxGkR+dpj1HHw40/9OFdIeuLBmrsQM+Y8 CPPptuc4zxsiS7Id6yM3FAGqjXt0hMah4inpCgxI= X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Message-ID: <20191105133038.IrNaJDNV10yo_tKNr8BK0kqu135CR59TOgCfhlJ_JOs@z> T24gMTEvNS8xOSA0OjQyIEFNLCBEYW5pZWwgVmV0dGVyIHdyb3RlOgo+IE9uIE1vbiwgTm92IDA0 LCAyMDE5IGF0IDEwOjU3OjQ0QU0gLTA4MDAsIEpvaG4gU3R1bHR6IHdyb3RlOgo+PiBPbiBNb24s IE5vdiA0LCAyMDE5IGF0IDE6NTggQU0gRGFuaWVsIFZldHRlciA8ZGFuaWVsQGZmd2xsLmNoPiB3 cm90ZToKPj4+IE9uIEZyaSwgT2N0IDI1LCAyMDE5IGF0IDExOjQ4OjMyUE0gKzAwMDAsIEpvaG4g U3R1bHR6IHdyb3RlOgo+Pj4+IE5vdyB0aGF0IHRoZSBETUEgQlVGIGhlYXBzIGNvcmUgY29kZSBo YXMgYmVlbiBxdWV1ZWQsIEkgd2FudGVkCj4+Pj4gdG8gc2VuZCBvdXQgc29tZSBvZiB0aGUgcGVu ZGluZyBjaGFuZ2VzIHRoYXQgSSd2ZSBiZWVuIHdvcmtpbmcKPj4+PiBvbi4KPj4+Pgo+Pj4+IEZv ciB1c2Ugd2l0aCBBbmRyb2lkIGFuZCB0aGVpciBHS0kgZWZmb3J0LCBpdCBpcyBkZXNpcmVkIHRo YXQKPj4+PiBETUEgQlVGIGhlYXBzIGFyZSBhYmxlIHRvIGJlIGxvYWRlZCBhcyBtb2R1bGVzLiBU aGlzIGlzIHJlcXVpcmVkCj4+Pj4gZm9yIG1pZ3JhdGluZyB2ZW5kb3JzIG9mZiBvZiBJT04gd2hp Y2ggd2FzIGFsc28gcmVjZW50bHkgY2hhbmdlZAo+Pj4+IHRvIHN1cHBvcnQgbW9kdWxlcy4KPj4+ Pgo+Pj4+IFNvIHRoaXMgcGF0Y2ggc2VyaWVzIHNpbXBseSBwcm92aWRlcyB0aGUgbmVjZXNzYXJ5 IGV4cG9ydGVkCj4+Pj4gc3ltYm9scyBhbmQgYWxsb3dzIHRoZSBzeXN0ZW0gYW5kIENNQSBkcml2 ZXJzIHRvIGJlIGJ1aWx0Cj4+Pj4gYXMgbW9kdWxlcy4KPj4+Pgo+Pj4+IER1ZSB0byB0aGUgZmFj dCB0aGF0IGRtYWJ1ZidzIGFsbG9jYXRlZCBmcm9tIGEgaGVhcCBtYXkKPj4+PiBiZSBpbiB1c2Ug Zm9yIHF1aXRlIHNvbWUgdGltZSwgdGhlcmUgaXNuJ3QgYSB3YXkgdG8gc2FmZWx5Cj4+Pj4gdW5s b2FkIHRoZSBkcml2ZXIgb25jZSBpdCBoYXMgYmVlbiBsb2FkZWQuIFRodXMgdGhlc2UKPj4+PiBk cml2ZXJzIGRvIG5vIGltcGxlbWVudCBtb2R1bGVfZXhpdCgpIGZ1bmN0aW9ucyBhbmQgd2lsbAo+ Pj4+IHNob3cgdXAgaW4gbHNtb2QgYXMgIltwZXJtYW5lbnRdIgo+Pj4+Cj4+Pj4gRmVlZGJhY2sg YW5kIHRob3VnaHRzIG9uIHRoaXMgd291bGQgYmUgZ3JlYXRseSBhcHByZWNpYXRlZCEKPj4+Cj4+ PiBEbyB3ZSBhY3R1YWxseSB3YW50IHRoaXM/Cj4+Cj4+IEkgZ3Vlc3MgdGhhdCBhbHdheXMgZGVw ZW5kcyBvbiB0aGUgZGVmaW5pdGlvbiBvZiAid2UiIDopCj4+Cj4+PiBJIGZpZ3VyZWQgaWYgd2Ug anVzdCBzdGF0ZSB0aGF0IHZlbmRvcnMgc2hvdWxkIHNldCB1cCBhbGwgdGhlIHJpZ2h0Cj4+PiBk bWEtYnVmIGhlYXBzIGluIGR0LCBpcyB0aGF0IG5vdCBlbm91Z2g/Cj4+Cj4+IFNvIGV2ZW4gaWYg dGhlIGhlYXBzIGFyZSBjb25maWd1cmVkIHZpYSBEVCAod2hpY2ggYXQgdGhlIG1vbWVudCB0aGVy ZQo+PiBpcyBubyBzdWNoIGJpbmRpbmcsIHNvIHRoYXQncyBub3QgcmVhbGx5IGEgdmFsaWQgbWV0 aG9kIHlldCksIHRoZXJlJ3MKPj4gc3RpbGwgdGhlIHF1ZXN0aW9uIG9mIGlmIHRoZSBoZWFwIGlz IG5lY2Vzc2FyeS9tYWtlcyBzZW5zZSBvbiB0aGUKPj4gZGV2aWNlLiBBbmQgdGhlIERUIHdvdWxk IG9ubHkgY29udHJvbCB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoZSBoZWFwCj4+IGludGVyZmFjZSwg bm90IGlmIHRoZSBoZWFwIGRyaXZlciBpcyBsb2FkZWQgb3Igbm90Lgo+IAo+IEhtIEkgdGhvdWdo dCB0aGUgY21hIHJlZ2lvbnMgYXJlIGNvbmZpZ3VyZWQgaW4gRFQ/IEhvdyBkb2VzIHRoYXQgd29y ayBpZgo+IGl0J3Mgbm90IHVzaW5nIERUPwo+IAo+PiBPbiB0aGUgSGlLZXkvSGlLZXk5NjAgYm9h cmRzLCB3ZSBoYXZlIHRvIGFsbG9jYXRlIGNvbnRpZ3VvdXMgYnVmZmVycwo+PiBmb3IgdGhlIGRp c3BsYXkgZnJhbWVidWZmZXIuIFNvIGdyYWxsb2MgdXNlcyBJT04gdG8gYWxsb2NhdGUgZnJvbSB0 aGUKPj4gQ01BIGhlYXAuIEhvd2V2ZXIgb24gdGhlIGRiODQ1YywgaXQgaGFzIG5vIHN1Y2ggcmVz dHJpY3Rpb25zLCBzbyB0aGUKPj4gQ01BIGhlYXAgaXNuJ3QgbmVjZXNzYXJ5Lgo+IAo+IFdoeSBk byB5b3UgaGF2ZSBhIENNQSByZWdpb24gZm9yIHRoZSAybmQgYm9hcmQgaWYgeW91IGRvbid0IG5l ZWQgaXQ/Cj4gX1RoYXRfIHNvdW5kcyBsaWtlIHNvbWUgc2VyaW91cyBtZW1vcnkgd2FzdGVyLCBu b3QgYSBmZXcgbGluZXMgb2YgY29kZQo+IGxvYWRlZCBmb3Igbm90aGluZyA6LSkKPiAKPj4gV2l0 aCBBbmRyb2lkJ3MgR0tJIGVmZm9ydCwgdGhlcmUgbmVlZHMgdG8gYmUgb25lIGtlcm5lbCB0aGF0 IHdvcmtzIG9uCj4+IGFsbCB0aGUgZGV2aWNlcywgYW5kIHRoZXkgYXJlIHVzaW5nIG1vZHVsZXMg dG8gdHJ5IHRvIG1pbmltaXplIHRoZQo+PiBhbW91bnQgb2YgbWVtb3J5IHNwZW50IG9uIGZ1bmN0 aW9uYWxpdHkgdGhhdCBpc24ndCB1bml2ZXJzYWxseSBuZWVkZWQuCj4+IFNvIG9uIGRldmljZXMg dGhhdCBkb24ndCBuZWVkIHRoZSBDTUEgaGVhcCwgdGhleSdkIHByb2JhYmx5IHByZWZlciBub3QK Pj4gdG8gbG9hZCB0aGUgQ01BIGRtYWJ1ZiBoZWFwIGRyaXZlciwgc28gaXQgd291bGQgYmUgYmVz dCBpZiBpdCBjb3VsZCBiZQo+PiBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHdlIHdhbnQgdG8gYnVp bGQgdGhlIENNQSBoZWFwIGFzIGEgbW9kdWxlLCB0aGUKPj4gc3ltYm9scyBpdCB1c2VzIG5lZWQg dG8gYmUgZXhwb3J0ZWQuCj4gCj4gWWVhaCwgSSBndWVzcyBJJ20gZGlzYWdyZWVpbmcgb24gd2hl dGhlciBkbWEtYnVmIGhlYXBzIGFyZSBjb3JlIG9yIG5vdC4KPiAKPj4+IEV4cG9ydGluZyBzeW1i b2xzIGZvciBubyByZWFsIGluLXRyZWUgdXNlcnMgZmVlbHMgZmlzaHkuCj4+Cj4+IEknbSBzdWJt aXR0aW5nIGFuIGluLXRyZWUgdXNlciBoZXJlLiBTbyBJJ20gbm90IHN1cmUgd2hhdCB5b3UgbWVh bj8gIEkKPj4gc3VzcGVjdCB5b3UncmUgdGhpbmtpbmcgdGhlcmUgaXMgc29tZSBoaWRkZW4vbmVm YXJpb3VzIHBsYW4gaGVyZSwgYnV0Cj4+IHJlYWxseSB0aGVyZSBpc24ndC4KPiAKPiBJIHdhcyB3 b3JraW5nIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgeW91J3JlIG9ubHkgZXhwb3J0aW5nIHRo ZSBzeW1ib2xzCj4gZm9yIG90aGVyIGhlYXBzLCBhbmQga2VlcCB0aGUgY3VycmVudCBvbmVzIGlu LXRyZWUuIEFyZSB0aGVyZSBldmVuIGFueQo+IG91dC1vZi10cmVlIGRtYS1idWYgaGVhcHMgc3Rp bGw/IG91dC1vZi10cmVlIGFuZCBsZWdpdCBkaWZmZXJlbnQgdXNlLWNhc2UKPiBJIG1lYW4gb2Zj LCBub3QganVzdCBvdXQtb2YtdHJlZSBiZWNhdXNlIGluZXJ0aWEgOi0pCgpOb3Qgc3VyZSB3aGF0 IHlvdSBtZWFuIGhlcmUsIGhvcGVmdWxseSBhbGwgdGhlIGhlYXBzIGNhbiBiZSAiaW4tdHJlZSIK c29tZSBkYXkuCgpodHRwczovL3BhdGNod29yay5rZXJuZWwub3JnL3BhdGNoLzEwODYzOTU3LwoK UGx1cyBzb21lIG5vbi1jYWNoaW5nIGhlYXBzIGFuZCBvbmUgdGhhdCBmb3JjZXMgZWFybHkgYWxs b2NhdGlvbiBvZiBvdXIKUEFUIChnYXJ0IGxpa2UpIElQLgoKQWxsIHRoaXMgc3R1ZmYgaXMgZ29p bmcgaW50byBvdXIgZXZpbCB2ZW5kb3IgdHJlZSBuZXh0IGN5Y2xlIChpZiBub3QKdXBzdHJlYW0g YnkgdGhlbiA6KSksIGlmIHdlIHdhbnQgc29tZSBvZiB0aGVzZSAic3BlY2lhbHR5IiBoZWFwcyB0 byBnbwppbnRvIGdlbmVyaWMga2VybmVsIGJ1aWxkcyBhdCBzb21lIHBvaW50IHRoZXkgd2lsbCBu ZWVkIHRvIGJlIG1vZHVsZXMgaWYKdGhlIGNvcmUgaXMuCgpBbHRob3VnaCBJIGFtIHN0aWxsIHRo aW5raW5nIEhlYXBzIHNob3VsZCBiZSBhbHdheXMgYnVpbHQgaW4gKyBzeXN0ZW0gKwpDTUEgaGVh cHMsIHRoZW4gdGhlIHJhbmRvIGhlYXBzIGNvdWxkIGJlIG1vZHVsZXMgaWYgbmVlZGVkLgoKQW5k cmV3Cgo+IC1EYW5pZWwKPiAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJp LWRldmVs