From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [RFC PATCH] drm/vc4: Add a load tracker to prevent HVS underflow errors Date: Mon, 29 Oct 2018 09:06:40 +0100 Message-ID: <20181029080640.GQ21967@phenom.ffwll.local> References: <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> <20181026165233.7ebaf6c7@bbrezillon> <20181026151003.GY9144@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x542.google.com (mail-ed1-x542.google.com [IPv6:2a00:1450:4864:20::542]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9FA8189C19 for ; Mon, 29 Oct 2018 08:06:44 +0000 (UTC) Received: by mail-ed1-x542.google.com with SMTP id x31-v6so6429237edd.8 for ; Mon, 29 Oct 2018 01:06:44 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20181026151003.GY9144@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Cc: Boris Brezillon , "Hollingworth, Gordon" , dri-devel , Eben Upton List-Id: dri-devel@lists.freedesktop.org T24gRnJpLCBPY3QgMjYsIDIwMTggYXQgMDY6MTA6MDNQTSArMDMwMCwgVmlsbGUgU3lyasOkbMOk IHdyb3RlOgo+IE9uIEZyaSwgT2N0IDI2LCAyMDE4IGF0IDA0OjUyOjMzUE0gKzAyMDAsIEJvcmlz IEJyZXppbGxvbiB3cm90ZToKPiA+IE9uIEZyaSwgMjYgT2N0IDIwMTggMTY6MjY6MDMgKzAyMDAK PiA+IERhbmllbCBWZXR0ZXIgPGRhbmllbEBmZndsbC5jaD4gd3JvdGU6Cj4gPiAKPiA+ID4gT24g RnJpLCBPY3QgMjYsIDIwMTggYXQgMzo1NyBQTSBCb3JpcyBCcmV6aWxsb24KPiA+ID4gPGJvcmlz LmJyZXppbGxvbkBib290bGluLmNvbT4gd3JvdGU6Cj4gPiA+ID4KPiA+ID4gPiBPbiBGcmksIDI2 IE9jdCAyMDE4IDE1OjMwOjI2ICswMjAwCj4gPiA+ID4gRGFuaWVsIFZldHRlciA8ZGFuaWVsQGZm d2xsLmNoPiB3cm90ZToKPiA+ID4gPiAgCj4gPiA+ID4gPiBPbiBUaHUsIE9jdCAyNSwgMjAxOCBh dCAxMTo0MToxNEFNICswMjAwLCBCb3JpcyBCcmV6aWxsb24gd3JvdGU6ICAKPiA+ID4gPiA+ID4g T24gVGh1LCAyNSBPY3QgMjAxOCAxMTozMzoxNCArMDIwMAo+ID4gPiA+ID4gPiBEYW5pZWwgVmV0 dGVyIDxkYW5pZWxAZmZ3bGwuY2g+IHdyb3RlOgo+ID4gPiA+ID4gPiAgCj4gPiA+ID4gPiA+ID4g T24gVGh1LCBPY3QgMjUsIDIwMTggYXQgMTA6MDk6MzFBTSArMDIwMCwgQm9yaXMgQnJlemlsbG9u IHdyb3RlOiAgCj4gPiA+ID4gPiA+ID4gPiBPbiBUdWUsIDIzIE9jdCAyMDE4IDE1OjQ0OjQzICsw MjAwCj4gPiA+ID4gPiA+ID4gPiBEYW5pZWwgVmV0dGVyIDxkYW5pZWxAZmZ3bGwuY2g+IHdyb3Rl Ogo+ID4gPiA+ID4gPiA+ID4gIAo+ID4gPiA+ID4gPiA+ID4gPiBPbiBUdWUsIE9jdCAyMywgMjAx OCBhdCAwOTo1NTowOEFNICswMjAwLCBCb3JpcyBCcmV6aWxsb24gd3JvdGU6ICAKPiA+ID4gPiA+ ID4gPiA+ID4gPiBIaSBEYW5pZWwsCj4gPiA+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+ ID4gPiBPbiBUdWUsIDE2IE9jdCAyMDE4IDE0OjU3OjQzICswMjAwCj4gPiA+ID4gPiA+ID4gPiA+ ID4gRGFuaWVsIFZldHRlciA8ZGFuaWVsQGZmd2xsLmNoPiB3cm90ZToKPiA+ID4gPiA+ID4gPiA+ ID4gPiAgCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBPbiBUdWUsIE9jdCAxNiwgMjAxOCBhdCAxMTo0 MDo0NUFNICswMjAwLCBCb3JpcyBCcmV6aWxsb24gd3JvdGU6ICAKPiA+ID4gPiA+ID4gPiA+ID4g PiA+ID4gVGhlIEhWUyBibG9jayBpcyBzdXBwb3NlZCB0byBmaWxsIHRoZSBwaXhlbHZhbHZlIEZJ Rk9zIGZhc3QgZW5vdWdoIHRvCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IG1lZXQgdGhlIHJlcXVl c3RlZCBmcmFtZXJhdGUuIFRoZSBwcm9ibGVtIGlzLCB0aGUgSFZTIGFuZCBtZW1vcnkgYnVzCj4g PiA+ID4gPiA+ID4gPiA+ID4gPiA+IGJhbmR3aWR0aHMgYXJlIGxpbWl0ZWQsIGFuZCBpZiB3ZSBk b24ndCB0YWtlIHRoZXNlIGxpbWl0YXRpb25zIGludG8KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g YWNjb3VudCB3ZSBtaWdodCBlbmQgdXAgd2l0aCBIVlMgdW5kZXJmbG93IGVycm9ycy4KPiA+ID4g PiA+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gVGhpcyBwYXRjaCBpcyB0 cnlpbmcgdG8gbW9kZWwgdGhlIHBlci1wbGFuZSBIVlMgYW5kIG1lbW9yeSBidXMgYmFuZHdpZHRo Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IGNvbnN1bXB0aW9uIGFuZCB0YWtlIGEgZGVjaXNpb24g YXQgYXRvbWljX2NoZWNrKCkgdGltZSB3aGV0aGVyIHRoZQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4g PiBlc3RpbWF0ZWQgbG9hZCB3aWxsIGZpdCBpbiB0aGUgSFZTIGFuZCBtZW1idXMgYnVkZ2V0Lgo+ ID4gPiA+ID4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBOb3RlIHRoYXQg d2UgdGFrZSBhbiBleHRyYSBtYXJnaW4gb24gdGhlIG1lbW9yeSBidXMgY29uc3VtcHRpb24gdG8g bGV0Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IHRoZSBzeXN0ZW0gcnVuIHNtb290aGx5IHdoZW4g b3RoZXIgYmxvY2tzIGFyZSBkb2luZyBoZWF2eSB1c2Ugb2YgdGhlCj4gPiA+ID4gPiA+ID4gPiA+ ID4gPiA+IG1lbW9yeSBidXMuIFNhbWUgZ29lcyBmb3IgdGhlIEhWUyBsaW1pdCwgZXhjZXB0IHRo ZSBtYXJnaW4gaXMgc21hbGxlciBpbgo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiB0aGlzIGNhc2Us IHNpbmNlIHRoZSBIVlMgaXMgbm90IHVzZWQgYnkgZXh0ZXJuYWwgY29tcG9uZW50cy4KPiA+ID4g PiA+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gU2lnbmVkLW9mZi1ieTog Qm9yaXMgQnJlemlsbG9uIDxib3Jpcy5icmV6aWxsb25AYm9vdGxpbi5jb20+Cj4gPiA+ID4gPiA+ ID4gPiA+ID4gPiA+IC0tLQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBUaGlzIGxvZ2ljIGhhcyBi ZWVuIHZhbGlkYXRlZCB1c2luZyBhIHNpbXBsZSBzaGVsbCBzY3JpcHQgYW5kCj4gPiA+ID4gPiA+ ID4gPiA+ID4gPiA+IHNvbWUgaW5zdHJ1bWVudGF0aW9uIGluIHRoZSBWQzQgZHJpdmVyOgo+ID4g PiA+ID4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAtIGNhcHR1cmUgdW5k ZXJmbG93IGVycm9ycyBhdCB0aGUgSFZTIGxldmVsIGFuZCBleHBvc2UgYSBkZWJ1Z2ZzIGZpbGUK PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gICByZXBvcnRpbmcgdGhvc2UgZXJyb3JzCj4gPiA+ID4g PiA+ID4gPiA+ID4gPiA+IC0gYWRkIGRlYnVnZnMgZmlsZXMgdG8gZXhwb3NlIHdoZW4gYXRvbWlj X2NoZWNrIGZhaWxzIGJlY2F1c2Ugb2YgdGhlCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICAgSFZT IG9yIG1lbWJ1cyBsb2FkIGxpbWl0YXRpb24gb3Igd2hlbiBpdCBmYWlscyBmb3Igb3RoZXIgcmVh c29ucwo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBUaGUg YnJhbmNoIGNvbnRhaW5pbmcgdGhvc2UgbW9kaWZpY2F0aW9uIGlzIGF2YWlsYWJsZSBoZXJlIFsx XSwgYW5kIHRoZQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBzY3JpcHQgKHdoaWNoIGlzIGludGVy bmFsbHkgdXNpbmcgbW9kZXRlc3QpIGlzIGhlcmUgWzJdIChwbGVhc2Ugbm90ZQo+ID4gPiA+ID4g PiA+ID4gPiA+ID4gPiB0aGF0IEknbSBiYWQgYXQgd3JpdGluZyBzaGVsbCBzY3JpcHRzIDotKSku Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IE5vdGUgdGhh dCB0aG9zZSBtb2RpZmljYXRpb24gdGVuZCB0byBvdmVyLWVzdGltYXRlIHRoZSBsb2FkLCBhbmQg dGh1cwo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiByZWplY3Qgc2V0dXBzIHRoYXQgbWlnaHQgaGF2 ZSBwcmV2aW91c2x5IHdvcmtlZCwgc28gd2UgbWlnaHQgd2FudCB0bwo+ID4gPiA+ID4gPiA+ID4g PiA+ID4gPiBhZGp1c3QgdGhlIGxpbWl0cyB0byBhdm9pZCB0aGF0Lgo+ID4gPiA+ID4gPiA+ID4g PiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBbMV1odHRwczovL2dpdGh1Yi5jb20vYmJy ZXppbGxvbi9saW51eC90cmVlL3ZjNC9odnMtYmFuZHdpZHRoLWV2YWwKPiA+ID4gPiA+ID4gPiA+ ID4gPiA+ID4gWzJdaHR0cHM6Ly9naXRodWIuY29tL2JicmV6aWxsb24vdmM0LWh2cy1iYW5kd2lk dGgtdGVzdCAgCj4gPiA+ID4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gQW55 IGludGVyZXN0IGluIHVzaW5nIGlndCB0byB0ZXN0IHRoaXMgc3R1ZmY/IFdlIGhhdmUgYXQgbGVh c3QgYSBidW5jaCBvZgo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gdGVzdHMgYWxyZWFkeSBpbiB0aGVy ZSB0aGF0IHRyeSBhbGwga2luZHMgb2YgcGxhbmUgc2V0dXBzLiBBbmQgd2UgdXNlCj4gPiA+ID4g PiA+ID4gPiA+ID4gPiB0aG9zZSB0byBodW50IGZvciB1bmRlcnJ1bnMgb24gaTkxNSBody4KPiA+ ID4gPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBXcnQgdW5kZXJydW4gcmVw b3J0aW5nOiBPbiBpOTE1IHdlIGp1c3QgZHVtcCB0aGVtIGludG8gZG1lc2cgYXQgdGhlIGVycm9y Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBsZXZlbCwgdXNpbmcgRFJNX0VSUk9SLCAgCj4gPiA+ID4g PiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+ID4gPiBBcmUgeW91IG1hc2tpbmcgdGhlIHVuZGVy cnVuIGludGVycnVwdCBhZnRlciBpdCdzIGJlZW4gcmVwb3J0ZWQ/IElmIHdlCj4gPiA+ID4gPiA+ ID4gPiA+ID4gZG9uJ3QgZG8gdGhhdCBvbiBWQzQgd2UganVzdCBlbmQgdXAgZmxvb2RpbmcgdGhl IGtlcm5lbC1sb2cgYnVmZmVyIHVudGlsCj4gPiA+ID4gPiA+ID4gPiA+ID4gc29tZW9uZSBjb21l cyBhbmQgdXBkYXRlIHRoZSBjb25maWcuICAKPiA+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4g PiA+ID4gWWVhaCB3ZSBkbyB0aGF0IHRvby4gUnVsZSBpcyB0aGF0IGEgZnVsbCBtb2Rlc2V0IHdp bGwgY2xlYXIgYW55IHVuZGVycnVuCj4gPiA+ID4gPiA+ID4gPiA+IG1hc2tpbmcgKHNvIHRlc3Rz IG5lZWQgdG8gbWFrZSBzdXJlIHRoZXkgc3RhcnQgd2l0aCBhIG1vZGVzZXQsIG9yIGl0J2xsIGJl Cj4gPiA+ID4gPiA+ID4gPiA+IGZvciBub3RoaW5nKS4KPiA+ID4gPiA+ID4gPiA+ID4gIAo+ID4g PiA+ID4gPiA+ID4gPiA+ICAKPiA+ID4gPiA+ID4gPiA+ID4gPiA+IHBsdXMgYSB0cmFjZXBvaW50 LiBTZWUgZS5nLgo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gaW50ZWxfcGNoX2ZpZm9fdW5kZXJydW5f aXJxX2hhbmRsZXIoKS4gSWYgdGhlcmUncyBpbnRlcmVzdCB3ZSBjb3VsZAo+ID4gPiA+ID4gPiA+ ID4gPiA+ID4gcGVyaGFwcyBleHRyYWN0IHRoaXMgaW50byBzb21ldGhpbmcgY29tbW9uLCBzaW1p bGFyIHRvIHdoYXQgd2FzIGRvbmUgd2l0aAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gY3JjIHN1cHBv cnQgYWxyZWFkeS4KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICAKPiA+ID4gPiA+ID4gPiA+ID4gPgo+ ID4gPiA+ID4gPiA+ID4gPiA+IEknbSBub3QgYSBiaWcgZmFuIG9mIGhhcmRjb2RlZCB0cmFjZSBw b2ludHMgaW4gZ2VuZXJhbCAoYmVjYXVzZSBvZiB0aGUKPiA+ID4gPiA+ID4gPiA+ID4gPiB3aG9s ZSAiaXQncyBwYXJ0IG9mIHRoZSBzdGFibGUgQUJJIiB0aGluZyksIGFuZCBpbiB0aGlzIGNhc2Us IG1ha2luZyB0aGUKPiA+ID4gPiA+ID4gPiA+ID4gPiB0cmFjZXBvaW50IGdlbmVyaWMgc291bmRz IGV2ZW4gbW9yZSByaXNreSB0byBtZS4gSW5kZWVkLCBob3cgY2FuIHdlIGtub3cKPiA+ID4gPiA+ ID4gPiA+ID4gPiBhYm91dCBhbGwgdGhlIEhXIHNwZWNpZmljIGJpdHMgb25lIG1pZ2h0IHdhbnQg dG8gZXhwb3NlLiBGb3IgaW5zdGFuY2UsCj4gPiA+ID4gPiA+ID4gPiA+ID4gSSBzZWUgdGhlIGlu dGVsIHVuZGVycnVuIHRyYWNlcG9pbnQgZXhwb3NlcyBhIHN0cnVjdCB3aXRoIGEgZnJhbWUgYW5k Cj4gPiA+ID4gPiA+ID4gPiA+ID4gc2NhbmxpbmUgZmllbGQsIGFuZCBBRkFJQ1QsIHdlIGRvbid0 IGhhdmUgc3VjaCBpbmZvcm1hdGlvbiBpbiB0aGUgVkM0Cj4gPiA+ID4gPiA+ID4gPiA+ID4gY2Fz ZS4KPiA+ID4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4gPiA+IEFueSBvcGluaW9uIG9u IHRoYXQ/ICAKPiA+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+ID4gSXQncyBvbmx5IGFi aSBpZiB5b3UncmUgdW5sdWNreS4gSWYgaXQncyBqdXN0IGZvciBkZWJ1Z2dpbmcgYW5kCj4gPiA+ ID4gPiA+ID4gPiA+IHZhbGlkYXRpb24sIHlvdSBjYW4gY2hhbmdlIGl0IGFnYWluLiBUYmgsIG5v IGlkZWEgd2h5IHdlIGV2ZW4gaGF2ZSB0aGVzZQo+ID4gPiA+ID4gPiA+ID4gPiB0cmFjZXBvaW50 cywgdGhleSdyZSBmYWlybHkgdXNlbGVzcyBpbW8uIENJIG9ubHkgcmVsaWVzIHVwb24gdGhlIGRt ZXNnCj4gPiA+ID4gPiA+ID4gPiA+IG91dHB1dC4gTWF5YmUgcnVuIGdpdCBibGFtZSBhbmQgYXNr IHRoZSBvcmlnaW5hbCBhdXRob3IsIHdlIGNhbiBwcm9iYWJseQo+ID4gPiA+ID4gPiA+ID4gPiB1 cGRhdGUgdGhlbSB0byBzdWl0IG91ciBuZWVkcy4gIAo+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ ID4gPiA+IE9rYXksIEkgdGhpbmsgSSdsbCBnbyBmb3IgYSBnZW5lcmljIGRlYnVnZnMgZW50cnkg dGhhdCByZXR1cm5zIHRydWUKPiA+ID4gPiA+ID4gPiA+IHdoZW4gYW4gdW5kZXJydW4gZXJyb3Ig aGFwcGVuZWQgc2luY2UgdGhlIGxhc3QgbW9kZXNldCwgZmFsc2Ugb3RoZXJ3aXNlLgo+ID4gPiA+ ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+IE5leHQgcXVlc3Rpb24gaXM6IHNob3VsZCBJIGF0dGFj aCB0aGUgdW5kZXJydW4gc3RhdHVzIHRvIHRoZSBkcm1fZGV2aWNlCj4gPiA+ID4gPiA+ID4gPiBv ciBoYXZlIG9uZSBwZXIgQ1JUQz8gSW4gbXkgY2FzZSwgSSBvbmx5IGNhcmUgYWJvdXQgdGhlICJo YXMgYW4KPiA+ID4gPiA+ID4gPiA+IHVuZGVycnVuIGVycm9yIG9jY3VycmVkIG9uIGFueSBvZiB0 aGUgYWN0aXZlIENSVEMiIGNhc2UsIHNvIEknZCB2b3RlIGZvcgo+ID4gPiA+ID4gPiA+ID4gYSBw ZXItZGV2aWNlIHVuZGVycnVuIHN0YXR1cy4gIAo+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4g WWVhaCBwcm9iYWJseSBnb29kIGVub3VnaC4gRm9yIG91ciBDSSBhbGwgd2UgY2FyZSBhYm91dCBp cyB0aGUgd2Fybi9lcnJvcgo+ID4gPiA+ID4gPiA+IGxldmVsIGRtZXNnIG91dHB1dC4gQW55dGhp bmcgYXQgdGhhdCBsZXZlbCBpcyBjb25zaWRlcmVkIGEgQ0kgZmFpbHVyZS4gIAo+ID4gPiA+ID4g Pgo+ID4gPiA+ID4gPiBTbyBpZ3QgaXMgZ3JlcHBpbmcgZG1lc2cgdG8gZGV0ZWN0IHdoZW4gYW4g dW5kZXJydW4gaGFwcGVucz8gIAo+ID4gPiA+ID4KPiA+ID4gPiA+IE5vLCBidXQgdGhlIENJIHJ1 bm5lciBpcyBhbHNvIG9ic2VydmluZyBkbWVzZy4gQW55dGhpbmcgaW4gdGhlcmUgYXQKPiA+ID4g PiA+IHdhcm5pbmcgb3IgaGlnaGVyIGxldmVsIGlzIGNvbnNpZGVyZWQgYSBmYWlsdXJlLiAgCj4g PiA+ID4KPiA+ID4gPiBFcmljLCBkbyB5b3UgZG8gdGhlIHNhbWUgd2hlbiB5b3UgbGF1bmNoIHRo ZSBJR1QgdGVzdHN1aXRlPwo+ID4gPiA+ICAKPiA+ID4gPiA+ICAKPiA+ID4gPiA+ID4gPiBXaGF0 IGRvIHlvdSBuZWVkIHRoZSBkZWJ1Z2ZzIGZpbGUgZm9yPyAgCj4gPiA+ID4gPiA+Cj4gPiA+ID4g PiA+IEkganVzdCB0aG91Z2h0IGhhdmluZyBhIGRlYnVnZnMgZmlsZSB0byBleHBvc2UgdGhlIHVu ZGVycnVuIGluZm9ybWF0aW9uCj4gPiA+ID4gPiA+IHdvdWxkIGJlIGNsZWFuZXIgdGhhbiBoYXZp bmcgdG8gZ3JlcCBpbiBkbWVzZyB0byBkZXRlY3Qgc3VjaCBmYWlsdXJlcy4gIAo+ID4gPiA+ID4K PiA+ID4gPiA+IFRoZSBpc3N1ZSBpcyB0aGF0IHlvdSB3YW50IHRvIGRldGVjdCB1bmRlcnJ1bnMg ZXZlcnl3aGVyZSwgbm90IGp1c3QgaW4gdGhlCj4gPiA+ID4gPiBzcGVjaWZpYyB0ZXN0cyB5b3Un cmUgY2hlY2tpbmcgZm9yIGl0LiBBbnl0aGluZyB0aGF0IGRvZXMgYSBtb2Rlc2V0IGNvdWxkCj4g PiA+ID4gPiBjYXVzZSBhbiB1bmRlcnJ1biAoYXQgbGVhc3Qgd2UndmUgbWFuYWdlZCB0byBkbyBz byBwcmV0dHkgbXVjaCBldmVyeXdoZXJlCj4gPiA+ID4gPiBvbiBpOTE1IGh3LCBpZiB5b3UgbWlz cHJvZ3JhbSBpcyBzdWZmaWNpZW50bHkpLiAgCj4gPiA+ID4KPiA+ID4gPiBJbiBteSBzcGVjaWZp YyBjYXNlLCBJIHdhbnQgdG8gaGF2ZSB0aGUgSUdUIHRlc3QgY2hlY2sgdGhlIHVuZGVycnVuCj4g PiA+ID4gdmFsdWUgd2hpbGUgdGhlIHRlc3QgaXMgYmVpbmcgZXhlY3V0ZWQgc28gdGhhdCBJIGtu b3cgd2hpY2ggZXhhY3QKPiA+ID4gPiBjb25maWd1cmF0aW9uIHRyaWdnZXJzIHRoZSB1bmRlcnJ1 biBzaXR1YXRpb24uIEF0IGxlYXN0IHRoYXQncyBob3cgSQo+ID4gPiA+IGRpZCB0byBhZGp1c3Qv ZGVidWcgdGhlIEhWUyBsb2FkIHRyYWNraW5nIGNvZGUuIE1heWJlIGl0J3Mgbm90IHJlYWxseSBh Cj4gPiA+ID4gcHJvYmxlbSB3aGVuIGFsbCB3ZSBkbyBpcyB0cmFja2luZyByZWdyZXNzaW9ucy4g IAo+ID4gPiAKPiA+ID4gT2ssIHRoYXQgbWFrZXMgc2Vuc2UsIGFuZCBleHBsYWlucyB3aHkgeW91 IHdhbnQgdGhlIG92ZXJhbGwgdW5kZXJydW4KPiA+ID4gY291bnRlciBleHBvc2VkIGluIGRlYnVn ZnMuCj4gPiAKPiA+IEp1c3Qgb25lIHRpbnkgZGV0YWlsIHdoaWNoIGlzIG5vdCBleGFjdGx5IHJl bGF0ZWQgdG8gdGhpcyBkaXNjdXNzaW9uCj4gPiBidXQgSSB0aG91Z2h0IEknZCBtZW50aW9uIGl0 IGhlcmU6IHVuZGVycnVuIGlzIGFjdHVhbGx5IG5vdCBhIGNvdW50ZXIsCj4gPiBpdCdzIGp1c3Qg YSBib29sZWFuLiBJIHVzZWQgYW4gYXRvbWljX3QgdHlwZSB0byBhdm9pZCBoYXZpbmcgdG8gYWRk IGEKPiA+IHNwaW5sb2NrIHRvIHByb3RlY3QgdGhlIHZhcmlhYmxlICh0aGUgdmFyaWFibGUgaXMg bW9kaWZpZWQgZnJvbQo+ID4gYW4gaW50ZXJydXB0IGNvbnRleHQgYW5kIHJlYWQgZnJvbSBhIG5v bi1hdG9taWMgY29udGV4dCkuIFNvLCB0aGUKPiA+IGFjY2VwdGFibGUgdmFsdWVzIGZvciB1bmRl cnJ1biBhcmUgY3VycmVudGx5IDAgb3IgMS4gSSBjYW4gbWFrZSBpdCBhCj4gPiBjb3VudGVyIGlm IHJlcXVpcmVkLgo+IAo+IE9uZSBpZGVhIEkgaGFkIGEgd2hpbGUgYmFjayBmb3IgaTkxNSB3b3Vs ZCBiZSB0byBjb3VudCB0aGUgbnVtYmVyIG9mCj4gZnJhbWVzIHRoYXQgaGFkIGFuIHVuZGVycnVu LiBTbyBiYXNpY2FsbHkgc29tZXRoaW5nIGxpa2UgdGhpczoKPiAKPiB1bmRlcnJ1bl9pcnEoKSB7 Cj4gCXVuZGVycnVuX2ZyYW1lcz0xCj4gCWRpc2FibGVfdW5kZXJydW5faXJxKCk7Cj4gCXZibGFu a19nZXQoKTsKPiB9Cj4gdmJsYW5rX2lycSgpIHsKPiAJaWYgKHVuZGVycnVuKSB7Cj4gCQl1bmRl cnJ1bl9mcmFtZXMrKzsKPiAJfSBlbHNlIGlmICh1bmRlcnJ1bl9mcmFtZXMpIHsKPiAJCXZibGFu a19wdXQoKTsKPiAJCWVuYWJsZV91bmRlcnJ1bl9pcnEoKTsKPiAJCURFQlVHKCIlZCBmcmFtZXMg aGFkIGFuIHVuZGVycnVuXG4iLCB1bmRlcnJ1bl9mcmFtZXMpOwo+IAkJdW5kZXJydW5fZnJhbWVz PTA7Cj4gCX0KPiB9Cj4gCj4gVGhpcyBhdm9pZHMgZHJvd25pbmcgaW4gdW5kZXJydW4gaW50ZXJy dXB0cyB3aGlsZSBzdGlsbAo+IHJlcG9ydGluZyBhdCBsZWFzdCBob3cgbWFueSBmcmFtZXMgaGFk IHByb2JsZW1zLgo+IAo+IEJ1dCBJIGhhdmVuJ3QgaGFkIHRpbWUgdG8gaW1wbGVtZW50IHRoYXQg eWV0LgoKVGhlIG90aGVyIHVwc2hvdCBvZiBhIGNvdW50ZXIgaXMgdGhhdCB0aGVyZSdzIG5vIHBy b2JsZW0gd2l0aCByZXNldHRpbmcuClVzZXJzcGFjZSBzaW1wbHkgZ3JhYnMgdGhlIGNvdW50ZXIg YmVmb3JlIGFuZCBhZnRlciB0aGUgdGVzdCBhbmQgY29tcGFyZXMuCklmIHlvdSBvbmx5IGhhdmUg MC8xIHlvdSBuZWVkIHNvbWUgd2F5IHRvIHJlc2V0LCBvciBvdGhlcndpc2UgYXV0b21hdGVkCnJ1 bm5pbmcgaW4gYSBDSSBmYXJtIGlzbid0IHBvc3NpYmxlLgotRGFuaWVsCi0tIApEYW5pZWwgVmV0 dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZnds bC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmkt ZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK