From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Brezillon Subject: Re: [RFC PATCH] drm/vc4: Add a load tracker to prevent HVS underflow errors Date: Fri, 26 Oct 2018 16:52:33 +0200 Message-ID: <20181026165233.7ebaf6c7@bbrezillon> References: <20181016094045.23021-1-boris.brezillon@bootlin.com> <20181016125743.GZ31561@phenom.ffwll.local> <20181023095508.21a9cabd@bbrezillon> <20181023134443.GQ324@phenom.ffwll.local> <20181025100931.50fddf7e@bbrezillon> <20181025093314.GB21967@phenom.ffwll.local> <20181025114114.42caf97d@bbrezillon> <20181026133026.GM21967@phenom.ffwll.local> <20181026155748.70b9a6bd@bbrezillon> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail.bootlin.com (mail.bootlin.com [62.4.15.54]) by gabe.freedesktop.org (Postfix) with ESMTP id D3B626E4A8 for ; Fri, 26 Oct 2018 14:53:01 +0000 (UTC) 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: Daniel Vetter Cc: "Hollingworth, Gordon" , dri-devel , Eben Upton List-Id: dri-devel@lists.freedesktop.org T24gRnJpLCAyNiBPY3QgMjAxOCAxNjoyNjowMyArMDIwMApEYW5pZWwgVmV0dGVyIDxkYW5pZWxA ZmZ3bGwuY2g+IHdyb3RlOgoKPiBPbiBGcmksIE9jdCAyNiwgMjAxOCBhdCAzOjU3IFBNIEJvcmlz IEJyZXppbGxvbgo+IDxib3Jpcy5icmV6aWxsb25AYm9vdGxpbi5jb20+IHdyb3RlOgo+ID4KPiA+ IE9uIEZyaSwgMjYgT2N0IDIwMTggMTU6MzA6MjYgKzAyMDAKPiA+IERhbmllbCBWZXR0ZXIgPGRh bmllbEBmZndsbC5jaD4gd3JvdGU6Cj4gPiAgCj4gPiA+IE9uIFRodSwgT2N0IDI1LCAyMDE4IGF0 IDExOjQxOjE0QU0gKzAyMDAsIEJvcmlzIEJyZXppbGxvbiB3cm90ZTogIAo+ID4gPiA+IE9uIFRo dSwgMjUgT2N0IDIwMTggMTE6MzM6MTQgKzAyMDAKPiA+ID4gPiBEYW5pZWwgVmV0dGVyIDxkYW5p ZWxAZmZ3bGwuY2g+IHdyb3RlOgo+ID4gPiA+ICAKPiA+ID4gPiA+IE9uIFRodSwgT2N0IDI1LCAy MDE4IGF0IDEwOjA5OjMxQU0gKzAyMDAsIEJvcmlzIEJyZXppbGxvbiB3cm90ZTogIAo+ID4gPiA+ ID4gPiBPbiBUdWUsIDIzIE9jdCAyMDE4IDE1OjQ0OjQzICswMjAwCj4gPiA+ID4gPiA+IERhbmll bCBWZXR0ZXIgPGRhbmllbEBmZndsbC5jaD4gd3JvdGU6Cj4gPiA+ID4gPiA+ICAKPiA+ID4gPiA+ ID4gPiBPbiBUdWUsIE9jdCAyMywgMjAxOCBhdCAwOTo1NTowOEFNICswMjAwLCBCb3JpcyBCcmV6 aWxsb24gd3JvdGU6ICAKPiA+ID4gPiA+ID4gPiA+IEhpIERhbmllbCwKPiA+ID4gPiA+ID4gPiA+ Cj4gPiA+ID4gPiA+ID4gPiBPbiBUdWUsIDE2IE9jdCAyMDE4IDE0OjU3OjQzICswMjAwCj4gPiA+ ID4gPiA+ID4gPiBEYW5pZWwgVmV0dGVyIDxkYW5pZWxAZmZ3bGwuY2g+IHdyb3RlOgo+ID4gPiA+ ID4gPiA+ID4gIAo+ID4gPiA+ID4gPiA+ID4gPiBPbiBUdWUsIE9jdCAxNiwgMjAxOCBhdCAxMTo0 MDo0NUFNICswMjAwLCBCb3JpcyBCcmV6aWxsb24gd3JvdGU6ICAKPiA+ID4gPiA+ID4gPiA+ID4g PiBUaGUgSFZTIGJsb2NrIGlzIHN1cHBvc2VkIHRvIGZpbGwgdGhlIHBpeGVsdmFsdmUgRklGT3Mg ZmFzdCBlbm91Z2ggdG8KPiA+ID4gPiA+ID4gPiA+ID4gPiBtZWV0IHRoZSByZXF1ZXN0ZWQgZnJh bWVyYXRlLiBUaGUgcHJvYmxlbSBpcywgdGhlIEhWUyBhbmQgbWVtb3J5IGJ1cwo+ID4gPiA+ID4g PiA+ID4gPiA+IGJhbmR3aWR0aHMgYXJlIGxpbWl0ZWQsIGFuZCBpZiB3ZSBkb24ndCB0YWtlIHRo ZXNlIGxpbWl0YXRpb25zIGludG8KPiA+ID4gPiA+ID4gPiA+ID4gPiBhY2NvdW50IHdlIG1pZ2h0 IGVuZCB1cCB3aXRoIEhWUyB1bmRlcmZsb3cgZXJyb3JzLgo+ID4gPiA+ID4gPiA+ID4gPiA+Cj4g PiA+ID4gPiA+ID4gPiA+ID4gVGhpcyBwYXRjaCBpcyB0cnlpbmcgdG8gbW9kZWwgdGhlIHBlci1w bGFuZSBIVlMgYW5kIG1lbW9yeSBidXMgYmFuZHdpZHRoCj4gPiA+ID4gPiA+ID4gPiA+ID4gY29u c3VtcHRpb24gYW5kIHRha2UgYSBkZWNpc2lvbiBhdCBhdG9taWNfY2hlY2soKSB0aW1lIHdoZXRo ZXIgdGhlCj4gPiA+ID4gPiA+ID4gPiA+ID4gZXN0aW1hdGVkIGxvYWQgd2lsbCBmaXQgaW4gdGhl IEhWUyBhbmQgbWVtYnVzIGJ1ZGdldC4KPiA+ID4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ ID4gPiA+IE5vdGUgdGhhdCB3ZSB0YWtlIGFuIGV4dHJhIG1hcmdpbiBvbiB0aGUgbWVtb3J5IGJ1 cyBjb25zdW1wdGlvbiB0byBsZXQKPiA+ID4gPiA+ID4gPiA+ID4gPiB0aGUgc3lzdGVtIHJ1biBz bW9vdGhseSB3aGVuIG90aGVyIGJsb2NrcyBhcmUgZG9pbmcgaGVhdnkgdXNlIG9mIHRoZQo+ID4g PiA+ID4gPiA+ID4gPiA+IG1lbW9yeSBidXMuIFNhbWUgZ29lcyBmb3IgdGhlIEhWUyBsaW1pdCwg ZXhjZXB0IHRoZSBtYXJnaW4gaXMgc21hbGxlciBpbgo+ID4gPiA+ID4gPiA+ID4gPiA+IHRoaXMg Y2FzZSwgc2luY2UgdGhlIEhWUyBpcyBub3QgdXNlZCBieSBleHRlcm5hbCBjb21wb25lbnRzLgo+ ID4gPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiA+ID4gU2lnbmVkLW9mZi1ieTogQm9y aXMgQnJlemlsbG9uIDxib3Jpcy5icmV6aWxsb25AYm9vdGxpbi5jb20+Cj4gPiA+ID4gPiA+ID4g PiA+ID4gLS0tCj4gPiA+ID4gPiA+ID4gPiA+ID4gVGhpcyBsb2dpYyBoYXMgYmVlbiB2YWxpZGF0 ZWQgdXNpbmcgYSBzaW1wbGUgc2hlbGwgc2NyaXB0IGFuZAo+ID4gPiA+ID4gPiA+ID4gPiA+IHNv bWUgaW5zdHJ1bWVudGF0aW9uIGluIHRoZSBWQzQgZHJpdmVyOgo+ID4gPiA+ID4gPiA+ID4gPiA+ Cj4gPiA+ID4gPiA+ID4gPiA+ID4gLSBjYXB0dXJlIHVuZGVyZmxvdyBlcnJvcnMgYXQgdGhlIEhW UyBsZXZlbCBhbmQgZXhwb3NlIGEgZGVidWdmcyBmaWxlCj4gPiA+ID4gPiA+ID4gPiA+ID4gICBy ZXBvcnRpbmcgdGhvc2UgZXJyb3JzCj4gPiA+ID4gPiA+ID4gPiA+ID4gLSBhZGQgZGVidWdmcyBm aWxlcyB0byBleHBvc2Ugd2hlbiBhdG9taWNfY2hlY2sgZmFpbHMgYmVjYXVzZSBvZiB0aGUKPiA+ ID4gPiA+ID4gPiA+ID4gPiAgIEhWUyBvciBtZW1idXMgbG9hZCBsaW1pdGF0aW9uIG9yIHdoZW4g aXQgZmFpbHMgZm9yIG90aGVyIHJlYXNvbnMKPiA+ID4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4g PiA+ID4gPiA+IFRoZSBicmFuY2ggY29udGFpbmluZyB0aG9zZSBtb2RpZmljYXRpb24gaXMgYXZh aWxhYmxlIGhlcmUgWzFdLCBhbmQgdGhlCj4gPiA+ID4gPiA+ID4gPiA+ID4gc2NyaXB0ICh3aGlj aCBpcyBpbnRlcm5hbGx5IHVzaW5nIG1vZGV0ZXN0KSBpcyBoZXJlIFsyXSAocGxlYXNlIG5vdGUK PiA+ID4gPiA+ID4gPiA+ID4gPiB0aGF0IEknbSBiYWQgYXQgd3JpdGluZyBzaGVsbCBzY3JpcHRz IDotKSkuCj4gPiA+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+ID4gPiBOb3RlIHRoYXQg dGhvc2UgbW9kaWZpY2F0aW9uIHRlbmQgdG8gb3Zlci1lc3RpbWF0ZSB0aGUgbG9hZCwgYW5kIHRo dXMKPiA+ID4gPiA+ID4gPiA+ID4gPiByZWplY3Qgc2V0dXBzIHRoYXQgbWlnaHQgaGF2ZSBwcmV2 aW91c2x5IHdvcmtlZCwgc28gd2UgbWlnaHQgd2FudCB0bwo+ID4gPiA+ID4gPiA+ID4gPiA+IGFk anVzdCB0aGUgbGltaXRzIHRvIGF2b2lkIHRoYXQuCj4gPiA+ID4gPiA+ID4gPiA+ID4KPiA+ID4g PiA+ID4gPiA+ID4gPiBbMV1odHRwczovL2dpdGh1Yi5jb20vYmJyZXppbGxvbi9saW51eC90cmVl L3ZjNC9odnMtYmFuZHdpZHRoLWV2YWwKPiA+ID4gPiA+ID4gPiA+ID4gPiBbMl1odHRwczovL2dp dGh1Yi5jb20vYmJyZXppbGxvbi92YzQtaHZzLWJhbmR3aWR0aC10ZXN0ICAKPiA+ID4gPiA+ID4g PiA+ID4KPiA+ID4gPiA+ID4gPiA+ID4gQW55IGludGVyZXN0IGluIHVzaW5nIGlndCB0byB0ZXN0 IHRoaXMgc3R1ZmY/IFdlIGhhdmUgYXQgbGVhc3QgYSBidW5jaCBvZgo+ID4gPiA+ID4gPiA+ID4g PiB0ZXN0cyBhbHJlYWR5IGluIHRoZXJlIHRoYXQgdHJ5IGFsbCBraW5kcyBvZiBwbGFuZSBzZXR1 cHMuIEFuZCB3ZSB1c2UKPiA+ID4gPiA+ID4gPiA+ID4gdGhvc2UgdG8gaHVudCBmb3IgdW5kZXJy dW5zIG9uIGk5MTUgaHcuCj4gPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiA+IFdydCB1 bmRlcnJ1biByZXBvcnRpbmc6IE9uIGk5MTUgd2UganVzdCBkdW1wIHRoZW0gaW50byBkbWVzZyBh dCB0aGUgZXJyb3IKPiA+ID4gPiA+ID4gPiA+ID4gbGV2ZWwsIHVzaW5nIERSTV9FUlJPUiwgIAo+ ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+IEFyZSB5b3UgbWFza2luZyB0aGUgdW5kZXJy dW4gaW50ZXJydXB0IGFmdGVyIGl0J3MgYmVlbiByZXBvcnRlZD8gSWYgd2UKPiA+ID4gPiA+ID4g PiA+IGRvbid0IGRvIHRoYXQgb24gVkM0IHdlIGp1c3QgZW5kIHVwIGZsb29kaW5nIHRoZSBrZXJu ZWwtbG9nIGJ1ZmZlciB1bnRpbAo+ID4gPiA+ID4gPiA+ID4gc29tZW9uZSBjb21lcyBhbmQgdXBk YXRlIHRoZSBjb25maWcuICAKPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+IFllYWggd2UgZG8g dGhhdCB0b28uIFJ1bGUgaXMgdGhhdCBhIGZ1bGwgbW9kZXNldCB3aWxsIGNsZWFyIGFueSB1bmRl cnJ1bgo+ID4gPiA+ID4gPiA+IG1hc2tpbmcgKHNvIHRlc3RzIG5lZWQgdG8gbWFrZSBzdXJlIHRo ZXkgc3RhcnQgd2l0aCBhIG1vZGVzZXQsIG9yIGl0J2xsIGJlCj4gPiA+ID4gPiA+ID4gZm9yIG5v dGhpbmcpLgo+ID4gPiA+ID4gPiA+ICAKPiA+ID4gPiA+ID4gPiA+ICAKPiA+ID4gPiA+ID4gPiA+ ID4gcGx1cyBhIHRyYWNlcG9pbnQuIFNlZSBlLmcuCj4gPiA+ID4gPiA+ID4gPiA+IGludGVsX3Bj aF9maWZvX3VuZGVycnVuX2lycV9oYW5kbGVyKCkuIElmIHRoZXJlJ3MgaW50ZXJlc3Qgd2UgY291 bGQKPiA+ID4gPiA+ID4gPiA+ID4gcGVyaGFwcyBleHRyYWN0IHRoaXMgaW50byBzb21ldGhpbmcg Y29tbW9uLCBzaW1pbGFyIHRvIHdoYXQgd2FzIGRvbmUgd2l0aAo+ID4gPiA+ID4gPiA+ID4gPiBj cmMgc3VwcG9ydCBhbHJlYWR5Lgo+ID4gPiA+ID4gPiA+ID4gPiAgCj4gPiA+ID4gPiA+ID4gPgo+ ID4gPiA+ID4gPiA+ID4gSSdtIG5vdCBhIGJpZyBmYW4gb2YgaGFyZGNvZGVkIHRyYWNlIHBvaW50 cyBpbiBnZW5lcmFsIChiZWNhdXNlIG9mIHRoZQo+ID4gPiA+ID4gPiA+ID4gd2hvbGUgIml0J3Mg cGFydCBvZiB0aGUgc3RhYmxlIEFCSSIgdGhpbmcpLCBhbmQgaW4gdGhpcyBjYXNlLCBtYWtpbmcg dGhlCj4gPiA+ID4gPiA+ID4gPiB0cmFjZXBvaW50IGdlbmVyaWMgc291bmRzIGV2ZW4gbW9yZSBy aXNreSB0byBtZS4gSW5kZWVkLCBob3cgY2FuIHdlIGtub3cKPiA+ID4gPiA+ID4gPiA+IGFib3V0 IGFsbCB0aGUgSFcgc3BlY2lmaWMgYml0cyBvbmUgbWlnaHQgd2FudCB0byBleHBvc2UuIEZvciBp bnN0YW5jZSwKPiA+ID4gPiA+ID4gPiA+IEkgc2VlIHRoZSBpbnRlbCB1bmRlcnJ1biB0cmFjZXBv aW50IGV4cG9zZXMgYSBzdHJ1Y3Qgd2l0aCBhIGZyYW1lIGFuZAo+ID4gPiA+ID4gPiA+ID4gc2Nh bmxpbmUgZmllbGQsIGFuZCBBRkFJQ1QsIHdlIGRvbid0IGhhdmUgc3VjaCBpbmZvcm1hdGlvbiBp biB0aGUgVkM0Cj4gPiA+ID4gPiA+ID4gPiBjYXNlLgo+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ ID4gPiA+IEFueSBvcGluaW9uIG9uIHRoYXQ/ICAKPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ IEl0J3Mgb25seSBhYmkgaWYgeW91J3JlIHVubHVja3kuIElmIGl0J3MganVzdCBmb3IgZGVidWdn aW5nIGFuZAo+ID4gPiA+ID4gPiA+IHZhbGlkYXRpb24sIHlvdSBjYW4gY2hhbmdlIGl0IGFnYWlu LiBUYmgsIG5vIGlkZWEgd2h5IHdlIGV2ZW4gaGF2ZSB0aGVzZQo+ID4gPiA+ID4gPiA+IHRyYWNl cG9pbnRzLCB0aGV5J3JlIGZhaXJseSB1c2VsZXNzIGltby4gQ0kgb25seSByZWxpZXMgdXBvbiB0 aGUgZG1lc2cKPiA+ID4gPiA+ID4gPiBvdXRwdXQuIE1heWJlIHJ1biBnaXQgYmxhbWUgYW5kIGFz ayB0aGUgb3JpZ2luYWwgYXV0aG9yLCB3ZSBjYW4gcHJvYmFibHkKPiA+ID4gPiA+ID4gPiB1cGRh dGUgdGhlbSB0byBzdWl0IG91ciBuZWVkcy4gIAo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiBPa2F5 LCBJIHRoaW5rIEknbGwgZ28gZm9yIGEgZ2VuZXJpYyBkZWJ1Z2ZzIGVudHJ5IHRoYXQgcmV0dXJu cyB0cnVlCj4gPiA+ID4gPiA+IHdoZW4gYW4gdW5kZXJydW4gZXJyb3IgaGFwcGVuZWQgc2luY2Ug dGhlIGxhc3QgbW9kZXNldCwgZmFsc2Ugb3RoZXJ3aXNlLgo+ID4gPiA+ID4gPgo+ID4gPiA+ID4g PiBOZXh0IHF1ZXN0aW9uIGlzOiBzaG91bGQgSSBhdHRhY2ggdGhlIHVuZGVycnVuIHN0YXR1cyB0 byB0aGUgZHJtX2RldmljZQo+ID4gPiA+ID4gPiBvciBoYXZlIG9uZSBwZXIgQ1JUQz8gSW4gbXkg Y2FzZSwgSSBvbmx5IGNhcmUgYWJvdXQgdGhlICJoYXMgYW4KPiA+ID4gPiA+ID4gdW5kZXJydW4g ZXJyb3Igb2NjdXJyZWQgb24gYW55IG9mIHRoZSBhY3RpdmUgQ1JUQyIgY2FzZSwgc28gSSdkIHZv dGUgZm9yCj4gPiA+ID4gPiA+IGEgcGVyLWRldmljZSB1bmRlcnJ1biBzdGF0dXMuICAKPiA+ID4g PiA+Cj4gPiA+ID4gPiBZZWFoIHByb2JhYmx5IGdvb2QgZW5vdWdoLiBGb3Igb3VyIENJIGFsbCB3 ZSBjYXJlIGFib3V0IGlzIHRoZSB3YXJuL2Vycm9yCj4gPiA+ID4gPiBsZXZlbCBkbWVzZyBvdXRw dXQuIEFueXRoaW5nIGF0IHRoYXQgbGV2ZWwgaXMgY29uc2lkZXJlZCBhIENJIGZhaWx1cmUuICAK PiA+ID4gPgo+ID4gPiA+IFNvIGlndCBpcyBncmVwcGluZyBkbWVzZyB0byBkZXRlY3Qgd2hlbiBh biB1bmRlcnJ1biBoYXBwZW5zPyAgCj4gPiA+Cj4gPiA+IE5vLCBidXQgdGhlIENJIHJ1bm5lciBp cyBhbHNvIG9ic2VydmluZyBkbWVzZy4gQW55dGhpbmcgaW4gdGhlcmUgYXQKPiA+ID4gd2Fybmlu ZyBvciBoaWdoZXIgbGV2ZWwgaXMgY29uc2lkZXJlZCBhIGZhaWx1cmUuICAKPiA+Cj4gPiBFcmlj LCBkbyB5b3UgZG8gdGhlIHNhbWUgd2hlbiB5b3UgbGF1bmNoIHRoZSBJR1QgdGVzdHN1aXRlPwo+ ID4gIAo+ID4gPiAgCj4gPiA+ID4gPiBXaGF0IGRvIHlvdSBuZWVkIHRoZSBkZWJ1Z2ZzIGZpbGUg Zm9yPyAgCj4gPiA+ID4KPiA+ID4gPiBJIGp1c3QgdGhvdWdodCBoYXZpbmcgYSBkZWJ1Z2ZzIGZp bGUgdG8gZXhwb3NlIHRoZSB1bmRlcnJ1biBpbmZvcm1hdGlvbgo+ID4gPiA+IHdvdWxkIGJlIGNs ZWFuZXIgdGhhbiBoYXZpbmcgdG8gZ3JlcCBpbiBkbWVzZyB0byBkZXRlY3Qgc3VjaCBmYWlsdXJl cy4gIAo+ID4gPgo+ID4gPiBUaGUgaXNzdWUgaXMgdGhhdCB5b3Ugd2FudCB0byBkZXRlY3QgdW5k ZXJydW5zIGV2ZXJ5d2hlcmUsIG5vdCBqdXN0IGluIHRoZQo+ID4gPiBzcGVjaWZpYyB0ZXN0cyB5 b3UncmUgY2hlY2tpbmcgZm9yIGl0LiBBbnl0aGluZyB0aGF0IGRvZXMgYSBtb2Rlc2V0IGNvdWxk Cj4gPiA+IGNhdXNlIGFuIHVuZGVycnVuIChhdCBsZWFzdCB3ZSd2ZSBtYW5hZ2VkIHRvIGRvIHNv IHByZXR0eSBtdWNoIGV2ZXJ5d2hlcmUKPiA+ID4gb24gaTkxNSBodywgaWYgeW91IG1pc3Byb2dy YW0gaXMgc3VmZmljaWVudGx5KS4gIAo+ID4KPiA+IEluIG15IHNwZWNpZmljIGNhc2UsIEkgd2Fu dCB0byBoYXZlIHRoZSBJR1QgdGVzdCBjaGVjayB0aGUgdW5kZXJydW4KPiA+IHZhbHVlIHdoaWxl IHRoZSB0ZXN0IGlzIGJlaW5nIGV4ZWN1dGVkIHNvIHRoYXQgSSBrbm93IHdoaWNoIGV4YWN0Cj4g PiBjb25maWd1cmF0aW9uIHRyaWdnZXJzIHRoZSB1bmRlcnJ1biBzaXR1YXRpb24uIEF0IGxlYXN0 IHRoYXQncyBob3cgSQo+ID4gZGlkIHRvIGFkanVzdC9kZWJ1ZyB0aGUgSFZTIGxvYWQgdHJhY2tp bmcgY29kZS4gTWF5YmUgaXQncyBub3QgcmVhbGx5IGEKPiA+IHByb2JsZW0gd2hlbiBhbGwgd2Ug ZG8gaXMgdHJhY2tpbmcgcmVncmVzc2lvbnMuICAKPiAKPiBPaywgdGhhdCBtYWtlcyBzZW5zZSwg YW5kIGV4cGxhaW5zIHdoeSB5b3Ugd2FudCB0aGUgb3ZlcmFsbCB1bmRlcnJ1bgo+IGNvdW50ZXIg ZXhwb3NlZCBpbiBkZWJ1Z2ZzLgoKSnVzdCBvbmUgdGlueSBkZXRhaWwgd2hpY2ggaXMgbm90IGV4 YWN0bHkgcmVsYXRlZCB0byB0aGlzIGRpc2N1c3Npb24KYnV0IEkgdGhvdWdodCBJJ2QgbWVudGlv biBpdCBoZXJlOiB1bmRlcnJ1biBpcyBhY3R1YWxseSBub3QgYSBjb3VudGVyLAppdCdzIGp1c3Qg YSBib29sZWFuLiBJIHVzZWQgYW4gYXRvbWljX3QgdHlwZSB0byBhdm9pZCBoYXZpbmcgdG8gYWRk IGEKc3BpbmxvY2sgdG8gcHJvdGVjdCB0aGUgdmFyaWFibGUgKHRoZSB2YXJpYWJsZSBpcyBtb2Rp ZmllZCBmcm9tCmFuIGludGVycnVwdCBjb250ZXh0IGFuZCByZWFkIGZyb20gYSBub24tYXRvbWlj IGNvbnRleHQpLiBTbywgdGhlCmFjY2VwdGFibGUgdmFsdWVzIGZvciB1bmRlcnJ1biBhcmUgY3Vy cmVudGx5IDAgb3IgMS4gSSBjYW4gbWFrZSBpdCBhCmNvdW50ZXIgaWYgcmVxdWlyZWQuCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFp bGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK