From mboxrd@z Thu Jan 1 00:00:00 1970 From: Haneen Mohammed Subject: Re: [PATCH] drm: Add checks for NULL drm_*_helper_funcs Date: Tue, 29 May 2018 12:03:24 +0300 Message-ID: <20180529090324.GA3010@Haneen> References: <20180525022008.GA29417@haneen-vb> <20180529080353.GC3438@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wr0-x242.google.com (mail-wr0-x242.google.com [IPv6:2a00:1450:400c:c0c::242]) by gabe.freedesktop.org (Postfix) with ESMTPS id AB8E66E138 for ; Tue, 29 May 2018 09:03:30 +0000 (UTC) Received: by mail-wr0-x242.google.com with SMTP id d2-v6so8682819wrm.10 for ; Tue, 29 May 2018 02:03:30 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20180529080353.GC3438@phenom.ffwll.local> 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: rodrigosiqueiramelo@gmail.com, David Airlie , Daniel Vetter , dri-devel List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCBNYXkgMjksIDIwMTggYXQgMTA6MDM6NTNBTSArMDIwMCwgRGFuaWVsIFZldHRlciB3 cm90ZToKPiBPbiBGcmksIE1heSAyNSwgMjAxOCBhdCAwNToyMDowOEFNICswMzAwLCBIYW5lZW4g TW9oYW1tZWQgd3JvdGU6Cj4gPiBUaGlzIHBhdGNoIGFkZCBjaGVja3MgZm9yIE5VTEwgZHJtX1tj b25uZWN0b3IvY3J0Yy9wbGFuZV1faGVscGVyX2Z1bmNzCj4gPiBwb2ludGVycyBiZWZvcmUgZGVy ZWZyZW5jaW5nIHRoZSB2YXJpYWJsZSB0byBhdm9pZCBOVUxMIHBvaW50ZXIKPiA+IGRlcmVmZXJl bmNlIGFuZCBtYWtlIHRoZSBoZWxwZXIgZnVuY3Rpb25zIGFzIG9wdGlvbmFsIGFzIHBvc3NpYmxl Lgo+ID4gCj4gPiBTaWduZWQtb2ZmLWJ5OiBIYW5lZW4gTW9oYW1tZWQgPGhhbW9oYW1tZWQuc2FA Z21haWwuY29tPgo+IAo+IEkgc3RhcnRlZCByZXZpZXdpbmcgdGhpcywgYW5kIHRoZW4gcmVhbGl6 ZWQgaXQncyBhIGJpdCBhIGNhbiBvZiB3b3Jtcy4KPiBFLmcuIGNvbm5lY3Rvci0+ZnVuY3MtPmRl dGVjdCBzaG91bGRuJ3QgYmUgdGhlcmUsIGl0J3MgYSBoZWxwZXIgY2FsbGJhY2sKPiByZWFsbHkg KGJ1dCBwbGFjZWQgaW4gdGhlIHdyb25nIGZ1bmN0aW9uIHRhYmxlKS4gU28gY29ubmVjdG9yLT5m dW5jcyBpc24ndAo+IG9wdGlvbmFsLCBidXQgY29ubmVjdG9yLT5mdW5jcy0+ZGV0ZWN0IG1heWJl IHNob3VsZCBiZSBvcHRpb25hbC4KPiAKPiBTbyBJJ20gbm90IHN1cmUgYW55bW9yZSB3aGV0aGVy IGRvaW5nIHRoaXMgaG9sZXNhbGUgaXMgYSBnb29kIGlkZWEuIERvIHdlCj4gc3RpbGwgbmVlZCB0 aGlzIGZvciB2a21zPyBJZiB5ZXMsIHRoZW4gYSBtb3JlIGZvY3VzZWQgcGF0Y2ggdG8ganVzdCBt YWtlCj4gdGhlIHRoaW5ncyBvcHRpb25hbCB0aGF0IHZrbXMgZG9lcyBub3QgKHlldCkgcHJvdmlk ZSBtaWdodCBiZSBiZXR0ZXIuCj4gSW5jbHVkaW5nIGFuIGV4cGxhbmF0aW9uIG9mIHdoYXQgZXhh Y3RseSBibG93cyB1cCBpbiB2a21zLgo+IAoKaG0gb25seSBmb3IgcnVubmluZyB0aGUgaWd0IHRl c3RzICYgbW9kZXRlc3QgaW4gbGliZHJtLiAKCkl0IHdhcyBlYXNpZXIgdG8gYWRkIGNoZWNrIGZv ciBhbGwgdGhlIGZ1bmNzLCBidXQgSSB3aWxsIGNoZWNrIGFnYWluIHRoZQpsZWFzdCBhbW91bnQg b2YgY2hlY2tzIG5lZWRlZCBmb3Igdmttcy4KClRoYW5rIHlvdSEKSGFuZWVuCgo+IFRoYW5rcywg RGFuaWVsCj4gPiAtLS0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pY19oZWxwZXIuYyB8 IDQyICsrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tCj4gPiAgZHJpdmVycy9ncHUvZHJtL2Ry bV9wcm9iZV9oZWxwZXIuYyAgfCAxMSArKysrLS0tLQo+ID4gIDIgZmlsZXMgY2hhbmdlZCwgMjgg aW5zZXJ0aW9ucygrKSwgMjUgZGVsZXRpb25zKC0pCj4gPiAKPiA+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vZHJtX2F0b21pY19oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRv bWljX2hlbHBlci5jCj4gPiBpbmRleCBjMzU2NTQ1OTFjMTIuLjUyMDkyZGViNzQxZCAxMDA2NDQK PiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX2hlbHBlci5jCj4gPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pY19oZWxwZXIuYwo+ID4gQEAgLTExMiw5ICsxMTIsOSBA QCBzdGF0aWMgaW50IGhhbmRsZV9jb25mbGljdGluZ19lbmNvZGVycyhzdHJ1Y3QgZHJtX2F0b21p Y19zdGF0ZSAqc3RhdGUsCj4gPiAgCQlpZiAoIW5ld19jb25uX3N0YXRlLT5jcnRjKQo+ID4gIAkJ CWNvbnRpbnVlOwo+ID4gIAo+ID4gLQkJaWYgKGZ1bmNzLT5hdG9taWNfYmVzdF9lbmNvZGVyKQo+ ID4gKwkJaWYgKGZ1bmNzICYmIGZ1bmNzLT5hdG9taWNfYmVzdF9lbmNvZGVyKQo+ID4gIAkJCW5l d19lbmNvZGVyID0gZnVuY3MtPmF0b21pY19iZXN0X2VuY29kZXIoY29ubmVjdG9yLCBuZXdfY29u bl9zdGF0ZSk7Cj4gPiAtCQllbHNlIGlmIChmdW5jcy0+YmVzdF9lbmNvZGVyKQo+ID4gKwkJZWxz ZSBpZiAoZnVuY3MgJiYgZnVuY3MtPmJlc3RfZW5jb2RlcikKPiA+ICAJCQluZXdfZW5jb2RlciA9 IGZ1bmNzLT5iZXN0X2VuY29kZXIoY29ubmVjdG9yKTsKPiA+ICAJCWVsc2UKPiA+ICAJCQluZXdf ZW5jb2RlciA9IGRybV9hdG9taWNfaGVscGVyX2Jlc3RfZW5jb2Rlcihjb25uZWN0b3IpOwo+ID4g QEAgLTMwOCwxMCArMzA4LDEwIEBAIHVwZGF0ZV9jb25uZWN0b3Jfcm91dGluZyhzdHJ1Y3QgZHJt X2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gPiAgCj4gPiAgCWZ1bmNzID0gY29ubmVjdG9yLT5oZWxw ZXJfcHJpdmF0ZTsKPiA+ICAKPiA+IC0JaWYgKGZ1bmNzLT5hdG9taWNfYmVzdF9lbmNvZGVyKQo+ ID4gKwlpZiAoZnVuY3MgJiYgZnVuY3MtPmF0b21pY19iZXN0X2VuY29kZXIpCj4gPiAgCQluZXdf ZW5jb2RlciA9IGZ1bmNzLT5hdG9taWNfYmVzdF9lbmNvZGVyKGNvbm5lY3RvciwKPiA+ICAJCQkJ CQkJIG5ld19jb25uZWN0b3Jfc3RhdGUpOwo+ID4gLQllbHNlIGlmIChmdW5jcy0+YmVzdF9lbmNv ZGVyKQo+ID4gKwllbHNlIGlmIChmdW5jcyAmJiBmdW5jcy0+YmVzdF9lbmNvZGVyKQo+ID4gIAkJ bmV3X2VuY29kZXIgPSBmdW5jcy0+YmVzdF9lbmNvZGVyKGNvbm5lY3Rvcik7Cj4gPiAgCWVsc2UK PiA+ICAJCW5ld19lbmNvZGVyID0gZHJtX2F0b21pY19oZWxwZXJfYmVzdF9lbmNvZGVyKGNvbm5l Y3Rvcik7Cj4gPiBAQCAtNDM4LDcgKzQzOCw3IEBAIG1vZGVfZml4dXAoc3RydWN0IGRybV9hdG9t aWNfc3RhdGUgKnN0YXRlKQo+ID4gIAkJCWNvbnRpbnVlOwo+ID4gIAo+ID4gIAkJZnVuY3MgPSBj cnRjLT5oZWxwZXJfcHJpdmF0ZTsKPiA+IC0JCWlmICghZnVuY3MtPm1vZGVfZml4dXApCj4gPiAr CQlpZiAoIWZ1bmNzIHx8ICFmdW5jcy0+bW9kZV9maXh1cCkKPiA+ICAJCQljb250aW51ZTsKPiA+ ICAKPiA+ICAJCXJldCA9IGZ1bmNzLT5tb2RlX2ZpeHVwKGNydGMsICZuZXdfY3J0Y19zdGF0ZS0+ bW9kZSwKPiA+IEBAIC02MzksNyArNjM5LDcgQEAgZHJtX2F0b21pY19oZWxwZXJfY2hlY2tfbW9k ZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4gIAkJCQluZXdfY3J0Y19zdGF0ZS0+Y29u bmVjdG9yc19jaGFuZ2VkID0gdHJ1ZTsKPiA+ICAJCX0KPiA+ICAKPiA+IC0JCWlmIChmdW5jcy0+ YXRvbWljX2NoZWNrKQo+ID4gKwkJaWYgKGZ1bmNzICYmIGZ1bmNzLT5hdG9taWNfY2hlY2spCj4g PiAgCQkJcmV0ID0gZnVuY3MtPmF0b21pY19jaGVjayhjb25uZWN0b3IsIG5ld19jb25uZWN0b3Jf c3RhdGUpOwo+ID4gIAkJaWYgKHJldCkKPiA+ICAJCQlyZXR1cm4gcmV0Owo+ID4gQEAgLTY4MSw3 ICs2ODEsNyBAQCBkcm1fYXRvbWljX2hlbHBlcl9jaGVja19tb2Rlc2V0KHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsCj4gPiAgCQlpZiAoY29ubmVjdG9yc19tYXNrICYgQklUKGkpKQo+ID4gIAkJCWNv bnRpbnVlOwo+ID4gIAo+ID4gLQkJaWYgKGZ1bmNzLT5hdG9taWNfY2hlY2spCj4gPiArCQlpZiAo ZnVuY3MgJiYgZnVuY3MtPmF0b21pY19jaGVjaykKPiA+ICAJCQlyZXQgPSBmdW5jcy0+YXRvbWlj X2NoZWNrKGNvbm5lY3RvciwgbmV3X2Nvbm5lY3Rvcl9zdGF0ZSk7Cj4gPiAgCQlpZiAocmV0KQo+ ID4gIAkJCXJldHVybiByZXQ7Cj4gPiBAQCAtOTcyLDE0ICs5NzIsMTYgQEAgZGlzYWJsZV9vdXRw dXRzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpvbGRf c3RhdGUpCj4gPiAgCj4gPiAgCj4gPiAgCQkvKiBSaWdodCBmdW5jdGlvbiBkZXBlbmRzIHVwb24g dGFyZ2V0IHN0YXRlLiAqLwo+ID4gLQkJaWYgKG5ld19jcnRjX3N0YXRlLT5lbmFibGUgJiYgZnVu Y3MtPnByZXBhcmUpCj4gPiAtCQkJZnVuY3MtPnByZXBhcmUoY3J0Yyk7Cj4gPiAtCQllbHNlIGlm IChmdW5jcy0+YXRvbWljX2Rpc2FibGUpCj4gPiAtCQkJZnVuY3MtPmF0b21pY19kaXNhYmxlKGNy dGMsIG9sZF9jcnRjX3N0YXRlKTsKPiA+IC0JCWVsc2UgaWYgKGZ1bmNzLT5kaXNhYmxlKQo+ID4g LQkJCWZ1bmNzLT5kaXNhYmxlKGNydGMpOwo+ID4gLQkJZWxzZQo+ID4gLQkJCWZ1bmNzLT5kcG1z KGNydGMsIERSTV9NT0RFX0RQTVNfT0ZGKTsKPiA+ICsJCWlmIChmdW5jcykgewo+ID4gKwkJCWlm IChuZXdfY3J0Y19zdGF0ZS0+ZW5hYmxlICYmIGZ1bmNzLT5wcmVwYXJlKQo+ID4gKwkJCQlmdW5j cy0+cHJlcGFyZShjcnRjKTsKPiA+ICsJCQllbHNlIGlmIChmdW5jcy0+YXRvbWljX2Rpc2FibGUp Cj4gPiArCQkJCWZ1bmNzLT5hdG9taWNfZGlzYWJsZShjcnRjLCBvbGRfY3J0Y19zdGF0ZSk7Cj4g PiArCQkJZWxzZSBpZiAoZnVuY3MtPmRpc2FibGUpCj4gPiArCQkJCWZ1bmNzLT5kaXNhYmxlKGNy dGMpOwo+ID4gKwkJCWVsc2UKPiA+ICsJCQkJZnVuY3MtPmRwbXMoY3J0YywgRFJNX01PREVfRFBN U19PRkYpOwo+ID4gKwkJfQo+ID4gIAo+ID4gIAkJaWYgKCEoZGV2LT5pcnFfZW5hYmxlZCAmJiBk ZXYtPm51bV9jcnRjcykpCj4gPiAgCQkJY29udGludWU7Cj4gPiBAQCAtMTA5Myw3ICsxMDk1LDcg QEAgY3J0Y19zZXRfbW9kZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2F0b21p Y19zdGF0ZSAqb2xkX3N0YXRlKQo+ID4gIAo+ID4gIAkJZnVuY3MgPSBjcnRjLT5oZWxwZXJfcHJp dmF0ZTsKPiA+ICAKPiA+IC0JCWlmIChuZXdfY3J0Y19zdGF0ZS0+ZW5hYmxlICYmIGZ1bmNzLT5t b2RlX3NldF9ub2ZiKSB7Cj4gPiArCQlpZiAobmV3X2NydGNfc3RhdGUtPmVuYWJsZSAmJiBmdW5j cyAmJiBmdW5jcy0+bW9kZV9zZXRfbm9mYikgewo+ID4gIAkJCURSTV9ERUJVR19BVE9NSUMoIm1v ZGVzZXQgb24gW0NSVEM6JWQ6JXNdXG4iLAo+ID4gIAkJCQkJIGNydGMtPmJhc2UuaWQsIGNydGMt Pm5hbWUpOwo+ID4gIAo+ID4gQEAgLTExOTcsNyArMTE5OSw3IEBAIHZvaWQgZHJtX2F0b21pY19o ZWxwZXJfY29tbWl0X21vZGVzZXRfZW5hYmxlcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4g IAo+ID4gIAkJZnVuY3MgPSBjcnRjLT5oZWxwZXJfcHJpdmF0ZTsKPiA+ICAKPiA+IC0JCWlmIChu ZXdfY3J0Y19zdGF0ZS0+ZW5hYmxlKSB7Cj4gPiArCQlpZiAoZnVuY3MgJiYgbmV3X2NydGNfc3Rh dGUtPmVuYWJsZSkgewo+ID4gIAkJCURSTV9ERUJVR19BVE9NSUMoImVuYWJsaW5nIFtDUlRDOiVk OiVzXVxuIiwKPiA+ICAJCQkJCSBjcnRjLT5iYXNlLmlkLCBjcnRjLT5uYW1lKTsKPiA+ICAKPiA+ IEBAIC0yMTE3LDcgKzIxMTksNyBAQCBpbnQgZHJtX2F0b21pY19oZWxwZXJfcHJlcGFyZV9wbGFu ZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiA+ICAKPiA+ICAJCWZ1bmNzID0gcGxhbmUtPmhl bHBlcl9wcml2YXRlOwo+ID4gIAo+ID4gLQkJaWYgKGZ1bmNzLT5wcmVwYXJlX2ZiKSB7Cj4gPiAr CQlpZiAoZnVuY3MgJiYgZnVuY3MtPnByZXBhcmVfZmIpIHsKPiA+ICAJCQlyZXQgPSBmdW5jcy0+ cHJlcGFyZV9mYihwbGFuZSwgbmV3X3BsYW5lX3N0YXRlKTsKPiA+ICAJCQlpZiAocmV0KQo+ID4g IAkJCQlnb3RvIGZhaWw7Cj4gPiBAQCAtMjEzNSw3ICsyMTM3LDcgQEAgaW50IGRybV9hdG9taWNf aGVscGVyX3ByZXBhcmVfcGxhbmVzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gPiAgCj4gPiAg CQlmdW5jcyA9IHBsYW5lLT5oZWxwZXJfcHJpdmF0ZTsKPiA+ICAKPiA+IC0JCWlmIChmdW5jcy0+ Y2xlYW51cF9mYikKPiA+ICsJCWlmIChmdW5jcyAmJiBmdW5jcy0+Y2xlYW51cF9mYikKPiA+ICAJ CQlmdW5jcy0+Y2xlYW51cF9mYihwbGFuZSwgbmV3X3BsYW5lX3N0YXRlKTsKPiA+ICAJfQo+ID4g IAo+ID4gQEAgLTI0MTIsNyArMjQxNCw3IEBAIHZvaWQgZHJtX2F0b21pY19oZWxwZXJfY2xlYW51 cF9wbGFuZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiA+ICAKPiA+ICAJCWZ1bmNzID0gcGxh bmUtPmhlbHBlcl9wcml2YXRlOwo+ID4gIAo+ID4gLQkJaWYgKGZ1bmNzLT5jbGVhbnVwX2ZiKQo+ ID4gKwkJaWYgKGZ1bmNzICYmIGZ1bmNzLT5jbGVhbnVwX2ZiKQo+ID4gIAkJCWZ1bmNzLT5jbGVh bnVwX2ZiKHBsYW5lLCBwbGFuZV9zdGF0ZSk7Cj4gPiAgCX0KPiA+ICB9Cj4gPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2RybV9wcm9iZV9oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9k cm1fcHJvYmVfaGVscGVyLmMKPiA+IGluZGV4IDUyNzc0MzM5NDE1MC4uNDI1MDdhYTdmNzYzIDEw MDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9wcm9iZV9oZWxwZXIuYwo+ID4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2RybV9wcm9iZV9oZWxwZXIuYwo+ID4gQEAgLTI3Miw5ICsyNzIs OSBAQCBkcm1faGVscGVyX3Byb2JlX2RldGVjdF9jdHgoc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvciwgYm9vbCBmb3JjZSkKPiA+ICByZXRyeToKPiA+ICAJcmV0ID0gZHJtX21vZGVzZXRf bG9jaygmY29ubmVjdG9yLT5kZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rpb25fbXV0ZXgsICZjdHgp Owo+ID4gIAlpZiAoIXJldCkgewo+ID4gLQkJaWYgKGZ1bmNzLT5kZXRlY3RfY3R4KQo+ID4gKwkJ aWYgKGZ1bmNzICYmIGZ1bmNzLT5kZXRlY3RfY3R4KQo+ID4gIAkJCXJldCA9IGZ1bmNzLT5kZXRl Y3RfY3R4KGNvbm5lY3RvciwgJmN0eCwgZm9yY2UpOwo+ID4gLQkJZWxzZSBpZiAoY29ubmVjdG9y LT5mdW5jcy0+ZGV0ZWN0KQo+ID4gKwkJZWxzZSBpZiAoY29ubmVjdG9yLT5mdW5jcyAmJiBjb25u ZWN0b3ItPmZ1bmNzLT5kZXRlY3QpCj4gPiAgCQkJcmV0ID0gY29ubmVjdG9yLT5mdW5jcy0+ZGV0 ZWN0KGNvbm5lY3RvciwgZm9yY2UpOwo+ID4gIAkJZWxzZQo+ID4gIAkJCXJldCA9IGNvbm5lY3Rv cl9zdGF0dXNfY29ubmVjdGVkOwo+ID4gQEAgLTMyMCw5ICszMjAsOSBAQCBkcm1faGVscGVyX3By b2JlX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ID4gIAlpZiAocmV0 KQo+ID4gIAkJcmV0dXJuIHJldDsKPiA+ICAKPiA+IC0JaWYgKGZ1bmNzLT5kZXRlY3RfY3R4KQo+ ID4gKwlpZiAoZnVuY3MgJiYgZnVuY3MtPmRldGVjdF9jdHgpCj4gPiAgCQlyZXR1cm4gZnVuY3Mt PmRldGVjdF9jdHgoY29ubmVjdG9yLCBjdHgsIGZvcmNlKTsKPiA+IC0JZWxzZSBpZiAoY29ubmVj dG9yLT5mdW5jcy0+ZGV0ZWN0KQo+ID4gKwllbHNlIGlmIChjb25uZWN0b3ItPmZ1bmNzICYmIGNv bm5lY3Rvci0+ZnVuY3MtPmRldGVjdCkKPiA+ICAJCXJldHVybiBjb25uZWN0b3ItPmZ1bmNzLT5k ZXRlY3QoY29ubmVjdG9yLCBmb3JjZSk7Cj4gPiAgCWVsc2UKPiA+ICAJCXJldHVybiBjb25uZWN0 b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKPiA+IEBAIC00ODAsNyArNDgwLDggQEAgaW50IGRybV9oZWxw ZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yLAo+ID4gIAkJZ290byBwcnVuZTsKPiA+ICAJfQo+ID4gIAo+ID4gLQljb3VudCA9ICgq Y29ubmVjdG9yX2Z1bmNzLT5nZXRfbW9kZXMpKGNvbm5lY3Rvcik7Cj4gPiArCWlmIChjb25uZWN0 b3JfZnVuY3MgJiYgY29ubmVjdG9yX2Z1bmNzLT5nZXRfbW9kZXMpCj4gPiArCQljb3VudCA9ICgq Y29ubmVjdG9yX2Z1bmNzLT5nZXRfbW9kZXMpKGNvbm5lY3Rvcik7Cj4gPiAgCj4gPiAgCWlmIChj b3VudCA9PSAwICYmIGNvbm5lY3Rvci0+c3RhdHVzID09IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVj dGVkKQo+ID4gIAkJY291bnQgPSBkcm1fYWRkX21vZGVzX25vZWRpZChjb25uZWN0b3IsIDEwMjQs IDc2OCk7Cj4gPiAtLSAKPiA+IDIuMTcuMAo+ID4gCj4gCj4gLS0gCj4gRGFuaWVsIFZldHRlcgo+ IFNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgo+IGh0dHA6Ly9ibG9nLmZmd2xs LmNoCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1k ZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=