From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v2 4/8] drm/crtc: Add a generic infrastructure to fake VBLANK events Date: Mon, 2 Jul 2018 10:40:54 +0200 Message-ID: <20180702084054.GK13978@phenom.ffwll.local> References: <20180629111722.20299-1-boris.brezillon@bootlin.com> <20180629111722.20299-5-boris.brezillon@bootlin.com> <20180702080252.GF13978@phenom.ffwll.local> <20180702101451.4382e38c@bbrezillon> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x544.google.com (mail-ed1-x544.google.com [IPv6:2a00:1450:4864:20::544]) by gabe.freedesktop.org (Postfix) with ESMTPS id 24B526E2F6 for ; Mon, 2 Jul 2018 08:40:58 +0000 (UTC) Received: by mail-ed1-x544.google.com with SMTP id l23-v6so11127904edq.0 for ; Mon, 02 Jul 2018 01:40:58 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20180702101451.4382e38c@bbrezillon> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Boris Brezillon Cc: David Airlie , Liviu Dudau , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org Rm9yZ290IHRvIGFkZHJlc3MgeW91ciBvdGhlciBjb21tZW50cy4KCk9uIE1vbiwgSnVsIDAyLCAy MDE4IGF0IDEwOjE0OjUxQU0gKzAyMDAsIEJvcmlzIEJyZXppbGxvbiB3cm90ZToKPiBPbiBNb24s IDIgSnVsIDIwMTggMTA6MDI6NTIgKzAyMDAKPiBEYW5pZWwgVmV0dGVyIDxkYW5pZWxAZmZ3bGwu Y2g+IHdyb3RlOgo+ID4gT24gRnJpLCBKdW4gMjksIDIwMTggYXQgMDE6MTc6MTdQTSArMDIwMCwg Qm9yaXMgQnJlemlsbG9uIHdyb3RlOgo+ID4gPiBJbiBzb21lIGNhc2VzIENSVENzIGFyZSBhY3Rp dmUgYnV0IGFyZSBub3QgYWJsZSB0byBnZW5lcmF0aW5nIGV2ZW50cywgYXQKPiA+ID4gbGVhc3Qg bm90IGF0IGV2ZXJ5IGZyYW1lIGF0IGl0J3MgZXhwZWN0ZWQgdG8uCj4gPiA+IFRoaXMgaXMgdHlw aWNhbGx5IHRoZSBjYXNlIHdoZW4gdGhlIENSVEMgaXMgZmVlZGluZyBhIHdyaXRlYmFjayBjb25u ZWN0b3IKPiA+ID4gdGhhdCBoYXMgbm8gam9iIHF1ZXVlZC4gSW4gdGhpcyBzaXR1YXRpb24gdGhl IENSVEMgaXMgdXN1YWxseSBzdG9wcGVkCj4gPiA+IHVudGlsIGEgbmV3IGpvYiBpcyBxdWV1ZWQs IGFuZCB0aGlzIGNhbiBsZWFkIHRvIHRpbWVvdXRzIHdoZW4gcGFydCBvZgo+ID4gPiB0aGUgcGlw ZWxpbmUgaXMgdXBkYXRlZCBidXQgbm8gbmV3IGpvYnMgYXJlIHF1ZXVlZCB0byB0aGUgYWN0aXZl Cj4gPiA+IHdyaXRlYmFjayBjb25uZWN0b3IuCj4gPiA+IAo+ID4gPiBJbiBvcmRlciB0byBzb2x2 ZSB0aGF0LCB3ZSBhZGQgYSAtPm5vX3ZibGFuayBmbGFnIHRvIGRybV9jcnRjX3N0YXRlCj4gPiA+ IGFuZCBhc2sgdGhlIENSVEMgZHJpdmVycyB0byBzZXQgaXQgdG8gdHJ1ZSB3aGVuIHRoZXkga25v dyB0aGV5J3JlIG5vdAo+ID4gPiBhYmxlIHRvIGdlbmVyYXRlIFZCTEFOSyBldmVudHMuIFRoZSBj b3JlIGRybV9hdG9taWNfaGVscGVyX2Zha2VfdmJsYW5rKCkKPiA+ID4gaGVscGVyIGNhbiB0aGVu IGJlIHVzZWQgdG8gZmFrZSBWQkxBTktzIGF0IGNvbW1pdCB0aW1lLgo+ID4gPiAKPiA+ID4gU2ln bmVkLW9mZi1ieTogQm9yaXMgQnJlemlsbG9uIDxib3Jpcy5icmV6aWxsb25AYm9vdGxpbi5jb20+ Cj4gPiA+IC0tLQo+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfaGVscGVyLmMgfCA0 MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gPiA+ICBpbmNsdWRlL2Ry bS9kcm1fYXRvbWljX2hlbHBlci5oICAgICB8ICAxICsKPiA+ID4gIGluY2x1ZGUvZHJtL2RybV9j cnRjLmggICAgICAgICAgICAgIHwgMTUgKysrKysrKysrKysrKysKPiA+ID4gIDMgZmlsZXMgY2hh bmdlZCwgNTYgaW5zZXJ0aW9ucygrKQo+ID4gPiAKPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9kcm1fYXRvbWljX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNf aGVscGVyLmMKPiA+ID4gaW5kZXggNjkwNjNiY2YyMzM0Li5jYTU4Njk5M2MyYTIgMTAwNjQ0Cj4g PiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX2hlbHBlci5jCj4gPiA+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX2hlbHBlci5jCj4gPiA+IEBAIC0yMDUxLDYgKzIw NTEsNDYgQEAgdm9pZCBkcm1fYXRvbWljX2hlbHBlcl93YWl0X2Zvcl9kZXBlbmRlbmNpZXMoc3Ry dWN0IGRybV9hdG9taWNfc3RhdGUgKm9sZF9zdGF0ZSkKPiA+ID4gIH0KPiA+ID4gIEVYUE9SVF9T WU1CT0woZHJtX2F0b21pY19oZWxwZXJfd2FpdF9mb3JfZGVwZW5kZW5jaWVzKTsKPiA+ID4gIAo+ ID4gPiArLyoqCj4gPiA+ICsgKiBkcm1fYXRvbWljX2hlbHBlcl9mYWtlX3ZibGFuayAtIGZha2Ug VkJMQU5LIGV2ZW50cyBpZiBuZWVkZWQKPiA+ID4gKyAqIEBvbGRfc3RhdGU6IGF0b21pYyBzdGF0 ZSBvYmplY3Qgd2l0aCBvbGQgc3RhdGUgc3RydWN0dXJlcwo+ID4gPiArICoKPiA+ID4gKyAqIFRo aXMgZnVuY3Rpb24gd2Fsa3MgYWxsIENSVENzIGFuZCBmYWtlIFZCTEFOSyBldmVudHMgb24gdGhv c2Ugd2l0aAo+ID4gPiArICogJmRybV9jcnRjX3N0YXRlLm5vX3ZibGFuayBzZXQgdG8gdHJ1ZSBh bmQgJmRybV9jcnRjX3N0YXRlLmV2ZW50ICE9IE5VTEwuCj4gPiA+ICsgKiBUaGUgcHJpbWFyeSB1 c2Ugb2YgdGhpcyBmdW5jdGlvbiBpcyB3cml0ZWJhY2sgY29ubmVjdG9ycyB3b3JraW5nIGluIG9u ZXNob3QKPiA+ID4gKyAqIG1vZGUgYW5kIGZha2luZyBWQkxBTksgZXZlbnRzLiBJbiB0aGlzIGNh c2UgdGhleSBvbmx5IGZha2UgdGhlIFZCTEFOSyBldmVudAo+ID4gPiArICogd2hlbiBhIGpvYiBp cyBxdWV1ZWQsIGFuZCBhbnkgY2hhbmdlIHRvIHRoZSBwaXBlbGluZSB0aGF0IGRvZXMgbm90IHRv dWNoIHRoZQo+ID4gPiArICogY29ubmVjdG9yIGlzIGxlYWRpbmcgdG8gdGltZW91dHMgd2hlbiBj YWxsaW5nCj4gPiA+ICsgKiBkcm1fYXRvbWljX2hlbHBlcl93YWl0X2Zvcl92YmxhbmtzKCkgb3IK PiA+ID4gKyAqIGRybV9hdG9taWNfaGVscGVyX3dhaXRfZm9yX2ZsaXBfZG9uZSgpLgo+ID4gPiAr ICoKPiA+ID4gKyAqIFRoaXMgaXMgcGFydCBvZiB0aGUgYXRvbWljIGhlbHBlciBzdXBwb3J0IGZv ciBub25ibG9ja2luZyBjb21taXRzLCBzZWUKPiA+ID4gKyAqIGRybV9hdG9taWNfaGVscGVyX3Nl dHVwX2NvbW1pdCgpIGZvciBhbiBvdmVydmlldy4KPiA+ID4gKyAqLwo+ID4gPiArdm9pZCBkcm1f YXRvbWljX2hlbHBlcl9mYWtlX3ZibGFuayhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqb2xkX3N0 YXRlKQo+ID4gPiArewo+ID4gPiArCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xkX2NydGNfc3Rh dGUsICpuZXdfY3J0Y19zdGF0ZTsKPiA+ID4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Cj4gPiA+ ICsJaW50IGk7Cj4gPiA+ICsKPiA+ID4gKwlmb3JfZWFjaF9vbGRuZXdfY3J0Y19pbl9zdGF0ZShv bGRfc3RhdGUsIGNydGMsIG9sZF9jcnRjX3N0YXRlLAo+ID4gPiArCQkJCSAgICAgIG5ld19jcnRj X3N0YXRlLCBpKSB7Cj4gPiA+ICsJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gPiA+ICsKPiA+ID4g KwkJaWYgKCFuZXdfY3J0Y19zdGF0ZS0+bm9fdmJsYW5rICYmICFvbGRfY3J0Y19zdGF0ZS0+bm9f dmJsYW5rKSAgCj4gPiAKPiA+IFVoLCB0aGlzIGVzc2VudGlhbGx5IG1ha2VzIGl0IGltcG9zc2li bGUgdG8gcmVzZXQgbm9fdmJsYW5rLgo+IAo+IEkgZG9uJ3Qgd2FudCAtPm5vX3ZibGFuayB0byBi ZSByZXNldCBieSB0aGUgY29yZS4gSXQncyB1cCB0byB0aGUgQ1JUQwo+IGRyaXZlciB0byBjbGVh ci9zZXQgaXQgd2hlbiBzb21ldGhpbmcgY2hhbmdlcyBpbiB0aGUgcGlwZWxpbmUuCj4gCj4gPiBG b3IgY29udHJvbAo+ID4gZmxvdyBzdGF0ZSBiaXRzIHdlIG9ubHkgY2hlY2sgdGhlIG5ldyBzdGF0 ZSBmb3IgaXQgKHNlZSBlLmcuIHRoZSB2YXJpb3VzCj4gPiAqX2NoYW5nZWQgb3IgcGxhbmVfYml0 cyBvciB3aGF0ZXZlcikuCj4gCj4gSSB0cmllZCB3aXRoICFuZXdfY3J0Y19zdGF0ZS0+bm9fdmJs YW5rIG9ubHksIGJ1dCB0aGVuIGl0IGRvZXMgbm90Cj4gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRo ZSBDUlRDIGFuZCBjb25uZWN0b3IgYXJlIGJlaW5nIGRpc2FibGVkLCBhbmQgSQo+IGVuZCB1cCB3 aXRoIGEgdGltZW91dC4KPiAKPiA+IAo+ID4gPiArCQkJY29udGludWU7Cj4gPiA+ICsKPiA+ID4g KwkJc3Bpbl9sb2NrX2lycXNhdmUoJm9sZF9zdGF0ZS0+ZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7 Cj4gPiA+ICsJCWlmIChuZXdfY3J0Y19zdGF0ZS0+ZXZlbnQpIHsKPiA+ID4gKwkJCWRybV9jcnRj X3NlbmRfdmJsYW5rX2V2ZW50KGNydGMsCj4gPiA+ICsJCQkJCQkgICBuZXdfY3J0Y19zdGF0ZS0+ ZXZlbnQpOwo+ID4gPiArCQkJbmV3X2NydGNfc3RhdGUtPmV2ZW50ID0gTlVMTDsKPiA+ID4gKwkJ fQo+ID4gPiArCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvbGRfc3RhdGUtPmRldi0+ZXZlbnRf bG9jaywgZmxhZ3MpOwo+ID4gPiArCX0KPiA+ID4gK30KPiA+ID4gK0VYUE9SVF9TWU1CT0woZHJt X2F0b21pY19oZWxwZXJfZmFrZV92YmxhbmspOwo+ID4gPiArCj4gPiA+ICAvKioKPiA+ID4gICAq IGRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9od19kb25lIC0gc2V0dXAgcG9zc2libGUgbm9uYmxv Y2tpbmcgY29tbWl0Cj4gPiA+ICAgKiBAb2xkX3N0YXRlOiBhdG9taWMgc3RhdGUgb2JqZWN0IHdp dGggb2xkIHN0YXRlIHN0cnVjdHVyZXMKPiA+ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2Ry bV9hdG9taWNfaGVscGVyLmggYi9pbmNsdWRlL2RybS9kcm1fYXRvbWljX2hlbHBlci5oCj4gPiA+ IGluZGV4IDI2YWFiYTU4ZDZjZS4uOTllMmE1Mjk3YzY5IDEwMDY0NAo+ID4gPiAtLS0gYS9pbmNs dWRlL2RybS9kcm1fYXRvbWljX2hlbHBlci5oCj4gPiA+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9h dG9taWNfaGVscGVyLmgKPiA+ID4gQEAgLTEwMCw2ICsxMDAsNyBAQCBpbnQgX19tdXN0X2NoZWNr IGRybV9hdG9taWNfaGVscGVyX3N3YXBfc3RhdGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0 YXRlLAo+ID4gPiAgaW50IGRybV9hdG9taWNfaGVscGVyX3NldHVwX2NvbW1pdChzdHJ1Y3QgZHJt X2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gPiA+ICAJCQkJICAgYm9vbCBub25ibG9jayk7Cj4gPiA+ ICB2b2lkIGRybV9hdG9taWNfaGVscGVyX3dhaXRfZm9yX2RlcGVuZGVuY2llcyhzdHJ1Y3QgZHJt X2F0b21pY19zdGF0ZSAqc3RhdGUpOwo+ID4gPiArdm9pZCBkcm1fYXRvbWljX2hlbHBlcl9mYWtl X3ZibGFuayhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpOwo+ID4gPiAgdm9pZCBkcm1f YXRvbWljX2hlbHBlcl9jb21taXRfaHdfZG9uZShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3Rh dGUpOwo+ID4gPiAgdm9pZCBkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfY2xlYW51cF9kb25lKHN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSk7Cj4gPiA+ICAKPiA+ID4gZGlmZiAtLWdpdCBh L2luY2x1ZGUvZHJtL2RybV9jcnRjLmggYi9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oCj4gPiA+IGlu ZGV4IDIzZWRkYmNjYWIxMC4uNzQzNWRjNjZjMDhhIDEwMDY0NAo+ID4gPiAtLS0gYS9pbmNsdWRl L2RybS9kcm1fY3J0Yy5oCj4gPiA+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9jcnRjLmgKPiA+ID4g QEAgLTg3LDYgKzg3LDIwIEBAIHN0cnVjdCBkcm1fcGxhbmVfaGVscGVyX2Z1bmNzOwo+ID4gPiAg ICogQHpwb3NfY2hhbmdlZDogenBvcyB2YWx1ZXMgb2YgcGxhbmVzIG9uIHRoaXMgY3J0YyBoYXZl IGJlZW4gdXBkYXRlZAo+ID4gPiAgICogQGNvbG9yX21nbXRfY2hhbmdlZDogY29sb3IgbWFuYWdl bWVudCBwcm9wZXJ0aWVzIGhhdmUgY2hhbmdlZCAoZGVnYW1tYSBvcgo+ID4gPiAgICoJZ2FtbWEg TFVUIG9yIENTQyBtYXRyaXgpCj4gPiA+ICsgKiBAbm9fdmJsYW5rOiByZWZsZWN0cyB0aGUgYWJp bGl0eSBvZiBhIENSVEMgdG8gc2VuZCBWQkxBTksgZXZlbnRzLiBUaGlzIHN0YXRlCj4gPiA+ICsg Kgl1c3VhbGx5IGRlcGVuZHMgb24gdGhlIHBpcGVsaW5lIGNvbmZpZ3VyYXRpb24sIGFuZCB0aGUg bWFpbiB1c3VhZ2UgaXMKPiA+ID4gKyAqCUNSVENzIGZlZWRpbmcgYSB3cml0ZWJhY2sgY29ubmVj dG9yIG9wZXJhdGluZyBpbiBvbmVzaG90IG1vZGUuIEluIHRoaXMKPiA+ID4gKyAqCWNhc2UgdGhl IFZCTEFOSyBldmVudCBpcyBvbmx5IGdlbmVyYXRlZCB3aGVuIGEgam9iIGlzIHF1ZXVlZCB0byB0 aGUKPiA+ID4gKyAqCXdyaXRlYmFjayBjb25uZWN0b3IsIGFuZCB3ZSB3YW50IHRoZSBjb3JlIHRv IGZha2UgVkJMQU5LIGV2ZW50cyB3aGVuCj4gPiA+ICsgKgl0aGlzIHBhcnQgb2YgdGhlIHBpcGVs aW5lIGhhc24ndCBjaGFuZ2VkIGJ1dCBvdGhlcnMgaGFkIG9yIHdoZW4gdGhlCj4gPiA+ICsgKglD UlRDIGFuZCBjb25uZWN0b3JzIGFyZSBkaXNhYmxlZC4gIAo+ID4gCj4gPiBzL2FyZSBkaXNhYmxl ZC9hcmUgZ2V0dGluZyBkaXNhYmxlZC8KPiA+IAo+ID4gWW91J2xsIG5ldmVyIGdldCBhIHJlcXVl c3QgZm9yIGFuIGV2ZW50IHdoZW4gaXQncyBhbHJlYWR5IG9mZi4KPiAKPiBUaGF0J3MgdHJ1ZS4K PiAKPiA+IAo+ID4gPiArICoJX19kcm1fYXRvbWljX2hlbHBlcl9jcnRjX2R1cGxpY2F0ZV9zdGF0 ZSgpIHdpbGwgdGhlIHZhbHVlIGZyb20gdGhlCj4gPiA+ICsgKgljdXJyZW50IHN0YXRlLCB0aGUg Q1JUQyBkcml2ZXIgaXMgdGhlbiByZXNwb25zaWJsZSBmb3IgdXBkYXRpbmcgdGhpcwo+ID4gPiAr ICoJZmllbGQgd2hlbiBuZWVkZWQuICAKPiA+IAo+ID4gTm90IHBhcnNpbmcgdGhlIGFib3ZlIC4u LiBwcm9iYWJseSBtaXNzaW5nIGEgIi4uLiB3aWxsIG5vdCByZXNldCAuLi4iCj4gCj4gRXhhY3Rs eS4gV2lsbCBhZGQgdGhlIG1pc3Npbmcgd29yZHMuCj4gCj4gPiAKPiA+ID4gKyAqCU5vdGUgdGhh dCwgZXZlbiB3aGVuIG5vX2JsYW5rIGlzIHNldCB0byB0cnVlLCB0aGUgQ1JUQyBkcml2ZXIgY2Fu IHN0aWxsCj4gPiA+ICsgKglzdGVhbCB0aGUgJmRybV9jcnRjX3N0YXRlLmV2ZW50IG9iamVjdCBh bmQgc2VuZCB0aGUgZXZlbnQgb24gaXRzIG93bi4KPiA+ID4gKyAqCVRoYXQncyB1c3VhbGx5IHdo YXQgaGFwcGVucyB3aGVuIGEgam9iIGlzIHF1ZXVlZCB0byB0aGUgd3JpdGViYWNrCj4gPiA+ICsg Kgljb25uZWN0b3IuICAKPiA+IAo+ID4gVGhlIGxhc3Qgc2VudGVuY2UgaXMgY29uZnVzaW5nIGlt by4gSnVzdCBkcm9wIGl0Pwo+IAo+IFllcywgSSBrbm93LCBidXQgaXQncyBhbHNvIGltcG9ydGFu dCB0byBzdGF0ZSB0aGF0IHRoZSAtPm5vX2JsYW5rICsKPiBldmVudCA9PSBOVUxMIGlzIGEgdmFs aWQgY29tYmluYXRpb24sIGFuZCBqdXN0IG1lYW5zIHRoYXQgdGhlIGRyaXZlcgo+IGRlY2lkZWQg dG8gZ2VuZXJhdGUgdGhlIGV2ZW50ICh0aGF0IGhhcHBlbnMgd2hlbiBhIG5ldyBXQiBqb2IgaXMK PiBxdWV1ZWQpLgoKVGhlbiBtYWtlIGl0IG1vcmUgZXhwbGljaXQsIGFzLWlzIEkgaGFkIG5vIGlk ZWEgd2hhdCB5b3UgbWVhbnQgZXhhY3RseS4KV2hhdCBhYm91dAo+IAo+ID4gCj4gPiBQbGVhc2Ug dXNlIHRoZSBpbmxpbmUgY29tbWVudCBzdHlsZSBmb3Igc3RydWN0IG1lbWJlcnMsIGFuZCB0aGVu IGFsc28KPiA+IHBvbGlzaCB0aGUgZm9ybWF0dGluZyBhIGJpdCAoZS5nLiBwYXJhZ3JhcGggYnJl YWtzLCB3aGljaCBhcmUgb25seQo+ID4gcG9zc2libGUgd2l0aCB0aGUgaW5saW5lIHN0eWxlKS4K PiAKPiBJIGNvbnNpZGVyZWQgdGhhdCwgYnV0IHRoZSBvdGhlciBmaWVsZHMgd2VyZSBhbHJlYWR5 IGRvY3VtZW50ZWQgaW4gdGhlCj4gc2luZ2xlIGJsb2NrIGFib3ZlIHRoZSBzdHJ1Y3QsIHNvIEkg dGhvdWdodCBrZWVwaW5nIHRoaW5ncyBjb25zaXN0ZW50Cj4gd2FzIGJldHRlci4gU2hvdWxkIEkg anVzdCBhZGQgdGhpcyBmaWVsZCBkb2MgaW5saW5lIGFuZCBrZWVwIHRoZSBvdGhlcgo+IG9uZXMg d2hlcmUgdGhleSBhcmUsIG9yIHNob3VsZCBJIGFkZCBhIHBhdGNoIG1vdmluZyBhbGwgZG9jcyBp bmxpbmU/CgpUaGVyZSdzIF9sb3RzXyBvZiBpbmxpbmUgY29tbWVudHMgYWxyZWFkeSwgYW5kIGFs bCBuZXcgb25lcyBzaG91bGQgYmUKaW5saW5lLiBUaGUgb25seSByZWFzb24gSSBoYXZlbid0IGRv bmUgdGhlIGNvbnZlcnNpb24gdG8gYWxsIG9mIHRoZW0gaXMKdGhhdCBpdCB3b3VsZCBiZSBhIG5p Y2Ugb3Bwb3J0dW5pdHkgdG8gdXBkYXRlL2NsZWFuIHVwIHRoZSBjb21tZW50cwoob2Z0ZW4gdGhl cmUncyBhIGxvdCBtb3JlIHRvIHNheSB0aGFuIHdoYXQncyBjYXB0dXJlZCBpbiB0aGUgc2luZ2xl IGxpbmUpLAp3aGljaCBpcyB3aHkgaXQgZGlkbid0IGhhcHBlbiB5ZXQuIEp1c3QgbW92aW5nIHRo ZSBjb21tZW50cyB3aXRob3V0CnVwZGF0aW5nIHRoZW0gc2VlbXMgbGVzcyB1c2VmdWwgaW1vLgoK SSdkIGp1c3QgZG8gdGhlIGlubGluZSBjb21tZW50IGZvciB0aGlzLCB0aGF0J3Mgd2hhdCBldmVy eW9uZSBlbHNlIGlzCmRvaW5nIHRvby4KLURhbmllbAoKPiAKPiA+IAo+ID4gV2l0aCB0aGUgbml0 cyBhZGRyZXNzZWQ6Cj4gPiAKPiA+IFJldmlld2VkLWJ5OiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwu dmV0dGVyQGZmd2xsLmNoPgo+ID4gCj4gPiA+ICAgKiBAcGxhbmVfbWFzazogYml0bWFzayBvZiAo MSA8PCBkcm1fcGxhbmVfaW5kZXgocGxhbmUpKSBvZiBhdHRhY2hlZCBwbGFuZXMKPiA+ID4gICAq IEBjb25uZWN0b3JfbWFzazogYml0bWFzayBvZiAoMSA8PCBkcm1fY29ubmVjdG9yX2luZGV4KGNv bm5lY3RvcikpIG9mIGF0dGFjaGVkIGNvbm5lY3RvcnMKPiA+ID4gICAqIEBlbmNvZGVyX21hc2s6 IGJpdG1hc2sgb2YgKDEgPDwgZHJtX2VuY29kZXJfaW5kZXgoZW5jb2RlcikpIG9mIGF0dGFjaGVk IGVuY29kZXJzCj4gPiA+IEBAIC0xMTgsNiArMTMyLDcgQEAgc3RydWN0IGRybV9jcnRjX3N0YXRl IHsKPiA+ID4gIAlib29sIGNvbm5lY3RvcnNfY2hhbmdlZCA6IDE7Cj4gPiA+ICAJYm9vbCB6cG9z X2NoYW5nZWQgOiAxOwo+ID4gPiAgCWJvb2wgY29sb3JfbWdtdF9jaGFuZ2VkIDogMTsKPiA+ID4g Kwlib29sIG5vX3ZibGFuayA6IDE7Cj4gPiA+ICAKPiA+ID4gIAkvKiBhdHRhY2hlZCBwbGFuZXMg Yml0bWFzazoKPiA+ID4gIAkgKiBXQVJOSU5HOiB0cmFuc2l0aW9uYWwgaGVscGVycyBkbyBub3Qg bWFpbnRhaW4gcGxhbmVfbWFzayBzbwo+ID4gPiAtLSAKPiA+ID4gMi4xNC4xCj4gPiA+ICAgCj4g PiAKPiAKCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3Jh dGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9kcmktZGV2ZWwK