From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [Intel-gfx] [PATCH] drm/vblank: Fixup and document timestamp update/read barriers Date: Tue, 5 May 2015 17:42:06 +0200 Message-ID: <20150505154206.GB30184@phenom.ffwll.local> References: <1429082222-20820-1-git-send-email-daniel.vetter@ffwll.ch> <552E60D4.3070307@hurleysoftware.com> <20150415173153.GA6092@phenom.ffwll.local> <552FAB7F.4040707@hurleysoftware.com> <20150416130323.GG5082@phenom.ffwll.local> <5546FB02.4010508@gmail.com> <5548D568.3050109@hurleysoftware.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wi0-f172.google.com (mail-wi0-f172.google.com [209.85.212.172]) by gabe.freedesktop.org (Postfix) with ESMTP id 23CB36E10F for ; Tue, 5 May 2015 08:39:48 -0700 (PDT) Received: by widdi4 with SMTP id di4so166315419wid.0 for ; Tue, 05 May 2015 08:39:47 -0700 (PDT) Content-Disposition: inline In-Reply-To: <5548D568.3050109@hurleysoftware.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Peter Hurley Cc: Daniel Vetter , Intel Graphics Development , DRI Development , Daniel Vetter , Michel =?iso-8859-1?Q?D=E4nzer?= List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCBNYXkgMDUsIDIwMTUgYXQgMTA6MzY6MjRBTSAtMDQwMCwgUGV0ZXIgSHVybGV5IHdy b3RlOgo+IE9uIDA1LzA0LzIwMTUgMTI6NTIgQU0sIE1hcmlvIEtsZWluZXIgd3JvdGU6Cj4gPiBP biAwNC8xNi8yMDE1IDAzOjAzIFBNLCBEYW5pZWwgVmV0dGVyIHdyb3RlOgo+ID4+IE9uIFRodSwg QXByIDE2LCAyMDE1IGF0IDA4OjMwOjU1QU0gLTA0MDAsIFBldGVyIEh1cmxleSB3cm90ZToKPiA+ Pj4gT24gMDQvMTUvMjAxNSAwMTozMSBQTSwgRGFuaWVsIFZldHRlciB3cm90ZToKPiA+Pj4+IE9u IFdlZCwgQXByIDE1LCAyMDE1IGF0IDA5OjAwOjA0QU0gLTA0MDAsIFBldGVyIEh1cmxleSB3cm90 ZToKPiA+Pj4+PiBIaSBEYW5pZWwsCj4gPj4+Pj4KPiA+Pj4+PiBPbiAwNC8xNS8yMDE1IDAzOjE3 IEFNLCBEYW5pZWwgVmV0dGVyIHdyb3RlOgo+ID4+Pj4+PiBUaGlzIHdhcyBhIGJpdCB0b28gbXVj aCBjYXJnby1jdWx0ZWQsIHNvIGxldHMgbWFrZSBpdCBzb2xpZDoKPiA+Pj4+Pj4gLSB2Ymxhbmst PmNvdW50IGRvZXNuJ3QgbmVlZCB0byBiZSBhbiBhdG9taWMsIHdyaXRlcyBhcmUgYWx3YXlzIGRv bmUKPiA+Pj4+Pj4gICAgdW5kZXIgdGhlIHByb3RlY3Rpb24gb2YgZGV2LT52YmxhbmtfdGltZV9s b2NrLiBTd2l0Y2ggdG8gYW4gdW5zaWduZWQKPiA+Pj4+Pj4gICAgbG9uZyBpbnN0ZWFkIGFuZCB1 cGRhdGUgY29tbWVudHMuIE5vdGUgdGhhdCBhdG9taWNfcmVhZCBpcyBqdXN0IGEKPiA+Pj4+Pj4g ICAgbm9ybWFsIHJlYWQgb2YgYSB2b2xhdGlsZSB2YXJpYWJsZSwgc28gbm8gbmVlZCB0byBhdWRp dCBhbGwgdGhlCj4gPj4+Pj4+ICAgIHJlYWQtc2lkZSBhY2Nlc3Mgc3BlY2lmaWNhbGx5Lgo+ID4+ Pj4+Pgo+ID4+Pj4+PiAtIFRoZSBiYXJyaWVycyBmb3IgdGhlIHZibGFuayBjb3VudGVyIHNlcWxv Y2sgd2VyZW4ndCBjb21wbGV0ZTogVGhlCj4gPj4+Pj4+ICAgIHJlYWQtc2lkZSB3YXMgbWlzc2lu ZyB0aGUgZmlyc3QgYmFycmllciBiZXR3ZWVuIHRoZSBjb3VudGVyIHJlYWQgYW5kCj4gPj4+Pj4+ ICAgIHRoZSB0aW1lc3RhbXAgcmVhZCwgaXQgb25seSBoYWQgYSBiYXJyaWVyIGJldHdlZW4gdGhl IHRzIGFuZCB0aGUKPiA+Pj4+Pj4gICAgY291bnRlciByZWFkLiBXZSBuZWVkIGJvdGguCj4gPj4+ Pj4+Cj4gPj4+Pj4+IC0gQmFycmllcnMgd2VyZW4ndCBwcm9wZXJseSBkb2N1bWVudGVkLiBTaW5j ZSBiYXJyaWVycyBvbmx5IHdvcmsgaWYKPiA+Pj4+Pj4gICAgeW91IGhhdmUgdGhlbSBvbiBib3Ro cyBzaWRlcyBvZiB0aGUgdHJhbnNhY3Rpb24gaXQncyBwcnVkZW50IHRvCj4gPj4+Pj4+ICAgIHJl ZmVyZW5jZSB3aGVyZSB0aGUgb3RoZXIgc2lkZSBpcy4gVG8gYXZvaWQgZHVwbGljYXRpbmcgdGhl Cj4gPj4+Pj4+ICAgIHdyaXRlLXNpZGUgY29tbWVudCAzIHRpbWVzIGV4dHJhY3QgYSBsaXR0bGUg c3RvcmVfdmJsYW5rKCkgaGVscGVyLgo+ID4+Pj4+PiAgICBJbiB0aGF0IGhlbHBlciBhbHNvIGFz c2VydCB0aGF0IHdlIGRvIGluZGVlZCBob2xkCj4gPj4+Pj4+ICAgIGRldi0+dmJsYW5rX3RpbWVf bG9jaywgc2luY2UgaW4gc29tZSBjYXNlcyB0aGUgbG9jayBpcyBhY3F1aXJlZCBhCj4gPj4+Pj4+ ICAgIGZldyBmdW5jdGlvbnMgdXAgaW4gdGhlIGNhbGxjaGFpbi4KPiA+Pj4+Pj4KPiA+Pj4+Pj4g U3BvdHRlZCB3aGlsZSByZXZpZXdpbmcgYSBwYXRjaCBmcm9tIENocmlzIFdpbHNvbiB0byBhZGQg YSBmYXN0cGF0aCB0bwo+ID4+Pj4+PiB0aGUgdmJsYW5rX3dhaXQgaW9jdGwuCj4gPj4+Pj4+Cj4g Pj4+Pj4+IENjOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPiA+Pj4+ Pj4gQ2M6IE1hcmlvIEtsZWluZXIgPG1hcmlvLmtsZWluZXIuZGVAZ21haWwuY29tPgo+ID4+Pj4+ PiBDYzogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KPiA+ Pj4+Pj4gQ2M6IE1pY2hlbCBEw6RuemVyIDxtaWNoZWxAZGFlbnplci5uZXQ+Cj4gPj4+Pj4+IFNp Z25lZC1vZmYtYnk6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAaW50ZWwuY29tPgo+ID4+ Pj4+PiAtLS0KPiA+Pj4+Pj4gICBkcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jIHwgOTIgKysrKysr KysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+Pj4+Pj4gICBpbmNs dWRlL2RybS9kcm1QLmggICAgICAgIHwgIDggKysrLS0KPiA+Pj4+Pj4gICAyIGZpbGVzIGNoYW5n ZWQsIDU0IGluc2VydGlvbnMoKyksIDQ2IGRlbGV0aW9ucygtKQo+ID4+Pj4+Pgo+ID4+Pj4+PiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9k cm1faXJxLmMKPiA+Pj4+Pj4gaW5kZXggYzhhMzQ0NzY1NzBhLi4yM2JmYmM2MWE0OTQgMTAwNjQ0 Cj4gPj4+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMKPiA+Pj4+Pj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYwo+ID4+Pj4+PiBAQCAtNzQsNiArNzQsMzMgQEAgbW9k dWxlX3BhcmFtX25hbWVkKHZibGFua29mZmRlbGF5LCBkcm1fdmJsYW5rX29mZmRlbGF5LCBpbnQs IDA2MDApOwo+ID4+Pj4+PiAgIG1vZHVsZV9wYXJhbV9uYW1lZCh0aW1lc3RhbXBfcHJlY2lzaW9u X3VzZWMsIGRybV90aW1lc3RhbXBfcHJlY2lzaW9uLCBpbnQsIDA2MDApOwo+ID4+Pj4+PiAgIG1v ZHVsZV9wYXJhbV9uYW1lZCh0aW1lc3RhbXBfbW9ub3RvbmljLCBkcm1fdGltZXN0YW1wX21vbm90 b25pYywgaW50LCAwNjAwKTsKPiA+Pj4+Pj4KPiA+Pj4+Pj4gK3N0YXRpYyB2b2lkIHN0b3JlX3Zi bGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YywKPiA+Pj4+Pj4gKyAgICAgICAg ICAgICB1bnNpZ25lZCB2YmxhbmtfY291bnRfaW5jLAo+ID4+Pj4+PiArICAgICAgICAgICAgIHN0 cnVjdCB0aW1ldmFsICp0X3ZibGFuaykKPiA+Pj4+Pj4gK3sKPiA+Pj4+Pj4gKyAgICBzdHJ1Y3Qg ZHJtX3ZibGFua19jcnRjICp2YmxhbmsgPSAmZGV2LT52YmxhbmtbY3J0Y107Cj4gPj4+Pj4+ICsg ICAgdTMyIHRzbG90Owo+ID4+Pj4+PiArCj4gPj4+Pj4+ICsgICAgYXNzZXJ0X3NwaW5fbG9ja2Vk KCZkZXYtPnZibGFua190aW1lX2xvY2spOwo+ID4+Pj4+PiArCj4gPj4+Pj4+ICsgICAgaWYgKHRf dmJsYW5rKSB7Cj4gPj4+Pj4+ICsgICAgICAgIHRzbG90ID0gdmJsYW5rLT5jb3VudCArIHZibGFu a19jb3VudF9pbmM7Cj4gPj4+Pj4+ICsgICAgICAgIHZibGFua3RpbWVzdGFtcChkZXYsIGNydGMs IHRzbG90KSA9ICp0X3ZibGFuazsKPiA+Pj4+Pj4gKyAgICB9Cj4gPj4+Pj4+ICsKPiA+Pj4+Pj4g KyAgICAvKgo+ID4+Pj4+PiArICAgICAqIHZibGFuayB0aW1lc3RhbXAgdXBkYXRlcyBhcmUgcHJv dGVjdGVkIG9uIHRoZSB3cml0ZSBzaWRlIHdpdGgKPiA+Pj4+Pj4gKyAgICAgKiB2YmxhbmtfdGlt ZV9sb2NrLCBidXQgb24gdGhlIHJlYWQgc2lkZSBkb25lIGxvY2tsZXNzbHkgdXNpbmcgYQo+ID4+ Pj4+PiArICAgICAqIHNlcXVlbmNlLWxvY2sgb24gdGhlIHZibGFuayBjb3VudGVyLiBFbnN1cmUg Y29ycmVjdCBvcmRlcmluZyB1c2luZwo+ID4+Pj4+PiArICAgICAqIG1lbW9yeSBiYXJycmllcnMu IFdlIG5lZWQgdGhlIGJhcnJpZXIgYm90aCBiZWZvcmUgYW5kIGFsc28gYWZ0ZXIgdGhlCj4gPj4+ Pj4+ICsgICAgICogY291bnRlciB1cGRhdGUgdG8gc3luY2hyb25pemUgd2l0aCB0aGUgbmV4dCB0 aW1lc3RhbXAgd3JpdGUuCj4gPj4+Pj4+ICsgICAgICogVGhlIHJlYWQtc2lkZSBiYXJyaWVycyBm b3IgdGhpcyBhcmUgaW4gZHJtX3ZibGFua19jb3VudF9hbmRfdGltZS4KPiA+Pj4+Pj4gKyAgICAg Ki8KPiA+Pj4+Pj4gKyAgICBzbXBfd21iKCk7Cj4gPj4+Pj4+ICsgICAgdmJsYW5rLT5jb3VudCAr PSB2YmxhbmtfY291bnRfaW5jOwo+ID4+Pj4+PiArICAgIHNtcF93bWIoKTsKPiA+Pj4+Pgo+ID4+ Pj4+IFRoZSBjb21tZW50IGFuZCB0aGUgY29kZSBhcmUgZWFjaCBzZWxmLWNvbnRyYWRpY3Rvcnku Cj4gPj4+Pj4KPiA+Pj4+PiBJZiB2YmxhbmstPmNvdW50IHdyaXRlcyBhcmUgYWx3YXlzIHByb3Rl Y3RlZCBieSB2YmxhbmtfdGltZV9sb2NrIChzb21ldGhpbmcgSQo+ID4+Pj4+IGRpZCBub3QgdmVy aWZ5IGJ1dCB0aGF0IHRoZSBjb21tZW50IGFib3ZlIGFzc2VydHMpLCB0aGVuIHRoZSB0cmFpbGlu ZyB3cml0ZQo+ID4+Pj4+IGJhcnJpZXIgaXMgbm90IHJlcXVpcmVkIChhbmQgdGhlIGFzc2VydGlv biB0aGF0IGl0IGlzIGluIHRoZSBjb21tZW50IGlzIGluY29ycmVjdCkuCj4gPj4+Pj4KPiA+Pj4+ PiBBIHNwaW4gdW5sb2NrIG9wZXJhdGlvbiBpcyBhbHdheXMgYSB3cml0ZSBiYXJyaWVyLgo+ID4+ Pj4KPiA+Pj4+IEhtIHllYWguIE90b2ggdG8gbWUgdGhhdCdzIGJvcmRlcmluZyBvbiAiY29kZSB0 b28gY2xldmVyIGZvciBteSBvd24gZ29vZCIuCj4gPj4+PiBUaGF0IHRoZSBzcGlubG9jayBpcyBo ZWxkIEkgY2FuIGFzc3VyZS4gVGhhdCBubyBvbmUgZ29lcyBhcm91bmQgYW5kIGRvZXMKPiA+Pj4+ IG11bHRpcGxlIHZibGFuayB1cGRhdGVzIChiZWNhdXNlIHNvbWVob3cgdGhhdCBjb2RlIHJhY2Vk IHdpdGggdGhlIGh3Cj4gPj4+PiBpdHNlbGYpIEkgY2FuJ3QgZWFzaWx5IGFzc3VyZSB3aXRoIGEg c2ltcGxlIGFzc2VydCBvciBzb21ldGhpbmcgc2ltaWxhci4KPiA+Pj4+IEl0J3Mgbm90IHRoZSBj YXNlIHJpZ2h0IG5vdywgYnV0IHRoYXQgY2FuIGNoYW5nZXMuCj4gPj4+Cj4gPj4+IFRoZSBhbGdv cml0aG0gd291bGQgYmUgYnJva2VuIGlmIG11bHRpcGxlIHVwZGF0ZXMgZm9yIHRoZSBzYW1lIHZi bGFuawo+ID4+PiBjb3VudCB3ZXJlIGFsbG93ZWQ7IHRoYXQncyB3aHkgaXQgY2hlY2tzIHRvIHNl ZSBpZiB0aGUgdmJsYW5rIGNvdW50IGhhcwo+ID4+PiBub3QgYWR2YW5jZWQgYmVmb3JlIHN0b3Jp bmcgYSBuZXcgdGltZXN0YW1wLgo+ID4+Pgo+ID4+PiBPdGhlcndpc2UsIHRoZSByZWFkIHNpZGUg d291bGQgbm90IGJlIGFibGUgdG8gZGV0ZXJtaW5lIHRoYXQgdGhlCj4gPj4+IHRpbWVzdGFtcCBp cyB2YWxpZCBieSBkb3VibGUtY2hlY2tpbmcgdGhhdCB0aGUgdmJsYW5rIGNvdW50IGhhcyBub3QK PiA+Pj4gY2hhbmdlZC4KPiA+Pj4KPiA+Pj4gQW5kIGJlc2lkZXMsIGV2ZW4gaWYgdGhlIGNvZGUg bG9vcGVkIHdpdGhvdXQgZHJvcHBpbmcgdGhlIHNwaW5sb2NrLAo+ID4+PiB0aGUgY29ycmVjdCB3 cml0ZSBvcmRlciB3b3VsZCBzdGlsbCBiZSBvYnNlcnZlZCBiZWNhdXNlIGl0IHdvdWxkIHN0aWxs Cj4gPj4+IGJlIGV4ZWN1dGluZyBvbiB0aGUgc2FtZSBjcHUuCj4gPj4+Cj4gPj4+IE15IG9iamVj dGlvbiB0byB0aGUgd3JpdGUgbWVtb3J5IGJhcnJpZXIgaXMgbm90IGFib3V0IG9wdGltaXphdGlv bjsKPiA+Pj4gaXQncyBhYm91dCBjb3JyZWN0IGNvZGUuCj4gPj4KPiA+PiBXZWxsIGRpZmY9MCBp cyBub3QgYWxsb3dlZCwgSSBndWVzcyBJIGNvdWxkIGVuZm9yY2UgdGhpcyB3aXRoIHNvbWUKPiA+ PiBXQVJOX09OLiBBbmQgSSBzdGlsbCB0aGluayBteSBwb2ludCBvZiBub24tbG9jYWwgY29ycmVj dG5lc3MgaXMgc29saWQuCj4gPj4gV2l0aCB0aGUgc21wX3dtYigpIHJlbW92ZWQgdGhlIGZvbGxv d2luZyBzdGlsbCB3b3JrcyBjb3JyZWN0bHk6Cj4gPj4KPiA+PiBzcGluX2xvY2sodmJsYW5rX3Rp bWVfbG9jayk7Cj4gPj4gc3RvcmVfdmJsYW5rKGRldiwgY3J0YywgMSwgdHMxKTsKPiA+PiBzcGlu X3VubG9jayh2YmxhbmtfdGltZV9sb2NrKTsKPiA+Pgo+ID4+IHNwaW5fbG9jayh2YmxhbmtfdGlt ZV9sb2NrKTsKPiA+PiBzdG9yZV92YmxhbmsoZGV2LCBjcnRjLCAxLCB0czIpOwo+ID4+IHNwaW5f dW5sb2NrKHZibGFua190aW1lX2xvY2spOwo+ID4+Cj4gPj4gQnV0IHdpdGggdGhlIHNtcF93bWIo KTsgcmVtb3ZlZCB0aGUgZm9sbG93aW5nIHdvdWxkIGJlIGJyb2tlbjoKPiA+Pgo+ID4+IHNwaW5f bG9jayh2YmxhbmtfdGltZV9sb2NrKTsKPiA+PiBzdG9yZV92YmxhbmsoZGV2LCBjcnRjLCAxLCB0 czEpOwo+ID4+IHN0b3JlX3ZibGFuayhkZXYsIGNydGMsIDEsIHRzMik7Cj4gPj4gc3Bpbl91bmxv Y2sodmJsYW5rX3RpbWVfbG9jayk7Cj4gPj4KPiA+PiBiZWNhdXNlIHRoZSBjb21waWxlci9jcHUg aXMgZnJlZSB0byByZW9yZGVyIHRoZSBzdG9yZSBmb3IgdmJsYW5rLT5jb3VudAo+ID4+IF9haGVh ZF8gb2YgdGhlIHN0b3JlIGZvciB0aGUgdGltZXN0YW1wLiBBbmQgdGhhdCB3b3VsZCB0cmljayBy ZWFkZXJzIGludG8KPiA+PiBiZWxpZXZpbmcgdGhhdCB0aGV5IGhhdmUgYSB2YWxpZCB0aW1lc3Rh bXAgd2hlbiB0aGV5IHBvdGVudGlhbGx5IHJhY2VkLgo+ID4+Cj4gPj4gTm93IHlvdSdyZSBjb3Jy ZWN0IHRoYXQgcmlnaHQgbm93IHRoZXJlJ3Mgbm8gc3VjaCB0aGluZyBnb2luZyBvbiwgYW5kIGl0 J3MKPiA+PiB1bmxpa2VseSB0byBoYXBwZW4gKGdpdmVuIHRoZSBuYXR1cmUgb2YgdmJsYW5rIHVw ZGF0ZXMpLiBCdXQgbXkgcG9pbnQgaXMKPiA+PiB0aGF0IGlmIHdlIG9wdGltaXplIHRoaXMgdGhl biB0aGUgY29ycmVjdG5lc3MgY2FuJ3QgYmUgcHJvdmVuIGxvY2FsbHkKPiA+PiBhbnltb3JlIGJ5 IGp1c3QgbG9va2luZyBhdCBzdG9yZV92YmxhbmssIGJ1dCBpbnN0ZWFkIHlvdSBtdXN0IGF1ZGl0 IGFsbAo+ID4+IHRoZSBjYWxsZXJzLiBBbmQgbGVha2luZyBsb2NraW5nL2JhcnJpZXJzIGxpa2Ug dGhhdCBpcyB0b28gZnJhZ2lsZSBkZXNpZ24KPiA+PiBmb3IgbXkgdGFzdGUuCj4gPj4KPiA+PiBC dXQgeW91IGluc2lzdCB0aGF0IG15IGFwcHJvYWNoIGlzIGJyb2tlbiBzb21laG93IGFuZCBkcm9w cGluZyB0aGUgc21wX3dtYgo+ID4+IGlzIG5lZWRlZCBmb3IgY29ycmVjdG5lc3MuIEkgZG9uJ3Qg c2VlIGhvdyB0aGF0J3MgdGhlIGNhc2UgYXQgYWxsLgo+IAo+IERhbmllbCwKPiAKPiBJJ3ZlIGJl ZW4gcmVhbGx5IGJ1c3kgdGhpcyBsYXN0IHdlZWs7IG15IGFwb2xvZ2llcyBmb3Igbm90IHJlcGx5 aW5nIHByb21wdGx5Lgo+IAo+ID4gRndpdywgaSBzcGVudCBzb21lIHRpbWUgcmVlZHVjYXRpbmcg bXlzZWxmIGFib3V0IG1lbW9yeSBiYXJyaWVycyAodGhhbmtzIGZvciB5b3VyIGV4cGxhbmF0aW9u cykgYW5kIHRoaW5raW5nIGFib3V0IHRoaXMsIGFuZCB0aGUgbGFzdCB2ZXJzaW9uIG9mIHlvdXIg cGF0Y2ggbG9va3MgZ29vZCB0byBtZS4gSXQgYWxzbyBtYWtlcyBzZW5zZSB0byBtZSB0byBsZWF2 ZSB0aGF0IGxhc3Qgc21iX3dtYigpIGluIHBsYWNlIHRvIG1ha2UgZnV0dXJlIHVzZSBvZiB0aGUg aGVscGVyIHJvYnVzdCAtIGZvciBub24tbG9jYWwgY29ycmVjdG5lc3MsIHRvIGF2b2lkIGhhdmlu ZyB0byBhdWRpdCBhbGwgZnV0dXJlIGNhbGxlcnMgb2YgdGhhdCBoZWxwZXIuCj4gCj4gTXkgY29u Y2VybiB3cnQgdG8gdW5uZWNlc3NhcnkgYmFycmllcnMgaW4gdGhpcyBhbGdvcml0aG0gaXMgdGhh dCB0aGUgdHJhaWxpbmcKPiBiYXJyaWVyIG5vdyBhcHBlYXJzIG1hbmRhdG9yeSwgd2hlbiBpbiBm YWN0IGl0IGlzIG5vdC4KPiAKPiBNb3Jlb3ZlciwgdGhpcyBhbGdvcml0aG0gaXMsIGluIGdlbmVy YWwsIGZyYWdpbGUgYW5kIG5vdCBkZXNpZ25lZCB0byBoYW5kbGUKPiByYW5kb20gb3IgcG9vcmx5 LXJlc2VhcmNoZWQgY2hhbmdlcy4KCkxlc3MgZnJhZ2lsaXR5IGlzIGV4YWN0bHkgd2h5IEkgd2Fu dCB0aGF0IHN1cnBsdXMgYmFycmllci4gQnV0IEkndmUgcnVuCm91dCBvZiBuZXcgaWRlYXMgZm9y IGhvdyB0byBleHBsYWluIHRoYXQgLi4uCgo+IEZvciBleGFtcGxlLCBpZiBvbmx5IHRoZSByZWFk IGFuZCBzdG9yZSBvcGVyYXRpb25zIGFyZSBjb25zaWRlcmVkLCBpdCdzIG9idmlvdXNseQo+IHVu c2FmZSwgc2luY2UgYSByZWFkIG1heSB1bndpdHRpbmdseSByZXRyaWV2ZSBhbiBzdG9yZSBpbiBw cm9ncmVzcy4KPiAKPiAKPiBDUFUgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCBDUFUgMQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cj4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB2YmxhbmstPmNvdW50ID09IDAgKi8KPiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAo+IGRybV92YmxhbmtfY291bnRf YW5kX3RpbWUoKSAgICAgICAgICAgICB8IHN0b3JlX3ZibGFuayguLiwgaW5jID0gMiwgLi4uKQo+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cj4gICBjdXJfdmJsYW5r IDw9IExPQUQgdmJsYW5rLT5jb3VudCAgICAgIHwKPiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfCAgIHRzbG90ID0gdmJsYW5rLT5jb3VudCArIDIKPiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIC8qIHRzbG90ID09IDIgKi8KPiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIFNUT1JFIHZibGFua3RpbWVb MF0KClRoaXMgbGluZSBoZXJlIGlzIHdyb25nLCBpdCBzaG91bGQgYmUgIlNUT1JFIHZibGFua3Rp bWVbMl0iCgpUaGUgIlNUT1JFIHZibGFua3RpbWVbMF0iIGhhcHBlbmVkIHdheSBlYXJsaWVyLCBi ZWZvcmUgMiBzbXBfd21iIGFuZCB0aGUKcHJldmlvdXMgdXBkYXRpbmcgb2YgdmJsYW5rLT5jb3Vu dC4KCkknbSBhbHNvIHNvbWV3aGF0IGNvbmZ1c2VkIGFib3V0IGhvdyB5b3UgdG8gYSBsaW5lIGFj cm9zcyBib3RoIGNwdXMgZm9yCmJhcnJpZXJzIGJlY2F1c2UgYmFycmllcnMgb25seSBoYXZlIGNw dS1sb2NhbCBlZmZlY3RzICh3aGljaCBpcyB3aHkgd2UKYWx3YXlzIG5lZWQgYSBiYXJyaWVyIG9u IGJvdGggZW5kcyBvZiBhIHRyYW5zYWN0aW9uKS4KCkluIHNob3J0IEkgc3RpbGwgZG9uJ3QgZm9s bG93IHdoYXQncyB3cm9uZy4KLURhbmllbAoKPiAgIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g LSAtIC0gLSAtIC0gLSAtIHNtcF93bWIoKSAtIC0gLSAtIC0gLSAtIC0gLSAtCj4gICAvKiBjdXJf dmJsYW5rID09IDAgKi8gICAgICAgICAgICAgICAgIHwKPiAgIGxvY2FsIDw9IExPQUQgdmJsYW5r dGltZVswXSAgICAgICAgICAgfAo+ICAgc21wX3JtYiAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAt IC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gCj4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwKPiAgKiBjcHUgaGFzIGxvYWRlZCB0aGUgd3Jvbmcg dGltZXN0YW1wICogfAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 Cj4gICBsb2NhbCA8PSBMT0FEIHZibGFuay0+Y291bnQgICAgICAgICAgIHwKPiAgIGN1cl92Ymxh bmsgPT0gbG9jYWw/ICAgICAgICAgICAgICAgICAgfAo+ICAgeWVzIC0gZXhpdCBsb29wICAgICAg ICAgICAgICAgICAgICAgICB8Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgICB2YmxhbmstPmNvdW50ICs9IDIKPiAgIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g LSAtIC0gLSAtIC0gLSAtIHNtcF93bWIoKSAtIC0gLSAtIC0gLSAtIC0gLSAtCj4gCj4gUmVnYXJk cywKPiBQZXRlciBIdXJsZXkKPiAKPiAKPiA+IEkgYWxzbyB0ZXN0ZWQgeW91ciBwYXRjaCArIGEg c2xpZ2h0bHkgbW9kaWZpZWQgdmVyc2lvbiBvZiBDaHJpcyB2YmxhbmsgZGVsYXllZCBkaXNhYmxl IC8gaW5zdGFudCBxdWVyeSBwYXRjaGVzICsgbXkgZml4ZXMgdXNpbmcgbXkgb3duIHN0cmVzcyB0 ZXN0cyBhbmQgaGFyZHdhcmUgdGltaW5nIHRlc3QgZXF1aXBtZW50IG9uIGJvdGggaW50ZWwgYW5k IG5vdXZlYXUsIGFuZCBldmVyeXRoaW5nIHNlZW1zIHRvIHdvcmsgZmluZS4KPiA+Cj4gPiBTbyBp J20gYWxsIGZvciBpbmNsdWRpbmcgdGhpcyBwYXRjaCBhbmQgaXQgaGFzIG15Cj4gPiAKPiA+IFJl dmlld2VkLWFuZC10ZXN0ZWQtYnk6IE1hcmlvIEtsZWluZXIgPG1hcmlvLmtsZWluZXIuZGVAZ21h aWwuY29tPgo+ID4gCj4gPiBJIGp1c3Qgc2VudCBvdXQgYW4gdXBkYXRlZCB2ZXJzaW9uIG9mIG15 IHBhdGNoZXMsIHNvIHRoZXkgZG9uJ3QgY29uZmxpY3Qgd2l0aCB0aGlzIG9uZSBhbmQgYWxzbyBm aXggYSBjb21waWxlIGZhaWx1cmUgb2YgZHJtL3F4bCB3aXRoIHlvdXJzLgo+ID4gCj4gPiBUaGFu a3MsCj4gPiAtbWFyaW8KPiAKCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJ bnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1k ZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=