From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 01/15] drm/vblank: Allow dynamic per-crtc max_vblank_count Date: Thu, 22 Nov 2018 09:53:51 +0100 Message-ID: <20181122085351.GW4266@phenom.ffwll.local> References: <20181112170000.27531-1-ville.syrjala@linux.intel.com> <20181112170000.27531-2-ville.syrjala@linux.intel.com> <20181121092727.GH4266@phenom.ffwll.local> <20181121113751.GA9144@intel.com> <20181121151936.GU4266@phenom.ffwll.local> <20181121161649.GG9144@intel.com> <20181121164657.GH9144@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x541.google.com (mail-ed1-x541.google.com [IPv6:2a00:1450:4864:20::541]) by gabe.freedesktop.org (Postfix) with ESMTPS id 11B1D6E2A8 for ; Thu, 22 Nov 2018 08:53:56 +0000 (UTC) Received: by mail-ed1-x541.google.com with SMTP id b14so7040183edt.6 for ; Thu, 22 Nov 2018 00:53:55 -0800 (PST) Content-Disposition: inline In-Reply-To: <20181121164657.GH9144@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Cc: Inki Dae , stable , intel-gfx , dri-devel List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCBOb3YgMjEsIDIwMTggYXQgMDY6NDY6NTdQTSArMDIwMCwgVmlsbGUgU3lyasOkbMOk IHdyb3RlOgo+IE9uIFdlZCwgTm92IDIxLCAyMDE4IGF0IDA1OjIyOjQ5UE0gKzAxMDAsIERhbmll bCBWZXR0ZXIgd3JvdGU6Cj4gPiBPbiBXZWQsIE5vdiAyMSwgMjAxOCBhdCA1OjE2IFBNIFZpbGxl IFN5cmrDpGzDpAo+ID4gPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPiB3cm90ZToKPiA+ ID4KPiA+ID4gT24gV2VkLCBOb3YgMjEsIDIwMTggYXQgMDQ6MTk6MzZQTSArMDEwMCwgRGFuaWVs IFZldHRlciB3cm90ZToKPiA+ID4gPiBPbiBXZWQsIE5vdiAyMSwgMjAxOCBhdCAwMTozNzo1MVBN ICswMjAwLCBWaWxsZSBTeXJqw6Rsw6Qgd3JvdGU6Cj4gPiA+ID4gPiBPbiBXZWQsIE5vdiAyMSwg MjAxOCBhdCAxMDoyNzoyN0FNICswMTAwLCBEYW5pZWwgVmV0dGVyIHdyb3RlOgo+ID4gPiA+ID4g PiBPbiBNb24sIE5vdiAxMiwgMjAxOCBhdCAwNjo1OTo0NVBNICswMjAwLCBWaWxsZSBTeXJqYWxh IHdyb3RlOgo+ID4gPiA+ID4gPiA+IEZyb206IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFs YUBsaW51eC5pbnRlbC5jb20+Cj4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiBPbiBpOTY1Z20g d2UgbmVlZCB0byBhZGp1c3QgbWF4X3ZibGFua19jb3VudCBkeW5hbWljYWxseQo+ID4gPiA+ID4g PiA+IGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBUViBlbmNvZGVyIGlzIHVzZWQgb3Igbm90LiBU bwo+ID4gPiA+ID4gPiA+IHRoYXQgZW5kIGFkZCBhIHBlci1jcnRjIG1heF92YmxhbmtfY291bnQg dGhhdCB0YWtlcwo+ID4gPiA+ID4gPiA+IHByZWNlZGVuY2Ugb3ZlciBpdHMgZGV2aWNlIHdpZGUg Y291bnRlcnBhcnQuIFRoZSBkcml2ZXIKPiA+ID4gPiA+ID4gPiBjYW4gbm93IGNhbGwgZHJtX2Ny dGNfc2V0X21heF92YmxhbmtfY291bnQoKSB0byBjb25maWd1cmUKPiA+ID4gPiA+ID4gPiB0aGUg cGVyLWNydGMgdmFsdWUgYmVmb3JlIGNhbGxpbmcgZHJtX3ZibGFua19vbigpLgo+ID4gPiA+ID4g PiA+Cj4gPiA+ID4gPiA+ID4gQWxzbyBsb29rcyBsaWtlIHRoZXJlIHdhcyBzb21lIGRpc2N1c3Np b24gYWJvdXQgZXh5bm9zIG5lZWRpbmcKPiA+ID4gPiA+ID4gPiBzaW1pbGFyIHRyZWF0bWVudC4K PiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+IENjOiBzdGFibGVAdmdlci5rZXJuZWwub3JnCj4g PiA+ID4gPiA+ID4gQ2M6IElua2kgRGFlIDxpbmtpLmRhZUBzYW1zdW5nLmNvbT4KPiA+ID4gPiA+ ID4gPiBDYzogRGFuaWVsIFZldHRlciA8ZGFuaWVsQGZmd2xsLmNoPgo+ID4gPiA+ID4gPiA+IFNp Z25lZC1vZmYtYnk6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5j b20+Cj4gPiA+ID4gPiA+ID4gLS0tCj4gPiA+ID4gPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9kcm1f dmJsYW5rLmMgfCAzOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0KPiA+ID4g PiA+ID4gPiAgaW5jbHVkZS9kcm0vZHJtX3ZibGFuay5oICAgICB8ICA4ICsrKysrKysrCj4gPiA+ ID4gPiA+ID4gIDIgZmlsZXMgY2hhbmdlZCwgNDMgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMo LSkKPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vZHJtX3ZibGFuay5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV92YmxhbmsuYwo+ID4gPiA+ID4g PiA+IGluZGV4IDk4ZTA5MTE3NTkyMS4uYzNhYmJkY2E4YWJhIDEwMDY0NAo+ID4gPiA+ID4gPiA+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fdmJsYW5rLmMKPiA+ID4gPiA+ID4gPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vZHJtX3ZibGFuay5jCj4gPiA+ID4gPiA+ID4gQEAgLTEwNSwxMyArMTA1 LDIwIEBAIHN0YXRpYyB2b2lkIHN0b3JlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1 bnNpZ25lZCBpbnQgcGlwZSwKPiA+ID4gPiA+ID4gPiAgICAgICAgIHdyaXRlX3NlcXVubG9jaygm dmJsYW5rLT5zZXFsb2NrKTsKPiA+ID4gPiA+ID4gPiAgfQo+ID4gPiA+ID4gPiA+Cj4gPiA+ID4g PiA+ID4gK3N0YXRpYyB1MzIgZHJtX21heF92YmxhbmtfY291bnQoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwgdW5zaWduZWQgaW50IHBpcGUpCj4gPiA+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ID4gPiAr ICAgICAgIHN0cnVjdCBkcm1fdmJsYW5rX2NydGMgKnZibGFuayA9ICZkZXYtPnZibGFua1twaXBl XTsKPiA+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ID4gKyAgICAgICByZXR1cm4gdmJsYW5rLT5t YXhfdmJsYW5rX2NvdW50ID86IGRldi0+bWF4X3ZibGFua19jb3VudDsKPiA+ID4gPiA+ID4gPiAr fQo+ID4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gPiAgLyoKPiA+ID4gPiA+ID4gPiAgICogIk5v IGh3IGNvdW50ZXIiIGZhbGxiYWNrIGltcGxlbWVudGF0aW9uIG9mIC5nZXRfdmJsYW5rX2NvdW50 ZXIoKSBob29rLAo+ID4gPiA+ID4gPiA+ICAgKiBpZiB0aGVyZSBpcyBubyB1c2VhYmxlIGhhcmR3 YXJlIGZyYW1lIGNvdW50ZXIgYXZhaWxhYmxlLgo+ID4gPiA+ID4gPiA+ICAgKi8KPiA+ID4gPiA+ ID4gPiAgc3RhdGljIHUzMiBkcm1fdmJsYW5rX25vX2h3X2NvdW50ZXIoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwgdW5zaWduZWQgaW50IHBpcGUpCj4gPiA+ID4gPiA+ID4gIHsKPiA+ID4gPiA+ID4g PiAtICAgICAgIFdBUk5fT05fT05DRShkZXYtPm1heF92YmxhbmtfY291bnQgIT0gMCk7Cj4gPiA+ ID4gPiA+ID4gKyAgICAgICBXQVJOX09OX09OQ0UoZHJtX21heF92YmxhbmtfY291bnQoZGV2LCBw aXBlKSAhPSAwKTsKPiA+ID4gPiA+ID4gPiAgICAgICAgIHJldHVybiAwOwo+ID4gPiA+ID4gPiA+ ICB9Cj4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiBAQCAtMTk4LDYgKzIwNSw3IEBAIHN0YXRp YyB2b2lkIGRybV91cGRhdGVfdmJsYW5rX2NvdW50KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVu c2lnbmVkIGludCBwaXBlLAo+ID4gPiA+ID4gPiA+ICAgICAgICAga3RpbWVfdCB0X3ZibGFuazsK PiA+ID4gPiA+ID4gPiAgICAgICAgIGludCBjb3VudCA9IERSTV9USU1FU1RBTVBfTUFYUkVUUklF UzsKPiA+ID4gPiA+ID4gPiAgICAgICAgIGludCBmcmFtZWR1cl9ucyA9IHZibGFuay0+ZnJhbWVk dXJfbnM7Cj4gPiA+ID4gPiA+ID4gKyAgICAgICB1MzIgbWF4X3ZibGFua19jb3VudCA9IGRybV9t YXhfdmJsYW5rX2NvdW50KGRldiwgcGlwZSk7Cj4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiAg ICAgICAgIC8qCj4gPiA+ID4gPiA+ID4gICAgICAgICAgKiBJbnRlcnJ1cHRzIHdlcmUgZGlzYWJs ZWQgcHJpb3IgdG8gdGhpcyBjYWxsLCBzbyBkZWFsIHdpdGggY291bnRlcgo+ID4gPiA+ID4gPiA+ IEBAIC0yMTYsOSArMjI0LDkgQEAgc3RhdGljIHZvaWQgZHJtX3VwZGF0ZV92YmxhbmtfY291bnQo c3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHBpcGUsCj4gPiA+ID4gPiA+ID4g ICAgICAgICAgICAgICAgIHJjID0gZHJtX2dldF9sYXN0X3ZibHRpbWVzdGFtcChkZXYsIHBpcGUs ICZ0X3ZibGFuaywgaW5fdmJsYW5rX2lycSk7Cj4gPiA+ID4gPiA+ID4gICAgICAgICB9IHdoaWxl IChjdXJfdmJsYW5rICE9IF9fZ2V0X3ZibGFua19jb3VudGVyKGRldiwgcGlwZSkgJiYgLS1jb3Vu dCA+IDApOwo+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gLSAgICAgICBpZiAoZGV2LT5tYXhf dmJsYW5rX2NvdW50ICE9IDApIHsKPiA+ID4gPiA+ID4gPiArICAgICAgIGlmIChtYXhfdmJsYW5r X2NvdW50KSB7Cj4gPiA+ID4gPiA+ID4gICAgICAgICAgICAgICAgIC8qIHRydXN0IHRoZSBodyBj b3VudGVyIHdoZW4gaXQncyBhcm91bmQgKi8KPiA+ID4gPiA+ID4gPiAtICAgICAgICAgICAgICAg ZGlmZiA9IChjdXJfdmJsYW5rIC0gdmJsYW5rLT5sYXN0KSAmIGRldi0+bWF4X3ZibGFua19jb3Vu dDsKPiA+ID4gPiA+ID4gPiArICAgICAgICAgICAgICAgZGlmZiA9IChjdXJfdmJsYW5rIC0gdmJs YW5rLT5sYXN0KSAmIG1heF92YmxhbmtfY291bnQ7Cj4gPiA+ID4gPiA+ID4gICAgICAgICB9IGVs c2UgaWYgKHJjICYmIGZyYW1lZHVyX25zKSB7Cj4gPiA+ID4gPiA+ID4gICAgICAgICAgICAgICAg IHU2NCBkaWZmX25zID0ga3RpbWVfdG9fbnMoa3RpbWVfc3ViKHRfdmJsYW5rLCB2YmxhbmstPnRp bWUpKTsKPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+IEBAIC0yNTgsNyArMjY2LDggQEAgc3Rh dGljIHZvaWQgZHJtX3VwZGF0ZV92YmxhbmtfY291bnQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwg dW5zaWduZWQgaW50IHBpcGUsCj4gPiA+ID4gPiA+ID4gICAgICAgICAgICAgICAgICAgICAgIHBp cGUsIHZibGFuay0+Y291bnQsIGRpZmYsIGN1cl92YmxhbmssIHZibGFuay0+bGFzdCk7Cj4gPiA+ ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiAgICAgICAgIGlmIChkaWZmID09IDApIHsKPiA+ID4gPiA+ ID4gPiAtICAgICAgICAgICAgICAgV0FSTl9PTl9PTkNFKGN1cl92YmxhbmsgIT0gdmJsYW5rLT5s YXN0KTsKPiA+ID4gPiA+ID4gPiArICAgICAgICAgICAgICAgV0FSTl9PTl9PTkNFKG1heF92Ymxh bmtfY291bnQgJiYKPiA+ID4gPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1 cl92YmxhbmsgIT0gdmJsYW5rLT5sYXN0KTsKPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gVW5yZWxh dGVkIGJ1Z2ZpeCBmb3IgdGhpcyB3YXJuaW5nPyBTaG91bGQgYmUgYSBzZXBhcmF0ZSBwYXRjaCBJ IHRoaW5rLCBvcgo+ID4gPiA+ID4gPiBJJ20gbWlzc2luZyBzb21ldGhpbmcuCj4gPiA+ID4gPgo+ ID4gPiA+ID4gQWgsIHllYWggdGhpcyB3YXMgZHVlIHRvIGEgcXVpcmsgb2YgaTk2NWdtIGhhcmR3 YXJlLiBUaGUgaHcgY291bnRlcgo+ID4gPiA+ID4gZG9lcyB3b3JrIHVudGlsIHRoZSBleGFjdCBw b2ludCB3aGVuIHdlIGVuYWJsZSBUViBlbmNvZGVyLiBUaHVzIHdlCj4gPiA+ID4gPiB3aWxsIGdl dCBub24temVybyB2YWx1ZXMgdXAgdG8gdGhhdCBwb2ludCwgYW5kIHNpbmNlIHRoZSBUViBlbmNv ZGVyCj4gPiA+ID4gPiBpc24ndCB5ZXQgdGhyb3R0bGluZyB0aGUgcGlwZSBpdCBwcmVzdW1hYmx5 IHJ1bnMgYXQgdGhlIG92ZXJzYW1wbGUKPiA+ID4gPiA+IGNsb2NrIHNvIG91ciB0aW1lc3RhbXAg YmFzZWQgZXN0aW1hdGVzIGNhbiBnaXZlIHVzIGEgZGlmZj09MCBldmVuCj4gPiA+ID4gPiB0aG91 Z2ggdGhlIHBpcGUgZGlkIGluZGVlZCBwYXNzIGEgdmJsYW5rIGFscmVhZHkuIEkgZm9yZ290IHRv Cj4gPiA+ID4gPiBub3RlIHRoaXMgaW4gdGhlIGNvbW1pdCBtZXNzYWdlLgo+ID4gPiA+ID4KPiA+ ID4gPiA+IEkgdGhpbmsgd2UgY2FuIGhhbmRsZSB0aGlzIHRocmVlIHdheXM6Cj4gPiA+ID4gPiAx LiBkbyB3aGF0IEkgZG8gaGVyZSBhbmQganVzdCBsZXQgdGhlIG1pc21hdGNoIHNsaXAgdGhyb3Vn aAo+ID4gPiA+ID4gMi4gZm9yY2UgaTkxNV9nZXRfdmJsYW5rX2NvdW50ZXIoKSB0byByZXR1cm4g MCBhbHdheXMgd2hlbiB0aGUKPiA+ID4gPiA+ICAgIFRWIGVuY29kZXIgaXMgZ29pbmcgdG8gYmUg dXNlZAo+ID4gPiA+ID4gMy4gZG9uJ3QgY2FsbCBkcm1fY3J0Y19zZXRfbWF4X3ZibGFua19jb3Vu dCgpIGJlZm9yZSBkcm1fdmJsYW5rX29uKCkKPiA+ID4gPiA+ICAgIGFuZCBpbnN0ZWFkIGRlbGF5 IGl0IHVudGlsIGp1c3QgYmVmb3JlIHdlIGVuYWJsZSB0aGUgVFYgZW5jb2Rlcgo+ID4gPiA+ID4K PiA+ID4gPiA+IEkgdGhpbmsgb3B0aW9uIDMgaXMgb3Zlcmx5IGNvbXBsaWNhdGVkIHRvIGNvbnNp ZGVyIHNlcmlvdXNseS4gU28KPiA+ID4gPiA+IG9wdGlvbiAxIG9yIG9wdGlvbiAyIGlzIHdoYXQg SSB0aGluayB3ZSBzaG91bGQgZG8uIEZvciB3aGF0ZXZlcgo+ID4gPiA+ID4gcmVhc29uIEkgd2Vu dCB3aXRoIG9wdGlvbiAxIGhlcmUsIGJ1dCBtYXliZSBvcHRpb24gMiBpcyBiZXR0ZXIKPiA+ID4g PiA+IHNpbmNlIGl0IHdvdWxkIGJlIGFsbCBjb250YWluZWQgd2l0aGluIGk5MTUuLi4KPiA+ID4g Pgo+ID4gPiA+IERlbGF5IGRybV9jcnRjX3ZibGFua19vbiB1bnRpbCB0aGUgdmJsYW5rIGlzIHN0 YWJsZT8gVGhhdCBzZWVtcyBsaWtlIHRoZQo+ID4gPiA+IHNlbWFudGljYWxseSBjbGVhbiBzb2x1 dGlvbiB0byBtZSwgaW5zdGVhZCBvZiBoYWNraW5nIGFyb3VuZCBpbiBjb3JlIGNvZGUKPiA+ID4g PiB3aGVuIGRyaXZlcnMgbGVhayBnYXJiYWdlIG91dCAuLi4KPiA+ID4KPiA+ID4gV2UgbmVlZCBh IHZibGFuayB3YWl0IGJlZm9yZSB0dXJuaW5nIG9uIHRoZSBUViBlbmNvZGVyLiBDaGlja2VuIHZz LiBlZ2cuCj4gPiAKPiA+IEdhaC4KPiA+IAo+ID4gT2sgSSB0aGluayBJIHRoaW5rIGhhdmluZyB0 aGUgaGFjayBoZXJlIG1ha2VzIHNlbnNlIHRoZW4sIGJ1dCBzcGxpdAo+ID4gb3V0IGFzIGEgc2Vw YXJhdGUgcGF0Y2ggd2l0aCBzZXBhcmF0ZSBqdXN0aWZpY2F0aW9uLiBJdCdzIGEgYml0IGEKPiA+ IHRyaWNreSB0aGluZyB0aGF0IGRlc2VydmVzIHRvIGJlIGhpZ2xpZ2h0ZWQgKGFuZCBlYXNpZXIg d2F5IHRvIGZvdW5kCj4gPiB0aGUgZXhwbGFuYXRpb24gd2l0aCBnaXQgYmxhbWUgaW4gY2FzZSBp dCdzIGV2ZXIgbmVlZGVkKS4KPiAKPiBPciB3ZSBnbyB3aXRoIG9wdGlvbiAyLiBJdCBkb2Vzbid0 IHNlZW0gdG9vIGJhZCBhY3R1YWxseS4KPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKPiBpbmRl eCAwMTljYjY4NTk4NmMuLjI2ZDg2YWVkYzdhYyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2lycS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEu Ywo+IEBAIC04MjIsMTEgKzgyMiwyNiBAQCBzdGF0aWMgdm9pZCBpOTE1X2VuYWJsZV9hc2xlX3Bp cGVzdGF0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgc3RhdGljIHUzMiBp OTE1X2dldF92YmxhbmtfY291bnRlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBp bnQgcGlwZSkKPiAgewo+ICAgICAgICAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gdG9faTkxNShkZXYpOwo+ICsgICAgICAgc3RydWN0IGRybV92YmxhbmtfY3J0YyAqdmJsYW5r ID0gJmRldi0+dmJsYW5rW3BpcGVdOwo+ICsgICAgICAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5 X21vZGUgKm1vZGUgPSB2YmxhbmstPmh3bW9kZTsKPiAgICAgICAgIGk5MTVfcmVnX3QgaGlnaF9m cmFtZSwgbG93X2ZyYW1lOwo+ICAgICAgICAgdTMyIGhpZ2gxLCBoaWdoMiwgbG93LCBwaXhlbCwg dmJsX3N0YXJ0LCBoc3luY19zdGFydCwgaHRvdGFsOwo+IC0gICAgICAgY29uc3Qgc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgKm1vZGUgPSAmZGV2LT52YmxhbmtbcGlwZV0uaHdtb2RlOwo+ICAgICAg ICAgdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKPiAgCj4gKyAgICAgICAvKgo+ICsgICAgICAgICog T24gaTk2NWdtIFRWIG91dHB1dCB0aGUgZnJhbWUgY291bnRlciB3b3JrcyB1cCB0bwo+ICsgICAg ICAgICogdGhlIHBvaW50IHdoZW4gd2UgZW5hYmxlIHRoZSBUViBlbmNvZGVyLiBBZnRlciB0aGF0 IHRoZQo+ICsgICAgICAgICogZnJhbWUgY291bnRlciBjZWFzZXMgdG8gd29yayBhbmQgcmVhZHMg emVyby4gV2UgbmVlZCBhCj4gKyAgICAgICAgKiB2Ymxhbmsgd2FpdCBiZWZvcmUgZW5hYmxpbmcg dGhlIFRWIGVuY29kZXIgYW5kIHNvIHdlCj4gKyAgICAgICAgKiBoYXZlIHRvIGVuYWJsZSB2Ymxh bmsgaW50ZXJydXB0cyB3aGlsZSB0aGUgZnJhbWUgY291bnRlcgo+ICsgICAgICAgICogaXMgc3Rp bGwgaW4gYSB3b3JraW5nIHN0YXRlLiBIb3dldmVyIHRoZSBjb3JlIHZibGFuayBjb2RlCj4gKyAg ICAgICAgKiBkb2VzIG5vdCBsaWtlIHVzIHJldHVybmluZyBub24temVybyBmcmFtZSBjb3VudGVy IHZhbHVlcwo+ICsgICAgICAgICogd2hlbiB3ZSd2ZSB0b2xkIGl0IHRoYXQgd2UgZG9uJ3QgaGF2 ZSBhIHdvcmtpbmcgZnJhbWUKPiArICAgICAgICAqIGNvdW50ZXIuIFRodXMgd2UgbXVzdCBzdG9w IG5vbi16ZXJvIHZhbHVlcyBsZWFraW5nIG91dC4KPiArICAgICAgICAqLwo+ICsgICAgICAgaWYg KCF2YmxhbmstPm1heF92YmxhbmtfY291bnQpCj4gKyAgICAgICAgICAgICAgIHJldHVybiAwOwoK SG0geWVhaCwgbG9va3MgcmVhc29uYWJsZSBhY3R1YWxseS4gQW5kIGxlc3MgaGFja3MgaW4gdGhl IHNoYXJlZCBjb2RlLgotRGFuaWVsCgo+ICsKPiAgICAgICAgIGh0b3RhbCA9IG1vZGUtPmNydGNf aHRvdGFsOwo+ICAgICAgICAgaHN5bmNfc3RhcnQgPSBtb2RlLT5jcnRjX2hzeW5jX3N0YXJ0Owo+ ICAgICAgICAgdmJsX3N0YXJ0ID0gbW9kZS0+Y3J0Y192Ymxhbmtfc3RhcnQ7Cj4gCj4gLS0gCj4g VmlsbGUgU3lyasOkbMOkCj4gSW50ZWwKCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2lu ZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0 CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK