From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH] igt/gem_request_retire: Provoke context destruction with active VMAs Date: Thu, 19 Nov 2015 17:24:03 +0000 Message-ID: <564E05B3.4020009@linux.intel.com> References: <1447945565-15586-1-git-send-email-tvrtko.ursulin@linux.intel.com> <20151119165802.GN1043@nuc-i3427.alporthouse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTP id EA668721B2 for ; Thu, 19 Nov 2015 09:24:17 -0800 (PST) In-Reply-To: <20151119165802.GN1043@nuc-i3427.alporthouse.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , Intel-gfx@lists.freedesktop.org, Tvrtko Ursulin , Daniel Vetter List-Id: intel-gfx@lists.freedesktop.org CkhpLAoKT24gMTkvMTEvMTUgMTY6NTgsIENocmlzIFdpbHNvbiB3cm90ZToKPiBPbiBUaHUsIE5v diAxOSwgMjAxNSBhdCAwMzowNjowNVBNICswMDAwLCBUdnJ0a28gVXJzdWxpbiB3cm90ZToKPj4g RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KPj4KPj4gVGVz dCBkZXNpZ25lZCB0byB0cmlnZ2VyIHRoZQo+PiBXQVJOX09OKCFsaXN0X2VtcHR5KCZwcGd0dC0+ YmFzZS5hY3RpdmVfbGlzdCkpCj4+IGluIGk5MTVfZ2VtX2NvbnRleHRfY2xlYW4uCj4+Cj4+IFNp Z25lZC1vZmYtYnk6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+Cj4+ IENjOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPj4gQ2M6IERhbmll bCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAZmZ3bGwuY2g+Cj4KPiBXb3VsZG4ndCB0aGlzIGJlIGEg YmV0dGVyIGZpdCBpbiBnZW1fY3R4X3NvbWV0aGluZ29yb3RoZXIKPgo+IGdlbV9jdHgvY2xvc2Ut YWN0aXZlCgpDYW4gbW92ZSBpdCwgZG9uJ3QgcmVhbGx5IG1pbmQgZWl0aGVyIHdheS4KCj4+IC0t LQo+PiBTb21lIHBvdGVudGlhbGx5IGhhaXJ5IGJhdGNoIGJ1ZmZlciBidWlsZGluZyBjb2RlIHNp bmNlIEkgZG9uJ3QgaGF2ZQo+PiBhIGxvdCBvZiBleHBlcmllbmNlIGluIHRoYXQgYXJlYS4gOikK Pj4gLS0tCj4+ICAgdGVzdHMvLmdpdGlnbm9yZSAgICAgICAgICAgfCAgIDEgKwo+PiAgIHRlc3Rz L01ha2VmaWxlLnNvdXJjZXMgICAgIHwgICAxICsKPj4gICB0ZXN0cy9nZW1fcmVxdWVzdF9yZXRp cmUuYyB8IDI3OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK Pj4gICAzIGZpbGVzIGNoYW5nZWQsIDI4MSBpbnNlcnRpb25zKCspCj4+ICAgY3JlYXRlIG1vZGUg MTAwNjQ0IHRlc3RzL2dlbV9yZXF1ZXN0X3JldGlyZS5jCj4+Cj4+IGRpZmYgLS1naXQgYS90ZXN0 cy8uZ2l0aWdub3JlIGIvdGVzdHMvLmdpdGlnbm9yZQo+PiBpbmRleCA4MGFmOWE3MThmMDYuLjg1 OTM2ZWE0NWM5ZiAxMDA2NDQKPj4gLS0tIGEvdGVzdHMvLmdpdGlnbm9yZQo+PiArKysgYi90ZXN0 cy8uZ2l0aWdub3JlCj4+IEBAIC05MSw2ICs5MSw3IEBAIGdlbV9yZW5kZXJfY29weQo+PiAgIGdl bV9yZW5kZXJfY29weV9yZWR1eAo+PiAgIGdlbV9yZW5kZXJfbGluZWFyX2JsaXRzCj4+ICAgZ2Vt X3JlbmRlcl90aWxlZF9ibGl0cwo+PiArZ2VtX3JlcXVlc3RfcmV0aXJlCj4+ICAgZ2VtX3Jlc2V0 X3N0YXRzCj4+ICAgZ2VtX3Jpbmdfc3luY19jb3B5Cj4+ICAgZ2VtX3Jpbmdfc3luY19sb29wCj4+ IGRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUuc291 cmNlcwo+PiBpbmRleCA4ZmIyZGU4YjQ2NjUuLmZmMTc4ZjdhMmRmNCAxMDA2NDQKPj4gLS0tIGEv dGVzdHMvTWFrZWZpbGUuc291cmNlcwo+PiArKysgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4+ IEBAIC01Myw2ICs1Myw3IEBAIFRFU1RTX3Byb2dzX00gPSBcCj4+ICAgCWdlbV9yZWxvY19vdmVy ZmxvdyBcCj4+ICAgCWdlbV9yZWxvY192c19ncHUgXAo+PiAgIAlnZW1fcmVuZGVyX2NvcHlfcmVk dXggXAo+PiArCWdlbV9yZXF1ZXN0X3JldGlyZSBcCj4+ICAgCWdlbV9yZXNldF9zdGF0cyBcCj4+ ICAgCWdlbV9yaW5nZmlsbCBcCj4+ICAgCWdlbV9zZXRfdGlsaW5nX3ZzX2JsdCBcCj4+IGRpZmYg LS1naXQgYS90ZXN0cy9nZW1fcmVxdWVzdF9yZXRpcmUuYyBiL3Rlc3RzL2dlbV9yZXF1ZXN0X3Jl dGlyZS5jCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uNzEw YTk1ZjdiNmVkCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvdGVzdHMvZ2VtX3JlcXVlc3RfcmV0 aXJlLmMKPj4gQEAgLTAsMCArMSwyNzkgQEAKPj4gKy8qCj4+ICsgKiBDb3B5cmlnaHQgwqkgMjAx NSBJbnRlbCBDb3Jwb3JhdGlvbgo+PiArICoKPj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdy YW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4+ICsgKiBj b3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAo dGhlICJTb2Z0d2FyZSIpLAo+PiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCBy ZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+PiArICogdGhlIHJpZ2h0 cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1Ymxp Y2Vuc2UsCj4+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8g cGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0 byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4+ICsgKgo+PiAr ICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ug KGluY2x1ZGluZyB0aGUgbmV4dAo+PiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBp biBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+PiArICogU29mdHdh cmUuCj4+ICsgKgo+PiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPj4gKyAqIElNUExJRUQsIElOQ0xV RElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ LAo+PiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdF TUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQg SE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+PiArICog TElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhF UldJU0UsIEFSSVNJTkcKPj4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEgg VEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKPj4gKyAqIElOIFRIRSBT T0ZUV0FSRS4KPj4gKyAqCj4+ICsgKiBBdXRob3JzOgo+PiArICogICAgVHZydGtvIFVyc3VsaW4g PHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KPj4gKyAqCj4+ICsgKi8KPj4gKwo+PiArLyoqIEBm aWxlIGdlbV9yZXF1ZXN0X3JldGlyZQo+PiArICoKPj4gKyAqIENvbGxlY3Rpb24gb2YgdGVzdHMg dGFyZ2V0aW5nIHJlcXVlc3QgcmV0aXJlbWVudCBjb2RlIHBhdGhzLgo+PiArICovCj4+ICsKPj4g KyNpbmNsdWRlICJpZ3QuaCIKPj4gKyNpbmNsdWRlIDxzdGRsaWIuaD4KPj4gKyNpbmNsdWRlIDxz dGRpby5oPgo+PiArI2luY2x1ZGUgPHN0cmluZy5oPgo+PiArI2luY2x1ZGUgPGZjbnRsLmg+Cj4+ ICsjaW5jbHVkZSA8aW50dHlwZXMuaD4KPj4gKyNpbmNsdWRlIDxlcnJuby5oPgo+PiArI2luY2x1 ZGUgPHN5cy9zdGF0Lmg+Cj4+ICsjaW5jbHVkZSA8c3lzL3RpbWUuaD4KPj4gKyNpbmNsdWRlIDxz eXMvbW1hbi5oPgo+PiArI2luY2x1ZGUgPHNpZ25hbC5oPgo+PiArI2luY2x1ZGUgPHB0aHJlYWQu aD4KPj4gKyNpbmNsdWRlIDx0aW1lLmg+Cj4+ICsKPj4gKyNpbmNsdWRlICJkcm0uaCIKPj4gKyNp bmNsdWRlICJpOTE1X2RybS5oIgo+PiArCj4+ICsjaW5jbHVkZSAiaW50ZWxfYnVmbWdyLmgiCj4+ ICsKPj4gKyNkZWZpbmUgV0lEVEggNDA5Ngo+PiArI2RlZmluZSBIRUlHSFQgNDA5Ngo+PiArI2Rl ZmluZSBCT19TSVpFIChXSURUSCAqIEhFSUdIVCAqIHNpemVvZih1aW50MzJfdCkpCj4+ICsKPj4g K3N0YXRpYyB1aW50MzJfdAo+PiArYmxpdChpbnQgZmQsIHVpbnQzMl90IGRzdCwgdWludDMyX3Qg c3JjLCB1aW50MzJfdCBjdHhfaWQpCj4+ICt7Cj4+ICsJY29uc3QgdW5zaWduZWQgaW50IGNvcGll cyA9IDEwMDA7Cj4+ICsJdWludDMyX3QgYmF0Y2hbMTIgKiBjb3BpZXMgKyAyXTsKPj4gKwlzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgcmVsb2NbMiAqIGNvcGllc107Cj4+ICsJ c3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqWzNdOwo+PiArCXN0cnVjdCBkcm1f aTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlYzsKPj4gKwl1aW50MzJfdCBoYW5kbGU7Cj4+ICsJaW50 IHJldDsKPj4gKwl1bnNpZ25lZCBpbnQgaSA9IDAsIGo7Cj4+ICsJdW5zaWduZWQgaW50IGJsaXRf bGVuID0gMDsKPj4gKwo+PiArCWZvciAoaiA9IDA7IGogPCBjb3BpZXM7IGorKykgewo+PiArCQli YXRjaFtpKytdID0gWFlfU1JDX0NPUFlfQkxUX0NNRCB8Cj4+ICsJCQlYWV9TUkNfQ09QWV9CTFRf V1JJVEVfQUxQSEEgfAo+PiArCQkJWFlfU1JDX0NPUFlfQkxUX1dSSVRFX1JHQjsKPj4gKwkJaWYg KGludGVsX2dlbihpbnRlbF9nZXRfZHJtX2RldmlkKGZkKSkgPj0gOCkKPj4gKwkJCWJhdGNoW2kg LSAxXSB8PSA4Owo+PiArCQllbHNlCj4+ICsJCQliYXRjaFtpIC0gMV0gfD0gNjsKPj4gKwo+PiAr CQliYXRjaFtpKytdID0gKDMgPDwgMjQpIHwgLyogMzIgYml0cyAqLwo+PiArCQkJKDB4Y2MgPDwg MTYpIHwgLyogY29weSBST1AgKi8KPj4gKwkJCVdJRFRIKjQ7Cj4+ICsJCWJhdGNoW2krK10gPSAw OyAvKiBkc3QgeDEseTEgKi8KPj4gKwkJYmF0Y2hbaSsrXSA9IChIRUlHSFQgPDwgMTYpIHwgV0lE VEg7IC8qIGRzdCB4Mix5MiAqLwo+PiArCQliYXRjaFtpKytdID0gMDsgLyogZHN0IHJlbG9jICov Cj4+ICsJCWlmIChpbnRlbF9nZW4oaW50ZWxfZ2V0X2RybV9kZXZpZChmZCkpID49IDgpCj4+ICsJ CQliYXRjaFtpKytdID0gMDsKPj4gKwkJYmF0Y2hbaSsrXSA9IDA7IC8qIHNyYyB4MSx5MSAqLwo+ PiArCQliYXRjaFtpKytdID0gV0lEVEgqNDsKPj4gKwkJYmF0Y2hbaSsrXSA9IDA7IC8qIHNyYyBy ZWxvYyAqLwo+PiArCQlpZiAoaW50ZWxfZ2VuKGludGVsX2dldF9kcm1fZGV2aWQoZmQpKSA+PSA4 KQo+PiArCQkJYmF0Y2hbaSsrXSA9IDA7Cj4+ICsKPj4gKwkJd2hpbGUgKGkgJSA0KQo+PiArCQkJ YmF0Y2hbaSsrXSA9IE1JX05PT1A7CgpJcyB0aGlzIG9rPyBJIGFycml2ZWQgYXQgaXQgYnkgZXhw ZXJpbWVudGF0aW9uLCBrZXJuZWwgd2FzIGNvbXBsYWluaW5nIAp0aGF0IHJlbG9jYXRpb25zIGFy ZSBub3QgNC1ieXRlIGFsaWduZWQgd2l0aG91dCBpdC4KCkFsdGhvdWdoIG5vdyBJJ20gdGhpbmtp bmcgb2Zmc2V0cyBhcmUgaW4gYnl0ZXMgYW5kIG15IGNhbGN1bGF0aW9uIGJlbG93IAppcyBjb21w bGV0ZWx5IHdyb25nLi4gYnV0IGl0IGRpZCBub3QgY3Jhc2ggdGhlIEdQVS4gSG0uCgo+PiArCj4+ ICsJCWlmIChibGl0X2xlbiA9PSAwKQo+PiArCQkJYmxpdF9sZW4gPSBpOwo+PiArCX0KPj4gKwo+ PiArCWJhdGNoW2krK10gPSBNSV9CQVRDSF9CVUZGRVJfRU5EOwo+PiArCWJhdGNoW2krK10gPSBN SV9OT09QOwo+PiArCj4+ICsJaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgc2l6ZW9mKGJhdGNoKSk7 Cj4+ICsJZ2VtX3dyaXRlKGZkLCBoYW5kbGUsIDAsIGJhdGNoLCBzaXplb2YoYmF0Y2gpKTsKPj4g Kwo+PiArCWZvciAoaiA9IDA7IGogPCBjb3BpZXM7IGorKykgewo+PiArCQl1bnNpZ25lZCBpbnQg cjAgPSBqICogMjsKPj4gKwkJdW5zaWduZWQgaW50IHIxID0gcjAgKyAxOwo+PiArCj4+ICsJCXJl bG9jW3IwXS50YXJnZXRfaGFuZGxlID0gZHN0Owo+PiArCQlyZWxvY1tyMF0uZGVsdGEgPSAwOwo+ PiArCQlyZWxvY1tyMF0ub2Zmc2V0ID0gaiAqIGJsaXRfbGVuICsgNCAqIHNpemVvZih1aW50MzJf dCk7Cj4+ICsJCXJlbG9jW3IwXS5wcmVzdW1lZF9vZmZzZXQgPSAwOwo+PiArCQlyZWxvY1tyMF0u cmVhZF9kb21haW5zID0gSTkxNV9HRU1fRE9NQUlOX1JFTkRFUjsKPj4gKwkJcmVsb2NbcjBdLndy aXRlX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9SRU5ERVI7Cj4+ICsKPj4gKwkJcmVsb2NbcjFd LnRhcmdldF9oYW5kbGUgPSBzcmM7Cj4+ICsJCXJlbG9jW3IxXS5kZWx0YSA9IDA7Cj4+ICsJCXJl bG9jW3IxXS5vZmZzZXQgPSBqICogYmxpdF9sZW4gKyA3ICogc2l6ZW9mKHVpbnQzMl90KTsKPj4g KwkJaWYgKGludGVsX2dlbihpbnRlbF9nZXRfZHJtX2RldmlkKGZkKSkgPj0gOCkKPj4gKwkJCXJl bG9jW3IxXS5vZmZzZXQgKz0gc2l6ZW9mKHVpbnQzMl90KTsKPj4gKwkJcmVsb2NbcjFdLnByZXN1 bWVkX29mZnNldCA9IDA7Cj4+ICsJCXJlbG9jW3IxXS5yZWFkX2RvbWFpbnMgPSBJOTE1X0dFTV9E T01BSU5fUkVOREVSOwo+PiArCQlyZWxvY1tyMV0ud3JpdGVfZG9tYWluID0gMDsKPgo+IEp1c3Qg ZmlsbCB0aGUgcmVsb2NhdGlvbiBhcnJheSBhcyB5b3UgZ2VuZXJhdGUgdGhlIGJhdGNoLgoKVG8g c2F2ZSBvbmUgbG9vcD8gOikKCj4+ICsJfQo+PiArCj4+ICsJbWVtc2V0KG9iaiwgMCwgc2l6ZW9m KG9iaikpOwo+PiArCWV4ZWMuYnVmZmVyX2NvdW50ID0gMDsKPj4gKwlvYmpbZXhlYy5idWZmZXJf Y291bnQrK10uaGFuZGxlID0gZHN0Owo+PiArCWlmIChzcmMgIT0gZHN0KQo+PiArCQlvYmpbZXhl Yy5idWZmZXJfY291bnQrK10uaGFuZGxlID0gc3JjOwo+PiArCW9ialtleGVjLmJ1ZmZlcl9jb3Vu dF0uaGFuZGxlID0gaGFuZGxlOwo+PiArCW9ialtleGVjLmJ1ZmZlcl9jb3VudF0ucmVsb2NhdGlv bl9jb3VudCA9IDIgKiBjb3BpZXM7Cj4+ICsJb2JqW2V4ZWMuYnVmZmVyX2NvdW50XS5yZWxvY3Nf cHRyID0gKHVpbnRwdHJfdClyZWxvYzsKPj4gKwlleGVjLmJ1ZmZlcl9jb3VudCsrOwo+PiArCWV4 ZWMuYnVmZmVyc19wdHIgPSAodWludHB0cl90KW9iajsKPj4gKwo+Cj4gbWVtc2V0KCZleGVjLCAw LCBzaXplb2YoZXhlYykpOwo+IGluc3RlYWQgb2Y6Cj4+ICsJZXhlYy5iYXRjaF9zdGFydF9vZmZz ZXQgPSAwOwo+PiArCWV4ZWMuYmF0Y2hfbGVuID0gaSAqIHNpemVvZih1aW50MzJfdCk7Cj4+ICsJ ZXhlYy5EUjEgPSBleGVjLkRSNCA9IDA7Cj4+ICsJZXhlYy5udW1fY2xpcHJlY3RzID0gMDsKPj4g KwlleGVjLmNsaXByZWN0c19wdHIgPSAwOwo+PiArCWV4ZWMuZmxhZ3MgPSBJOTE1X0VYRUNfQkxU Owo+PiArCWk5MTVfZXhlY2J1ZmZlcjJfc2V0X2NvbnRleHRfaWQoZXhlYywgY3R4X2lkKTsKPj4g KwlleGVjLnJzdmQyID0gMDsKPj4gKwo+PiArCXJldCA9IGRybUlvY3RsKGZkLCBEUk1fSU9DVExf STkxNV9HRU1fRVhFQ0JVRkZFUjIsICZleGVjKTsKPj4gKwlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7 Cj4gZ2VtX2V4ZWNidWYoZmQsICZleGVjKTsKCk9rYXksIGl0IHdhcyBjb3B5JnBhc3RlLiA6KQoK Pj4gKwo+PiArCXJldHVybiBoYW5kbGU7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB1aW50MzJfdAo+ PiArc3RvcmUoaW50IGZkLCB1aW50MzJfdCBkc3QsIHVpbnQzMl90IHNyYywgdWludDMyX3QgY3R4 X2lkKQo+PiArewo+PiArCXVpbnQzMl90IGJhdGNoWzZdOwo+PiArCXN0cnVjdCBkcm1faTkxNV9n ZW1fcmVsb2NhdGlvbl9lbnRyeSByZWxvY1syXTsKPj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4 ZWNfb2JqZWN0MiBvYmpbM107Cj4+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBl eGVjOwo+PiArCXVpbnQzMl90IGhhbmRsZTsKPj4gKwlpbnQgcmV0LCBpID0gMDsKPj4gKwo+PiAr CWJhdGNoW2krK10gPSBNSV9TVE9SRV9EV09SRF9JTU07Cj4+ICsJYmF0Y2hbaSsrXSA9IDA7IC8q IGFkZHJoaWdoICovCj4+ICsJYmF0Y2hbaSsrXSA9IDA7IC8qIGFkZHJsb3cgKi8KPj4gKwliYXRj aFtpKytdID0gMDsgLyogdmFsICovCj4+ICsJYmF0Y2hbaSsrXSA9IE1JX0JBVENIX0JVRkZFUl9F TkQ7Cj4+ICsJYmF0Y2hbaSsrXSA9IE1JX0JBVENIX0JVRkZFUl9FTkQ7Cj4+ICsKPj4gKwloYW5k bGUgPSBnZW1fY3JlYXRlKGZkLCA0MDk2KTsKPj4gKwlnZW1fd3JpdGUoZmQsIGhhbmRsZSwgMCwg YmF0Y2gsIHNpemVvZihiYXRjaCkpOwo+PiArCj4+ICsJcmVsb2NbMF0udGFyZ2V0X2hhbmRsZSA9 IGRzdDsKPj4gKwlyZWxvY1swXS5kZWx0YSA9IDA7Cj4+ICsJcmVsb2NbMF0ub2Zmc2V0ID0gMiAq IHNpemVvZihiYXRjaFswXSk7Cj4+ICsJcmVsb2NbMF0ucHJlc3VtZWRfb2Zmc2V0ID0gMDsKPj4g KwlyZWxvY1swXS5yZWFkX2RvbWFpbnMgPSBJOTE1X0dFTV9ET01BSU5fUkVOREVSOwo+PiArCXJl bG9jWzBdLndyaXRlX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9SRU5ERVI7Cj4+ICsKPj4gKwly ZWxvY1sxXS50YXJnZXRfaGFuZGxlID0gc3JjOwo+PiArCXJlbG9jWzFdLmRlbHRhID0gMDsKPj4g KwlyZWxvY1sxXS5vZmZzZXQgPSAzICogc2l6ZW9mKGJhdGNoWzBdKTsKPj4gKwlyZWxvY1sxXS5w cmVzdW1lZF9vZmZzZXQgPSAwOwo+PiArCXJlbG9jWzFdLnJlYWRfZG9tYWlucyA9IEk5MTVfR0VN X0RPTUFJTl9SRU5ERVI7Cj4+ICsJcmVsb2NbMV0ud3JpdGVfZG9tYWluID0gMDsKPj4gKwo+PiAr CW1lbXNldChvYmosIDAsIHNpemVvZihvYmopKTsKPj4gKwlleGVjLmJ1ZmZlcl9jb3VudCA9IDA7 Cj4+ICsJb2JqW2V4ZWMuYnVmZmVyX2NvdW50KytdLmhhbmRsZSA9IGRzdDsKPj4gKwlpZiAoc3Jj ICE9IGRzdCkKPj4gKwkJb2JqW2V4ZWMuYnVmZmVyX2NvdW50KytdLmhhbmRsZSA9IHNyYzsKPj4g KwlvYmpbZXhlYy5idWZmZXJfY291bnRdLmhhbmRsZSA9IGhhbmRsZTsKPj4gKwlvYmpbZXhlYy5i dWZmZXJfY291bnRdLnJlbG9jYXRpb25fY291bnQgPSAyOwo+PiArCW9ialtleGVjLmJ1ZmZlcl9j b3VudF0ucmVsb2NzX3B0ciA9ICh1aW50cHRyX3QpcmVsb2M7Cj4+ICsJZXhlYy5idWZmZXJfY291 bnQrKzsKPj4gKwlleGVjLmJ1ZmZlcnNfcHRyID0gKHVpbnRwdHJfdClvYmo7Cj4+ICsKPj4gKwll eGVjLmJhdGNoX3N0YXJ0X29mZnNldCA9IDA7Cj4+ICsJZXhlYy5iYXRjaF9sZW4gPSBpICogc2l6 ZW9mKHVpbnQzMl90KTsKPj4gKwlleGVjLkRSMSA9IGV4ZWMuRFI0ID0gMDsKPj4gKwlleGVjLm51 bV9jbGlwcmVjdHMgPSAwOwo+PiArCWV4ZWMuY2xpcHJlY3RzX3B0ciA9IDA7Cj4+ICsJZXhlYy5m bGFncyA9IEk5MTVfRVhFQ19SRU5ERVI7Cj4+ICsJaTkxNV9leGVjYnVmZmVyMl9zZXRfY29udGV4 dF9pZChleGVjLCBjdHhfaWQpOwo+PiArCWV4ZWMucnN2ZDIgPSAwOwo+PiArCj4+ICsJcmV0ID0g ZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9JOTE1X0dFTV9FWEVDQlVGRkVSMiwgJmV4ZWMpOwo+PiAr CWlndF9hc3NlcnRfZXEocmV0LCAwKTsKPgo+IEZvciB0aGUgcHVycG9zZXMgb2YgeW91ciB0ZXN0 LCB5b3UgZG9uJ3QgZXZlbiBuZWVkIHRvIGV4ZWN1dGUgYW55dGhpbmcsCj4ganVzdCBhc3NvY2lh dGUgdGhlIGRzdCBoYW5kbGUgd2l0aCBhbiBlbXB0eSBiYXRjaCBvbiB0aGUgcmVuZGVyIHJpbmcu Cj4gWW91IGRvbid0IGV2ZW4gbmVlZCBhIGZha2UgcmVsb2NhdGlvbiBzaW5jZSB0aGUgdGVzdCBh bHJlYWR5IHJlcXVpcmVzIGEKPiBmYWlybHkgcmVjZW50IGtlcm5lbC4KCkkgdGhvdWdodCBzbyBi dXQgY291bGRuJ3QgZ2V0IGl0IHRvIHdvcmsuIEtlcHQgZ2V0dGluZyBFSU5WQUwgd2hpY2ggaXMg YSAKcGlnIHRvIGZpbmQgdGhlIHJlYWwgcmVhc29uIHdpdGggZXhlY2J1Zi4gSSdsbCB0cnkgc29t ZSBtb3JlLgoKPgo+PiArCj4+ICsJcmV0dXJuIGhhbmRsZTsKPj4gK30KPj4gKwo+PiArLyoKPj4g KyAqIEEgc2luZ2xlIGJvIGlzIG9wZXJhdGVkIGZyb20gYmF0Y2hidWZmZXJzIHN1Ym1pdHRlZCBm cm9tIHR3byBjb250ZXh0cyBhbmQgb24KPj4gKyAqIGRpZmZlcmVudCByaW5ncy4KPj4gKyAqIE9u ZSBleGVjYnVmIGZpbmlzaGVzIHdheSBhaGVhZCBvZiB0aGUgb3RoZXIgYXQgd2hpY2ggcG9pbnQg dGhlIHJlc3BlY3RpdmUKPj4gKyAqIGNvbnRleHQgaXMgZGVzdHJveWVkLgo+PiArICovCj4+ICtz dGF0aWMgdm9pZAo+PiArdGVzdF9yZXRpcmVfdm1hX25vdF9pbmFjdGl2ZShpbnQgZmQpCj4+ICt7 Cj4+ICsJdWludDMyX3QgY3R4X2lkOwo+PiArCXVpbnQzMl90IHNyYywgZHN0LCBkc3QyOwo+PiAr CXVpbnQzMl90IGJsaXRfYmIsIHN0b3JlX2JiOwo+PiArCj4+ICsJaWd0X3JlcXVpcmUoSEFTX0JM VF9SSU5HKGludGVsX2dldF9kcm1fZGV2aWQoZmQpKSk7Cj4+ICsKPj4gKwljdHhfaWQgPSBnZW1f Y29udGV4dF9jcmVhdGUoZmQpOwo+PiArCWlndF9hc3NlcnQoY3R4X2lkKTsKPj4gKwo+PiArCS8q IENyZWF0ZSBzb21lIGJvcyBiYXRjaCBidWZmZXJzIHdpbGwgb3BlcmF0ZSBvbi4gKi8KPj4gKwlz cmMgPSBnZW1fY3JlYXRlKGZkLCBCT19TSVpFKTsKPj4gKwlpZ3RfYXNzZXJ0KHNyYyk7Cj4+ICsJ ZHN0ID0gZ2VtX2NyZWF0ZShmZCwgQk9fU0laRSk7Cj4+ICsJaWd0X2Fzc2VydChkc3QpOwo+PiAr CWRzdDIgPSBnZW1fY3JlYXRlKGZkLCA0MDk2KTsKPj4gKwlpZ3RfYXNzZXJ0KGRzdDIpOwo+PiAr Cj4+ICsJLyogU3VibWl0IGEgbG9uZyBydW5uaW5nIGJhdGNoLiAqLwo+PiArCWJsaXRfYmIgPSBi bGl0KGZkLCBkc3QsIHNyYywgMCk7Cj4+ICsJLyogU3VibWl0IGEgcXVpY2sgYmF0Y2ggcmVmZXJl bmNpbmcgdGhlIHNhbWUgb2JqZWN0LiAqLwo+PiArCXN0b3JlX2JiID0gc3RvcmUoZmQsIGRzdDIs IHNyYywgY3R4X2lkKTsKPj4gKwkvKiBXYWl0IGZvciB0aGUgcXVpY2sgYmF0Y2ggdG8gY29tcGxl dGUuICovCj4+ICsJZ2VtX3N5bmMoZmQsIHN0b3JlX2JiKTsKPj4gKwlnZW1fc3luYyhmZCwgZHN0 Mik7Cj4+ICsJZ2VtX2Nsb3NlKGZkLCBzdG9yZV9iYik7Cj4KPj4gKwkvKiBEbyBpdCBhZ2FpbiB0 byBlbnN1cmUgaW4ga2VybmVsIHJldGlyZW1lbnQgaXMgdHJpZ2dlcmVkLiAqLwo+IENpcmN1bXN0 YW50aWFsIQoKWWVzIEkgZG9uJ3QgdGhpbmsgaXQgaXMgYWN0dWFsbHkgcmVxdWlyZWQgYnV0IGEg bGVmdG92ZXIgZnJvbSBkZXZlbG9wbWVudC4KCktleSBpcyB0aGF0IHJldGlyZSB3b3JrIGhhbmRs ZXIgcnVucyBiZWZvcmUgdGhlIGNvbnRleHQgZGVzdHJ1Y3Rpb24sIApzaW5jZSBleGVjbGlzdCBy ZXRpcmUgaXMgb25seSBydW5zIGZyb20gdGhlcmUsIGFuZCBpdCBpcyBrZWVwaW5nIApyZWZlcmVu Y2VzIHRvIHJlcXVlc3RzIHdoaWNoIGhhdmUgYmVlbiBwcm9jZXNzZWQgbG9uZyBhZ28uCgpTbyBJ IHdhcyBhbHNvIHRoaW5raW5nIC0gc2hvdWxkIHdlIGNhbGwgdGhlIGV4ZWNsaXN0IHJldGlyZSBy ZXF1ZXN0cyAKbW9yZSBvZnRlbiBpbiBnZW5lcmFsPyBFeGVjYnVmIHBhdGggY2FsbHMgdGhlIG5v cm1hbCByaW5nIHJldGlyZW1lbnQgc28gCm1heWJlIGFkZCBpdCB0aGVyZT8KCj4+ICsJc3RvcmVf YmIgPSBzdG9yZShmZCwgZHN0Miwgc3JjLCBjdHhfaWQpOwo+PiArCWdlbV9zeW5jKGZkLCBzdG9y ZV9iYik7Cj4+ICsJZ2VtX3N5bmMoZmQsIGRzdDIpOwo+PiArCWdlbV9jbG9zZShmZCwgc3RvcmVf YmIpOwo+PiArCWdlbV9jbG9zZShmZCwgZHN0Mik7Cj4+ICsKPj4gKwkvKiBOb3cgZGVzdHJveSB0 aGUgY29udGV4dCBpbiB3aGljaCB0aGUgcXVpY2sgYmF0Y2ggd2FzIHN1Ym1pdHRlZC4gKi8KPj4g KwlnZW1fY29udGV4dF9kZXN0cm95KGZkLCBjdHhfaWQpOwo+Cj4gRmVlbHMgdmVyeSBmcmFnaWxl LiBJc24ndCB0aGUgYnVnIHNvbWV0aGluZyBsaWtlCgpXZWxsIG15IGJsaXQgcnVucyBmb3IgNi03 IHNlY29uZHMgb24gYSBmYXN0IFNLTCBzbyBvbmx5IGZyYWdpbGl0eSBpcyAKdGhhdCByZXRpcmUg d29yayBoYW5kbGVyIG1hbmFnZXMgdG8gZ2V0IHNjaGVkdWxlZCBkdXJpbmcgdGhhdCB3aW5kb3cu IFNvIApJIHRoaW5rIGl0IGlzIGZpbmUuCgo+IGJhdGNoID0gYmlnX3JlbmRlcl9jb3B5KGN0eCk7 Cj4gY29udGV4dF9jbG9zZShjdHgpOwo+IGdlbV9zeW5jKGJhdGNoKTsKCkkgZG9uJ3QgdGhpbmsg c28uIEl0IG5lZWRzIHR3byBjb250ZXh0cyBzbyB0aGF0IG9iamVjdCBjYW4gYmUgYWN0aXZlIG9u IAp0d28gcmluZ3MgYW5kIHdlIGNhbiBkZXN0cm95IG9uZSBjb250ZXh0IHdpdGggYW5vdGhlciBv bmUgc3RpbGwgYWN0aXZlLgoKUmVnYXJkcywKClR2cnRrbwpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdm eEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=