From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sean Paul Subject: Re: [PATCH 07/25] drm/msm/dpu: reserve using crtc state Date: Tue, 9 Oct 2018 17:06:00 -0400 Message-ID: <20181009210600.GQ154160@art_vandelay> References: <1539059262-8326-1-git-send-email-jsanka@codeaurora.org> <1539059262-8326-8-git-send-email-jsanka@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1539059262-8326-8-git-send-email-jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: Jeykumar Sankaran Cc: linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, jcrouse-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, hoegsberg-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org T24gTW9uLCBPY3QgMDgsIDIwMTggYXQgMDk6Mjc6MjRQTSAtMDcwMCwgSmV5a3VtYXIgU2Fua2Fy YW4gd3JvdGU6Cj4gRFBVIG1haW50YWluZWQgcmVzZXJ2YXRpb24gbGlzdHMgdG8gY2FjaGUgYXNz aWduZWQKPiBIVyBibG9ja3MgZm9yIHRoZSBkaXNwbGF5IGFuZCBhIHJldHJpZXZhbCBtZWNoYW5p c20gZm9yCj4gdGhlIGluZGl2aWR1YWwgRFJNIGNvbXBvbmVudHMgdG8gcXVlcnkgdGhlaXIgcmVz cGVjdGl2ZQo+IEhXIGJsb2Nrcy4KPiAKPiBUaGlzIHBhdGNoIHVzZXMgdGhlIHN1Yi1jbGFzc2Vk IENSVEMgc3RhdGUgdG8gc3RvcmUKPiBhbmQgdHJhY2sgSFcgYmxvY2tzIGFzc2lnbmVkIGZvciBk aWZmZXJlbnQgY29tcG9uZW50cwo+IG9mIHRoZSBkaXNwbGF5IHBpcGVsaW5lLiBJdCBoZWxwcyB0 aGUgZHJpdmVyOgo+IC0gdG8gZ2V0IHJpZCBvZiB1bndhbnRlZCBzdG9yZSBhbmQgcmV0cmlldmFs IFJNIEFQSSdzCj4gLSB0byBwcmVzZXJ2ZSBIVyByZXNvdXJjZXMgYXNzaWduZWQgaW4gYXRvbWlj X2NoZWNrCj4gICB0aHJvdWdoIGF0b21pYyBzd2FwL2R1cGxpY2F0ZS4KPiAKPiBTZXBhcmF0ZSBw YXRjaCBpcyBzdWJtaXR0ZWQgdG8gcmVtb3ZlIHJlc291cmNlCj4gcmVzZXJ2YXRpb24gaW4gYXRv bWljX2NvbW1pdCBwYXRoLgo+IAo+IFNpZ25lZC1vZmYtYnk6IEpleWt1bWFyIFNhbmthcmFuIDxq c2Fua2FAY29kZWF1cm9yYS5vcmc+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9jcnRjLmMgICAgICAgICAgIHwgNjUgKysrLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICBk cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5oICAgICAgICAgICB8IDE0ICsr KysrCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmMgICAgICAg IHwgMjggKysrLS0tLS0tLQo+ICAuLi4vZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVy X3BoeXNfdmlkLmMgICB8IDIwICsrLS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X3JtLmMgICAgICAgICAgICAgfCA1OCArKysrKysrKysrKystLS0tLS0tCj4gIDUgZmls ZXMgY2hhbmdlZCwgNzIgaW5zZXJ0aW9ucygrKSwgMTEzIGRlbGV0aW9ucygtKQo+IAo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5jIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuYwo+IGluZGV4IDQ5NjA2NDEuLjA2MjVm NTYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMu Ywo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMKPiBAQCAt NDIxLDY5ICs0MjEsMjAgQEAgdm9pZCBkcHVfY3J0Y19jb21wbGV0ZV9jb21taXQoc3RydWN0IGRy bV9jcnRjICpjcnRjLAo+ICAJdHJhY2VfZHB1X2NydGNfY29tcGxldGVfY29tbWl0KERSTUlEKGNy dGMpKTsKPiAgfQo+ICAKPiAtc3RhdGljIHZvaWQgX2RwdV9jcnRjX3NldHVwX21peGVyX2Zvcl9l bmNvZGVyKAo+IC0JCXN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiAtCQlzdHJ1Y3QgZHJtX2VuY29k ZXIgKmVuYykKPiArc3RhdGljIHZvaWQgX2RwdV9jcnRjX3NldHVwX21peGVycyhzdHJ1Y3QgZHJt X2NydGMgKmNydGMpCj4gIHsKPiAgCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqY3N0YXRlID0gdG9f ZHB1X2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpOwo+IC0Jc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMg PSBfZHB1X2NydGNfZ2V0X2ttcyhjcnRjKTsKPiAtCXN0cnVjdCBkcHVfcm0gKnJtID0gJmRwdV9r bXMtPnJtOwo+ICAJc3RydWN0IGRwdV9jcnRjX21peGVyICptaXhlcjsKPiAtCXN0cnVjdCBkcHVf aHdfY3RsICpsYXN0X3ZhbGlkX2N0bCA9IE5VTEw7Cj4gLQlpbnQgaTsKPiAtCXN0cnVjdCBkcHVf cm1faHdfaXRlciBsbV9pdGVyLCBjdGxfaXRlcjsKPiAtCj4gLQlkcHVfcm1faW5pdF9od19pdGVy KCZsbV9pdGVyLCBlbmMtPmJhc2UuaWQsIERQVV9IV19CTEtfTE0pOwo+IC0JZHB1X3JtX2luaXRf aHdfaXRlcigmY3RsX2l0ZXIsIGVuYy0+YmFzZS5pZCwgRFBVX0hXX0JMS19DVEwpOwo+ICsJaW50 IGksIGN0bF9pbmRleDsKPiAgCj4gIAkvKiBTZXQgdXAgYWxsIHRoZSBtaXhlcnMgYW5kIGN0bHMg cmVzZXJ2ZWQgYnkgdGhpcyBlbmNvZGVyICovCj4gLQlmb3IgKGkgPSBjc3RhdGUtPm51bV9taXhl cnM7IGkgPCBBUlJBWV9TSVpFKGNzdGF0ZS0+bWl4ZXJzKTsgaSsrKSB7Cj4gKwlmb3IgKGkgPSAw OyBpIDwgY3N0YXRlLT5udW1fbWl4ZXJzOyBpKyspIHsKPiAgCQltaXhlciA9ICZjc3RhdGUtPm1p eGVyc1tpXTsKPiAgCj4gLQkJaWYgKCFkcHVfcm1fZ2V0X2h3KHJtLCAmbG1faXRlcikpCj4gLQkJ CWJyZWFrOwo+IC0JCW1peGVyLT5od19sbSA9IChzdHJ1Y3QgZHB1X2h3X21peGVyICopbG1faXRl ci5odzsKPiAtCj4gIAkJLyogQ1RMIG1heSBiZSA8PSBMTXMsIGlmIDwsIG11bHRpcGxlIExNcyBj b250cm9sbGVkIGJ5IDEgQ1RMICovCj4gLQkJaWYgKCFkcHVfcm1fZ2V0X2h3KHJtLCAmY3RsX2l0 ZXIpKSB7Cj4gLQkJCURQVV9ERUJVRygibm8gY3RsIGFzc2lnbmVkIHRvIGxtICVkLCB1c2luZyBw cmV2aW91c1xuIiwKPiAtCQkJCQltaXhlci0+aHdfbG0tPmlkeCAtIExNXzApOwo+IC0JCQltaXhl ci0+bG1fY3RsID0gbGFzdF92YWxpZF9jdGw7Cj4gLQkJfSBlbHNlIHsKPiAtCQkJbWl4ZXItPmxt X2N0bCA9IChzdHJ1Y3QgZHB1X2h3X2N0bCAqKWN0bF9pdGVyLmh3Owo+IC0JCQlsYXN0X3ZhbGlk X2N0bCA9IG1peGVyLT5sbV9jdGw7Cj4gLQkJfQo+IC0KPiAtCQkvKiBTaG91bGRuJ3QgaGFwcGVu LCBtaXhlcnMgYXJlIGFsd2F5cyA+PSBjdGxzICovCj4gLQkJaWYgKCFtaXhlci0+bG1fY3RsKSB7 Cj4gLQkJCURQVV9FUlJPUigibm8gdmFsaWQgY3RscyBmb3VuZCBmb3IgbG0gJWRcbiIsCj4gLQkJ CQkJbWl4ZXItPmh3X2xtLT5pZHggLSBMTV8wKTsKPiAtCQkJcmV0dXJuOwo+IC0JCX0KPiAtCj4g LQkJY3N0YXRlLT5udW1fbWl4ZXJzKys7Cj4gLQkJRFBVX0RFQlVHKCJzZXR1cCBtaXhlciAlZDog bG0gJWRcbiIsCj4gLQkJCQlpLCBtaXhlci0+aHdfbG0tPmlkeCAtIExNXzApOwo+IC0JCURQVV9E RUJVRygic2V0dXAgbWl4ZXIgJWQ6IGN0bCAlZFxuIiwKPiAtCQkJCWksIG1peGVyLT5sbV9jdGwt PmlkeCAtIENUTF8wKTsKPiAtCX0KPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgX2RwdV9jcnRjX3Nl dHVwX21peGVycyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gLXsKPiAtCXN0cnVjdCBkcHVfY3J0 YyAqZHB1X2NydGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKPiAtCXN0cnVjdCBkcm1fZW5jb2RlciAq ZW5jOwo+IC0KPiAtCW11dGV4X2xvY2soJmRwdV9jcnRjLT5jcnRjX2xvY2spOwo+IC0JLyogQ2hl Y2sgZm9yIG1peGVycyBvbiBhbGwgZW5jb2RlcnMgYXR0YWNoZWQgdG8gdGhpcyBjcnRjICovCj4g LQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuYywgJmNydGMtPmRldi0+bW9kZV9jb25maWcuZW5jb2Rl cl9saXN0LCBoZWFkKSB7Cj4gLQkJaWYgKGVuYy0+Y3J0YyAhPSBjcnRjKQo+IC0JCQljb250aW51 ZTsKPiAtCj4gLQkJX2RwdV9jcnRjX3NldHVwX21peGVyX2Zvcl9lbmNvZGVyKGNydGMsIGVuYyk7 Cj4gKwkJY3RsX2luZGV4ID0gbWluKGksIGNzdGF0ZS0+bnVtX2N0bHMgLSAxKTsKClRoaXMgaXMg YW5vdGhlciBvbmUgb2YgdGhvc2UgcGxhY2VzIEkgbWVudGlvbmVkIHdoZXJlIHdlJ3JlIGp1c3Qg YXNzdW1pbmcgYQp2YWx1ZSBpcyBnb2luZyB0byBiZSBpbiBhIGNlcnRhaW4gcmFuZ2UuIElmIG51 bV9jdGxzL251bV9pbnRmcy9udW1fcGh5c19lbmNzCihhbGwgdGhlIHNhbWUgdmFsdWUgYWZhaWN0 KSBpcyAwLCB3ZSBlbmQgdXAgaW4gYSBiYWQgcGxhY2UuCgpBdCBhIG1pbmltdW0sIHRoZXJlIHNo b3VsZCBiZSBhIFdBUk5fT04vQlVHX09OIHNvbWV3aGVyZSBlbnN1cmluZyB0aGlzIGNhbiBuZXZl cgpkcm9wIGJlbG93IDAuCgo+ICsJCW1peGVyLT5sbV9jdGwgPSBjc3RhdGUtPmh3X2N0bHNbY3Rs X2luZGV4XTsKPiAgCX0KPiAtCj4gLQltdXRleF91bmxvY2soJmRwdV9jcnRjLT5jcnRjX2xvY2sp Owo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZCBfZHB1X2NydGNfc2V0dXBfbG1fYm91bmRzKHN0cnVj dCBkcm1fY3J0YyAqY3J0YywKPiBAQCAtNTM2LDEwICs0ODcsOCBAQCBzdGF0aWMgdm9pZCBkcHVf Y3J0Y19hdG9taWNfYmVnaW4oc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICAJZGV2ID0gY3J0Yy0+ ZGV2Owo+ICAJc21tdV9zdGF0ZSA9ICZkcHVfY3J0Yy0+c21tdV9zdGF0ZTsKPiAgCj4gLQlpZiAo IWNzdGF0ZS0+bnVtX21peGVycykgewo+IC0JCV9kcHVfY3J0Y19zZXR1cF9taXhlcnMoY3J0Yyk7 Cj4gLQkJX2RwdV9jcnRjX3NldHVwX2xtX2JvdW5kcyhjcnRjLCBjcnRjLT5zdGF0ZSk7Cj4gLQl9 Cj4gKwlfZHB1X2NydGNfc2V0dXBfbWl4ZXJzKGNydGMpOwo+ICsJX2RwdV9jcnRjX3NldHVwX2xt X2JvdW5kcyhjcnRjLCBjcnRjLT5zdGF0ZSk7Cj4gIAo+ICAJaWYgKGRwdV9jcnRjLT5ldmVudCkg ewo+ICAJCVdBUk5fT04oZHB1X2NydGMtPmV2ZW50KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9jcnRjLmgKPiBpbmRleCA3NWZkZDNjLi4xN2FhYWQ3IDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmgKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5oCj4gQEAgLTg0LDEyICs4NCwxNCBAQCBz dHJ1Y3QgZHB1X2NydGNfc21tdV9zdGF0ZV9kYXRhIHsKPiAgICogc3RydWN0IGRwdV9jcnRjX21p eGVyOiBzdG9yZXMgdGhlIG1hcCBmb3IgZWFjaCB2aXJ0dWFsIHBpcGVsaW5lIGluIHRoZSBDUlRD Cj4gICAqIEBod19sbToJTE0gSFcgRHJpdmVyIGNvbnRleHQKPiAgICogQGxtX2N0bDoJQ1RMIFBh dGggSFcgZHJpdmVyIGNvbnRleHQKPiArICogQGh3X3BwOglQaW5ncG9uZyBIVyBkcml2ZXIgY29u dGV4dAo+ICAgKiBAbWl4ZXJfb3BfbW9kZToJbWl4ZXIgYmxlbmRpbmcgb3BlcmF0aW9uIG1vZGUK PiAgICogQGZsdXNoX21hc2s6CW1peGVyIGZsdXNoIG1hc2sgZm9yIGN0bCwgbWl4ZXIgYW5kIHBp cGUKPiAgICovCj4gIHN0cnVjdCBkcHVfY3J0Y19taXhlciB7Cj4gIAlzdHJ1Y3QgZHB1X2h3X21p eGVyICpod19sbTsKPiAgCXN0cnVjdCBkcHVfaHdfY3RsICpsbV9jdGw7Cj4gKwlzdHJ1Y3QgZHB1 X2h3X3Bpbmdwb25nICpod19wcDsKPiAgCXUzMiBtaXhlcl9vcF9tb2RlOwo+ICAJdTMyIGZsdXNo X21hc2s7Cj4gIH07Cj4gQEAgLTIzMCw2ICsyMzIsMTggQEAgc3RydWN0IGRwdV9jcnRjX3N0YXRl IHsKPiAgCj4gIAl1MzIgbnVtX2N0bHM7Cj4gIAlzdHJ1Y3QgZHB1X2h3X2N0bCAqaHdfY3Rsc1tD UlRDX0RVQUxfTUlYRVJTXTsKPiArCj4gKwkvKioKPiArCSAqIGFzIGRybSBlbmNvZGVycyBkb2Vz bid0IGhhdmUgZGVkaWNhdGVzIHN0YXRlIG9iamVjdHMKPiArCSAqIGFuZCBkcm0gY29ubmVjdG9y cyBhcmUgbm90IG93bmVkIGJ5IERQVSwgbWFpbnRhaW4KPiArCSAqIEhXIGludGVyZmFjZSBhbmQg b3RoZXIgaW50ZXJmYWNlIHJlbGF0ZWQgYmxvY2tzCj4gKwkgKiBpbiBjcnRjIHN0YXRlCgpDYW4g eW91IHVzZSBwcml2YXRlIHN0YXRlIGluc3RlYWQ/Cgo+ICsJICoKPiArCSAqIFRPRE86IE5vIHN1 cHBvcnQgZm9yIGNsb25lIG1vZGUgeWV0IHdoZXJlIGEgY3J0Ywo+ICsJICogY2FuIGJlIGF0dGFj aGVkIHdpdGggbW9yZSB0aGFuIG9uZSBlbmNvZGVyL2Nvbm5lY3Rvci4KPiArCSAqLwo+ICsJdTMy IG51bV9pbnRmczsKPiArCXN0cnVjdCBkcHVfaHdfaW50ZiAqaHdfaW50ZnNbQ1JUQ19EVUFMX01J WEVSU107Cj4gIH07Cj4gIAo+ICAjZGVmaW5lIHRvX2RwdV9jcnRjX3N0YXRlKHgpIFwKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYyBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmMKPiBpbmRleCBkMTJmODk2 Li4xN2RiYmMzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9lbmNvZGVyLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5j b2Rlci5jCj4gQEAgLTEwMDEsOSArMTAwMSw4IEBAIHN0YXRpYyB2b2lkIGRwdV9lbmNvZGVyX3Zp cnRfbW9kZV9zZXQoc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jLAo+ICAJc3RydWN0IGRwdV9r bXMgKmRwdV9rbXM7Cj4gIAlzdHJ1Y3QgbGlzdF9oZWFkICpjb25uZWN0b3JfbGlzdDsKPiAgCXN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uID0gTlVMTCwgKmNvbm5faXRlcjsKPiAtCXN0cnVjdCBk cHVfcm1faHdfaXRlciBwcF9pdGVyLCBjdGxfaXRlcjsKPiArCXN0cnVjdCBkcHVfY3J0Y19zdGF0 ZSAqZHB1X2NzdGF0ZTsKPiAgCXN0cnVjdCBtc21fZGlzcGxheV90b3BvbG9neSB0b3BvbG9neTsK PiAtCXN0cnVjdCBkcHVfaHdfY3RsICpod19jdGxbTUFYX0NIQU5ORUxTX1BFUl9FTkNdID0geyBO VUxMIH07Cj4gIAlpbnQgaSA9IDAsIHJldDsKPiAgCj4gIAlpZiAoIWRybV9lbmMpIHsKPiBAQCAt MTA0MywyNyArMTA0MiwxNCBAQCBzdGF0aWMgdm9pZCBkcHVfZW5jb2Rlcl92aXJ0X21vZGVfc2V0 KHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywKPiAgCQlyZXR1cm47Cj4gIAl9Cj4gIAo+IC0J ZHB1X3JtX2luaXRfaHdfaXRlcigmcHBfaXRlciwgZHJtX2VuYy0+YmFzZS5pZCwgRFBVX0hXX0JM S19QSU5HUE9ORyk7Cj4gLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0NIQU5ORUxTX1BFUl9FTkM7IGkr Kykgewo+IC0JCWRwdV9lbmMtPmh3X3BwW2ldID0gTlVMTDsKPiAtCQlpZiAoIWRwdV9ybV9nZXRf aHcoJmRwdV9rbXMtPnJtLCAmcHBfaXRlcikpCj4gLQkJCWJyZWFrOwo+IC0JCWRwdV9lbmMtPmh3 X3BwW2ldID0gKHN0cnVjdCBkcHVfaHdfcGluZ3BvbmcgKikgcHBfaXRlci5odzsKPiAtCX0KPiAt Cj4gLQlkcHVfcm1faW5pdF9od19pdGVyKCZjdGxfaXRlciwgZHJtX2VuYy0+YmFzZS5pZCwgRFBV X0hXX0JMS19DVEwpOwo+IC0JZm9yIChpID0gMDsgaSA8IE1BWF9DSEFOTkVMU19QRVJfRU5DOyBp KyspIHsKPiAtCQlpZiAoIWRwdV9ybV9nZXRfaHcoJmRwdV9rbXMtPnJtLCAmY3RsX2l0ZXIpKQo+ IC0JCQlicmVhazsKPiAtCQlod19jdGxbaV0gPSAoc3RydWN0IGRwdV9od19jdGwgKiljdGxfaXRl ci5odzsKPiAtCX0KPiArCWRwdV9jc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0ZShkcm1fZW5jLT5j cnRjLT5zdGF0ZSk7Cj4gIAo+ICAJZm9yIChpID0gMDsgaSA8IGRwdV9lbmMtPm51bV9waHlzX2Vu Y3M7IGkrKykgewo+ICAJCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpwaHlzID0gZHB1X2VuYy0+ cGh5c19lbmNzW2ldOwo+ICAJCWludCBjdGxfaW5kZXg7Cj4gIAo+ICAJCWlmIChwaHlzKSB7Cj4g LQkJCWlmICghZHB1X2VuYy0+aHdfcHBbaV0pIHsKPiArCQkJaWYgKCFkcHVfY3N0YXRlLT5taXhl cnNbaV0uaHdfcHApIHsKPiAgCQkJCURQVV9FUlJPUl9FTkMoZHB1X2VuYywgIm5vIHBwIGJsb2Nr IGFzc2lnbmVkIgo+ICAJCQkJCSAgICAgImF0IGlkeDogJWRcbiIsIGkpOwo+ICAJCQkJcmV0dXJu Owo+IEBAIC0xMDcxLDE0ICsxMDU3LDE2IEBAIHN0YXRpYyB2b2lkIGRwdV9lbmNvZGVyX3ZpcnRf bW9kZV9zZXQoc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jLAo+ICAKPiAgCQkJY3RsX2luZGV4 ID0gcGh5cy0+c3BsaXRfcm9sZSA9PSBFTkNfUk9MRV9TTEFWRSA/IDEgOiAwOwo+ICAKPiAtCQkJ aWYgKCFod19jdGxbY3RsX2luZGV4XSkgewo+ICsJCQlpZiAoIWRwdV9jc3RhdGUtPmh3X2N0bHNb Y3RsX2luZGV4XSkgewo+ICAJCQkJRFBVX0VSUk9SX0VOQyhkcHVfZW5jLCAibm8gY3RsIGJsb2Nr IGFzc2lnbmVkIgo+ICAJCQkJCSAgICAgImF0IGlkeDogJWRcbiIsIGN0bF9pbmRleCk7Cj4gIAkJ CQlyZXR1cm47Cj4gIAkJCX0KPiAgCj4gLQkJCXBoeXMtPmh3X3BwID0gZHB1X2VuYy0+aHdfcHBb aV07Cj4gLQkJCXBoeXMtPmh3X2N0bCA9IGh3X2N0bFtjdGxfaW5kZXhdOwo+ICsJCQlkcHVfZW5j LT5od19wcFtpXSA9IGRwdV9jc3RhdGUtPm1peGVyc1tpXS5od19wcDsKPiArCj4gKwkJCXBoeXMt Pmh3X3BwID0gZHB1X2NzdGF0ZS0+bWl4ZXJzW2ldLmh3X3BwOwo+ICsJCQlwaHlzLT5od19jdGwg PSBkcHVfY3N0YXRlLT5od19jdGxzW2N0bF9pbmRleF07Cj4gIAo+ICAJCQlwaHlzLT5jb25uZWN0 b3IgPSBjb25uLT5zdGF0ZS0+Y29ubmVjdG9yOwo+ICAJCQlpZiAocGh5cy0+b3BzLm1vZGVfc2V0 KQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rl cl9waHlzX3ZpZC5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXJf cGh5c192aWQuYwo+IGluZGV4IDg0ZGUzODUuLjQ1NjNmOGQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5c192aWQuYwo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3BoeXNfdmlkLmMKPiBAQCAt NDYxLDI4ICs0NjEsMjAgQEAgc3RhdGljIGludCBkcHVfZW5jb2Rlcl9waHlzX3ZpZF9jb250cm9s X3ZibGFua19pcnEoCj4gIAo+ICBzdGF0aWMgdm9pZCBkcHVfZW5jb2Rlcl9waHlzX3ZpZF9lbmFi bGUoc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXNfZW5jKQo+ICB7Cj4gLQlzdHJ1Y3QgbXNt X2RybV9wcml2YXRlICpwcml2Owo+ICAJc3RydWN0IGRwdV9lbmNvZGVyX3BoeXNfdmlkICp2aWRf ZW5jOwo+IC0Jc3RydWN0IGRwdV9ybV9od19pdGVyIGl0ZXI7Cj4gIAlzdHJ1Y3QgZHB1X2h3X2N0 bCAqY3RsOwo+ICsJc3RydWN0IGRwdV9jcnRjX3N0YXRlICpkcHVfY3N0YXRlOwo+ICsJaW50IGk7 Cj4gIAl1MzIgZmx1c2hfbWFzayA9IDA7Cj4gIAo+IC0JaWYgKCFwaHlzX2VuYyB8fCAhcGh5c19l bmMtPnBhcmVudCB8fCAhcGh5c19lbmMtPnBhcmVudC0+ZGV2IHx8Cj4gLQkJCSFwaHlzX2VuYy0+ cGFyZW50LT5kZXYtPmRldl9wcml2YXRlKSB7Cj4gLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGVuY29k ZXIvZGV2aWNlXG4iKTsKPiAtCQlyZXR1cm47Cj4gLQl9Cj4gLQlwcml2ID0gcGh5c19lbmMtPnBh cmVudC0+ZGV2LT5kZXZfcHJpdmF0ZTsKPiArCWRwdV9jc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0 ZShwaHlzX2VuYy0+cGFyZW50LT5jcnRjLT5zdGF0ZSk7Cj4gIAo+ICAJdmlkX2VuYyA9IHRvX2Rw dV9lbmNvZGVyX3BoeXNfdmlkKHBoeXNfZW5jKTsKPiAgCWN0bCA9IHBoeXNfZW5jLT5od19jdGw7 Cj4gIAo+IC0JZHB1X3JtX2luaXRfaHdfaXRlcigmaXRlciwgcGh5c19lbmMtPnBhcmVudC0+YmFz ZS5pZCwgRFBVX0hXX0JMS19JTlRGKTsKPiAtCXdoaWxlIChkcHVfcm1fZ2V0X2h3KCZwaHlzX2Vu Yy0+ZHB1X2ttcy0+cm0sICZpdGVyKSkgewo+IC0JCXN0cnVjdCBkcHVfaHdfaW50ZiAqaHdfaW50 ZiA9IChzdHJ1Y3QgZHB1X2h3X2ludGYgKilpdGVyLmh3Owo+IC0KPiAtCQlpZiAoaHdfaW50Zi0+ aWR4ID09IHBoeXNfZW5jLT5pbnRmX2lkeCkgewo+IC0JCQl2aWRfZW5jLT5od19pbnRmID0gaHdf aW50ZjsKPiArCWZvciAoaSA9IDA7IGkgPCBkcHVfY3N0YXRlLT5udW1faW50ZnM7IGkrKykgewo+ ICsJCWlmIChkcHVfY3N0YXRlLT5od19pbnRmc1tpXS0+aWR4ID09IHBoeXNfZW5jLT5pbnRmX2lk eCkgewo+ICsJCQl2aWRfZW5jLT5od19pbnRmID0gZHB1X2NzdGF0ZS0+aHdfaW50ZnNbaV07Cj4g IAkJCWJyZWFrOwo+ICAJCX0KPiAgCX0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X3JtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf cm0uYwo+IGluZGV4IDM3N2RlZjcuLjU3MDNiMTEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X3JtLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfcm0uYwo+IEBAIC0zODgsNiArMzg4LDcgQEAgc3RhdGljIGJvb2wgX2RwdV9y bV9jaGVja19sbV9hbmRfZ2V0X2Nvbm5lY3RlZF9ibGtzKAo+ICB9Cj4gIAo+ICBzdGF0aWMgaW50 IF9kcHVfcm1fcmVzZXJ2ZV9sbXMoc3RydWN0IGRwdV9ybSAqcm0sIHVpbnQzMl90IGVuY19pZCwK PiArCQkJICAgICAgIHN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqZHB1X2NzdGF0ZSwKPiAgCQkJICAg ICAgIHN0cnVjdCBkcHVfcm1fcmVxdWlyZW1lbnRzICpyZXFzKQo+ICAKPiAgewo+IEBAIC00NDks MTYgKzQ1MCwyMiBAQCBzdGF0aWMgaW50IF9kcHVfcm1fcmVzZXJ2ZV9sbXMoc3RydWN0IGRwdV9y bSAqcm0sIHVpbnQzMl90IGVuY19pZCwKPiAgCQlsbVtpXS0+ZW5jX2lkID0gZW5jX2lkOwo+ICAJ CXBwW2ldLT5lbmNfaWQgPSBlbmNfaWQ7Cj4gIAo+ICsJCWRwdV9jc3RhdGUtPm1peGVyc1tpXS5o d19sbSA9IHRvX2RwdV9od19taXhlcihsbVtpXS0+aHcpOwo+ICsJCWRwdV9jc3RhdGUtPm1peGVy c1tpXS5od19wcCA9IHRvX2RwdV9od19waW5ncG9uZyhwcFtpXS0+aHcpOwo+ICsKPiAgCQl0cmFj ZV9kcHVfcm1fcmVzZXJ2ZV9sbXMobG1baV0tPmlkLCBEUFVfSFdfQkxLX0xNLCBlbmNfaWQsCj4g IAkJCQkJIHBwW2ldLT5pZCk7Cj4gIAl9Cj4gIAo+ICsJZHB1X2NzdGF0ZS0+bnVtX21peGVycyA9 IGxtX2NvdW50Owo+ICsKPiAgCXJldHVybiByYzsKPiAgfQo+ICAKPiAgc3RhdGljIGludCBfZHB1 X3JtX3Jlc2VydmVfY3RscygKPiAgCQlzdHJ1Y3QgZHB1X3JtICpybSwKPiAgCQl1aW50MzJfdCBl bmNfaWQsCj4gKwkJc3RydWN0IGRwdV9jcnRjX3N0YXRlICpkcHVfY3N0YXRlLAo+ICAJCWNvbnN0 IHN0cnVjdCBtc21fZGlzcGxheV90b3BvbG9neSAqdG9wKQo+ICB7Cj4gIAlzdHJ1Y3QgZHB1X3Jt X2h3X2JsayAqY3Rsc1tNQVhfQkxPQ0tTXTsKPiBAQCAtNTAxLDIxICs1MDgsMjQgQEAgc3RhdGlj IGludCBfZHB1X3JtX3Jlc2VydmVfY3RscygKPiAgCj4gIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlf U0laRShjdGxzKSAmJiBpIDwgbnVtX2N0bHM7IGkrKykgewo+ICAJCWN0bHNbaV0tPmVuY19pZCA9 IGVuY19pZDsKPiArCQlkcHVfY3N0YXRlLT5od19jdGxzW2ldID0gdG9fZHB1X2h3X2N0bChjdGxz W2ldLT5odyk7Cj4gKwo+ICAJCXRyYWNlX2RwdV9ybV9yZXNlcnZlX2N0bHMoY3Rsc1tpXS0+aWQs IERQVV9IV19CTEtfQ1RMLAo+ICAJCQkJCSAgZW5jX2lkKTsKPiAgCX0KPiAgCj4gKwlkcHVfY3N0 YXRlLT5udW1fY3RscyA9IG51bV9jdGxzOwo+ICsKPiAgCXJldHVybiAwOwo+ICB9Cj4gIAo+IC1z dGF0aWMgaW50IF9kcHVfcm1fcmVzZXJ2ZV9pbnRmKAo+ICtzdGF0aWMgc3RydWN0IGRwdV9ybV9o d19ibGsgKl9kcHVfcm1fcmVzZXJ2ZV9pbnRmKAo+ICAJCXN0cnVjdCBkcHVfcm0gKnJtLAo+ICAJ CXVpbnQzMl90IGVuY19pZCwKPiAgCQl1aW50MzJfdCBpZCwKPiAgCQllbnVtIGRwdV9od19ibGtf dHlwZSB0eXBlKQo+ICB7Cj4gIAlzdHJ1Y3QgZHB1X3JtX2h3X2l0ZXIgaXRlcjsKPiAtCWludCBy ZXQgPSAwOwo+ICAKPiAgCS8qIEZpbmQgdGhlIGJsb2NrIGVudHJ5IGluIHRoZSBybSwgYW5kIG5v dGUgdGhlIHJlc2VydmF0aW9uICovCj4gIAlkcHVfcm1faW5pdF9od19pdGVyKCZpdGVyLCAwLCB0 eXBlKTsKPiBAQCAtNTI1LDcgKzUzNSw3IEBAIHN0YXRpYyBpbnQgX2RwdV9ybV9yZXNlcnZlX2lu dGYoCj4gIAo+ICAJCWlmIChSRVNFUlZFRF9CWV9PVEhFUihpdGVyLmJsaywgZW5jX2lkKSkgewo+ ICAJCQlEUFVfRVJST1IoInR5cGUgJWQgaWQgJWQgYWxyZWFkeSByZXNlcnZlZFxuIiwgdHlwZSwg aWQpOwo+IC0JCQlyZXR1cm4gLUVOQVZBSUw7Cj4gKwkJCXJldHVybiBOVUxMOwo+ICAJCX0KPiAg Cj4gIAkJaXRlci5ibGstPmVuY19pZCA9IGVuY19pZDsKPiBAQCAtNTM1LDU2ICs1NDUsNjMgQEAg c3RhdGljIGludCBfZHB1X3JtX3Jlc2VydmVfaW50ZigKPiAgCX0KPiAgCj4gIAkvKiBTaG91bGRu J3QgaGFwcGVuIHNpbmNlIGludGZzIGFyZSBmaXhlZCBhdCBwcm9iZSAqLwo+IC0JaWYgKCFpdGVy Lmh3KSB7Cj4gKwlpZiAoIWl0ZXIuYmxrKSB7Cj4gIAkJRFBVX0VSUk9SKCJjb3VsZG4ndCBmaW5k IHR5cGUgJWQgaWQgJWRcbiIsIHR5cGUsIGlkKTsKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiArCQly ZXR1cm4gTlVMTDsKPiAgCX0KPiAgCj4gLQlyZXR1cm4gcmV0Owo+ICsJcmV0dXJuIGl0ZXIuYmxr Owo+ICB9Cj4gIAo+ICBzdGF0aWMgaW50IF9kcHVfcm1fcmVzZXJ2ZV9pbnRmX3JlbGF0ZWRfaHco Cj4gIAkJc3RydWN0IGRwdV9ybSAqcm0sCj4gIAkJdWludDMyX3QgZW5jX2lkLAo+ICsJCXN0cnVj dCBkcHVfY3J0Y19zdGF0ZSAqZHB1X2NzdGF0ZSwKPiAgCQlzdHJ1Y3QgZHB1X2VuY29kZXJfaHdf cmVzb3VyY2VzICpod19yZXMpCj4gIHsKPiAtCWludCBpLCByZXQgPSAwOwo+IC0JdTMyIGlkOwo+ ICsJc3RydWN0IGRwdV9ybV9od19ibGsgKmJsazsKPiArCWludCBpLCBudW1faW50ZnMgPSAwOwo+ ICAKPiAgCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGh3X3Jlcy0+aW50ZnMpOyBpKyspIHsK PiAgCQlpZiAoaHdfcmVzLT5pbnRmc1tpXSA9PSBJTlRGX01PREVfTk9ORSkKPiAgCQkJY29udGlu dWU7Cj4gLQkJaWQgPSBpICsgSU5URl8wOwo+IC0JCXJldCA9IF9kcHVfcm1fcmVzZXJ2ZV9pbnRm KHJtLCBlbmNfaWQsIGlkLAo+ICsKPiArCQlibGsgPSBfZHB1X3JtX3Jlc2VydmVfaW50ZihybSwg ZW5jX2lkLCBpICsgSU5URl8wLAo+ICAJCQkJRFBVX0hXX0JMS19JTlRGKTsKPiAtCQlpZiAocmV0 KQo+IC0JCQlyZXR1cm4gcmV0Owo+ICsJCWlmICghYmxrKQo+ICsJCQlyZXR1cm4gLUVOQVZBSUw7 Cj4gKwo+ICsJCWRwdV9jc3RhdGUtPmh3X2ludGZzW251bV9pbnRmcysrXSA9IHRvX2RwdV9od19p bnRmKGJsay0+aHcpOwo+ICAJfQo+ICAKPiAtCXJldHVybiByZXQ7Cj4gKwlkcHVfY3N0YXRlLT5u dW1faW50ZnMgPSBudW1faW50ZnM7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gIHN0YXRp YyBpbnQgX2RwdV9ybV9tYWtlX3Jlc2VydmF0aW9uKAo+ICAJCXN0cnVjdCBkcHVfcm0gKnJtLAo+ ICAJCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jLAo+IC0JCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAq Y3J0Y19zdGF0ZSwKPiArCQlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmRwdV9jc3RhdGUsCj4gIAkJ c3RydWN0IGRwdV9ybV9yZXF1aXJlbWVudHMgKnJlcXMpCj4gIHsKPiAgCWludCByZXQ7Cj4gIAo+ IC0JcmV0ID0gX2RwdV9ybV9yZXNlcnZlX2xtcyhybSwgZW5jLT5iYXNlLmlkLCByZXFzKTsKPiAr CXJldCA9IF9kcHVfcm1fcmVzZXJ2ZV9sbXMocm0sIGVuYy0+YmFzZS5pZCwgZHB1X2NzdGF0ZSwg cmVxcyk7Cj4gIAlpZiAocmV0KSB7Cj4gIAkJRFBVX0VSUk9SKCJ1bmFibGUgdG8gZmluZCBhcHBy b3ByaWF0ZSBtaXhlcnNcbiIpOwo+ICAJCXJldHVybiByZXQ7Cj4gIAl9Cj4gIAo+IC0JcmV0ID0g X2RwdV9ybV9yZXNlcnZlX2N0bHMocm0sIGVuYy0+YmFzZS5pZCwgJnJlcXMtPnRvcG9sb2d5KTsK PiArCXJldCA9IF9kcHVfcm1fcmVzZXJ2ZV9jdGxzKHJtLCBlbmMtPmJhc2UuaWQsIGRwdV9jc3Rh dGUsCj4gKwkJCQkgICAmcmVxcy0+dG9wb2xvZ3kpOwo+ICAJaWYgKHJldCkgewo+ICAJCURQVV9F UlJPUigidW5hYmxlIHRvIGZpbmQgYXBwcm9wcmlhdGUgQ1RMXG4iKTsKPiAgCQlyZXR1cm4gcmV0 Owo+ICAJfQo+ICAKPiAtCXJldCA9IF9kcHVfcm1fcmVzZXJ2ZV9pbnRmX3JlbGF0ZWRfaHcocm0s IGVuYy0+YmFzZS5pZCwgJnJlcXMtPmh3X3Jlcyk7Cj4gKwlyZXQgPSBfZHB1X3JtX3Jlc2VydmVf aW50Zl9yZWxhdGVkX2h3KHJtLCBlbmMtPmJhc2UuaWQsIGRwdV9jc3RhdGUsCj4gKwkJCQkJICAg ICAgJnJlcXMtPmh3X3Jlcyk7Cj4gIAlpZiAocmV0KQo+ICAJCXJldHVybiByZXQ7Cj4gIAo+IEBA IC01OTQsNyArNjExLDYgQEAgc3RhdGljIGludCBfZHB1X3JtX21ha2VfcmVzZXJ2YXRpb24oCj4g IHN0YXRpYyBpbnQgX2RwdV9ybV9wb3B1bGF0ZV9yZXF1aXJlbWVudHMoCj4gIAkJc3RydWN0IGRw dV9ybSAqcm0sCj4gIAkJc3RydWN0IGRybV9lbmNvZGVyICplbmMsCj4gLQkJc3RydWN0IGRybV9j cnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ICAJCXN0cnVjdCBkcHVfcm1fcmVxdWlyZW1lbnRzICpy ZXFzLAo+ICAJCXN0cnVjdCBtc21fZGlzcGxheV90b3BvbG9neSByZXFfdG9wb2xvZ3kpCj4gIHsK PiBAQCAtNjQyLDYgKzY1OCw3IEBAIGludCBkcHVfcm1fcmVzZXJ2ZSgKPiAgCQlib29sIHRlc3Rf b25seSkKPiAgewo+ICAJc3RydWN0IGRwdV9ybV9yZXF1aXJlbWVudHMgcmVxczsKPiArCXN0cnVj dCBkcHVfY3J0Y19zdGF0ZSAqZHB1X2NzdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKGNydGNfc3Rh dGUpOwo+ICAJaW50IHJldDsKPiAgCj4gIAkvKiBDaGVjayBpZiB0aGlzIGlzIGp1c3QgYSBwYWdl LWZsaXAgKi8KPiBAQCAtNjUzLDE0ICs2NzAsMTMgQEAgaW50IGRwdV9ybV9yZXNlcnZlKAo+ICAK PiAgCW11dGV4X2xvY2soJnJtLT5ybV9sb2NrKTsKPiAgCj4gLQlyZXQgPSBfZHB1X3JtX3BvcHVs YXRlX3JlcXVpcmVtZW50cyhybSwgZW5jLCBjcnRjX3N0YXRlLCAmcmVxcywKPiAtCQkJCQkgICAg dG9wb2xvZ3kpOwo+ICsJcmV0ID0gX2RwdV9ybV9wb3B1bGF0ZV9yZXF1aXJlbWVudHMocm0sIGVu YywgJnJlcXMsIHRvcG9sb2d5KTsKPiAgCWlmIChyZXQpIHsKPiAgCQlEUFVfRVJST1IoImZhaWxl ZCB0byBwb3B1bGF0ZSBodyByZXF1aXJlbWVudHNcbiIpOwo+ICAJCWdvdG8gZW5kOwo+ICAJfQo+ ICAKPiAtCXJldCA9IF9kcHVfcm1fbWFrZV9yZXNlcnZhdGlvbihybSwgZW5jLCBjcnRjX3N0YXRl LCAmcmVxcyk7Cj4gKwlyZXQgPSBfZHB1X3JtX21ha2VfcmVzZXJ2YXRpb24ocm0sIGVuYywgZHB1 X2NzdGF0ZSwgJnJlcXMpOwo+ICAJaWYgKHJldCkgewo+ICAJCURQVV9FUlJPUigiZmFpbGVkIHRv IHJlc2VydmUgaHcgcmVzb3VyY2VzOiAlZFxuIiwgcmV0KTsKPiAgCQlfZHB1X3JtX3JlbGVhc2Vf cmVzZXJ2YXRpb24ocm0sIGVuYy0+YmFzZS5pZCk7Cj4gLS0gCj4gVGhlIFF1YWxjb21tIElubm92 YXRpb24gQ2VudGVyLCBJbmMuIGlzIGEgbWVtYmVyIG9mIHRoZSBDb2RlIEF1cm9yYSBGb3J1bSwK PiBhIExpbnV4IEZvdW5kYXRpb24gQ29sbGFib3JhdGl2ZSBQcm9qZWN0Cj4gCgotLSAKU2VhbiBQ YXVsLCBTb2Z0d2FyZSBFbmdpbmVlciwgR29vZ2xlIC8gQ2hyb21pdW0gT1MKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRnJlZWRyZW5vIG1haWxpbmcgbGlz dApGcmVlZHJlbm9AbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZnJlZWRyZW5vCg==