From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id A42E889C60 for ; Tue, 16 Apr 2019 20:16:36 +0000 (UTC) References: <20190415182251.22427-1-carlos.santa@intel.com> <20190415182251.22427-2-carlos.santa@intel.com> <95dffaa6-0977-f61d-a056-3aacb9536fa4@intel.com> <852e17cdb74fdf8474496f4b5d3e3628df2b4560.camel@intel.com> From: Antonio Argenziano Message-ID: <6819c98b-4a7e-4674-7ca6-a38a2be7b03c@intel.com> Date: Tue, 16 Apr 2019 13:16:35 -0700 MIME-Version: 1.0 In-Reply-To: <852e17cdb74fdf8474496f4b5d3e3628df2b4560.camel@intel.com> Content-Language: en-US Subject: Re: [igt-dev] [RFC] tests/gem_watchdog: Initial set of tests for GPU watchdog List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Carlos Santa , igt-dev@lists.freedesktop.org Cc: Ursulin Tvrtko List-ID: CgpPbiAxNS8wNC8xOSAxOTowMiwgQ2FybG9zIFNhbnRhIHdyb3RlOgo+IE9uIE1vbiwgMjAxOS0w NC0xNSBhdCAxNDo1MCAtMDcwMCwgQW50b25pbyBBcmdlbnppYW5vIHdyb3RlOgo+Pgo+PiBPbiAx NS8wNC8xOSAxMToyMiwgQ2FybG9zIFNhbnRhIHdyb3RlOgo+Pj4gVGhpcyB0ZXN0IGFkZHMgYmFz aWMgc2V0IG9mIHRlc3RzIHRvIHJlc2V0IHRoZSBkaWZmZXJlbnQKPj4+IEdQVSBlbmdpbmVzIHRo cm91Z2ggdGhlIHdhdGNoZG9nIHRpbWVyLgo+Pj4KPj4+IENyZWRpdHMgdG8gQW50b25pbyBmb3Ig dGhlIG9yaWdpbmFsIGNvZGViYXNlIHRoaXMgaXMgYmFzZWQgb24uCj4+Pgo+Pj4gQ2M6IFVyc3Vs aW4gVHZydGtvIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+Cj4+PiBDYzogQW50b25pbyBBcmdl bnppYW5vIDxhbnRvbmlvLmFyZ2Vuemlhbm9AaW50ZWwuY29tPgo+Pj4gQ2M6IENocmlzIFdpbHNv biA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrCj4+Cj4+IG5pdDogbWlzc2luZyAnPicgYXQgdGhl IGVuZCBvZiBhZGRyZXNzIF4KPj4KPj4+IFNpZ25lZC1vZmYtYnk6IENhcmxvcyBTYW50YSA8Y2Fy bG9zLnNhbnRhQGludGVsLmNvbT4KPj4+IC0tLQo+Pj4gICAgdGVzdHMvTWFrZWZpbGUuc291cmNl cyAgICB8ICAgMyArCj4+PiAgICB0ZXN0cy9pOTE1L2dlbV93YXRjaGRvZy5jIHwgNDM5Cj4+PiAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4+PiAgICB0ZXN0 cy9tZXNvbi5idWlsZCAgICAgICAgIHwgICAxICsKPj4+ICAgIDMgZmlsZXMgY2hhbmdlZCwgNDQz IGluc2VydGlvbnMoKykKPj4+ICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9pOTE1L2dlbV93 YXRjaGRvZy5jCj4+Pgo+Pj4gZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMgYi90 ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4+PiBpbmRleCAyMTQ2OThkLi43ZjE3ZjIwIDEwMDY0NAo+ Pj4gLS0tIGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+Pj4gKysrIGIvdGVzdHMvTWFrZWZpbGUu c291cmNlcwo+Pj4gQEAgLTQ0NCw2ICs0NDQsOSBAQCBnZW1fdXNlcnB0cl9ibGl0c19TT1VSQ0VT ID0KPj4+IGk5MTUvZ2VtX3VzZXJwdHJfYmxpdHMuYwo+Pj4gICAgVEVTVFNfcHJvZ3MgKz0gZ2Vt X3dhaXQKPj4+ICAgIGdlbV93YWl0X1NPVVJDRVMgPSBpOTE1L2dlbV93YWl0LmMKPj4+ICAgIAo+ Pj4gK1RFU1RTX3Byb2dzICs9IGdlbV93YXRjaGRvZwo+Pj4gK2dlbV93YXRjaGRvZ19TT1VSQ0VT ID0gaTkxNS9nZW1fd2F0Y2hkb2cuYwo+Pj4gKwo+Pj4gICAgVEVTVFNfcHJvZ3MgKz0gZ2VtX3dv cmthcm91bmRzCj4+PiAgICBnZW1fd29ya2Fyb3VuZHNfU09VUkNFUyA9IGk5MTUvZ2VtX3dvcmth cm91bmRzLmMKPj4+ICAgIAo+Pj4gZGlmZiAtLWdpdCBhL3Rlc3RzL2k5MTUvZ2VtX3dhdGNoZG9n LmMgYi90ZXN0cy9pOTE1L2dlbV93YXRjaGRvZy5jCj4+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ Pj4gaW5kZXggMDAwMDAwMC4uNjVlMmY1Ygo+Pj4gLS0tIC9kZXYvbnVsbAo+Pj4gKysrIGIvdGVz dHMvaTkxNS9nZW1fd2F0Y2hkb2cuYwo+Pj4gQEAgLTAsMCArMSw0MzkgQEAKPj4+ICsvKgo+Pj4g KyAqIENvcHlyaWdodCDCqSAyMDE2IEludGVsIENvcnBvcmF0aW9uCj4+PiArICoKPj4+ICsgKiBQ ZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNv bgo+Pj4gb2J0YWluaW5nIGEKPj4+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29j aWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCj4+PiAiU29mdHdhcmUiKSwKPj4+ICsgKiB0 byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0 aG91dAo+Pj4gbGltaXRhdGlvbgo+Pj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2Rp ZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLAo+Pj4gc3VibGljZW5zZSwKPj4+ICsgKiBh bmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMg dG8KPj4+IHdob20gdGhlCj4+PiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBz dWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKPj4+IGNvbmRpdGlvbnM6Cj4+PiArICoKPj4+ICsgKiBU aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZQo+Pj4g KGluY2x1ZGluZyB0aGUgbmV4dAo+Pj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQg aW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbAo+Pj4gcG9ydGlvbnMgb2YgdGhlCj4+PiArICog U29mdHdhcmUuCj4+PiArICoKPj4+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKPj4+IEVYUFJFU1MgT1IKPj4+ICsgKiBJ TVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCj4+ PiBNRVJDSEFOVEFCSUxJVFksCj4+PiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PCj4+PiBFVkVOVCBTSEFMTAo+Pj4gKyAqIFRI RSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLAo+ Pj4gREFNQUdFUyBPUiBPVEhFUgo+Pj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJ T04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAo+Pj4gQVJJU0lORwo+Pj4gKyAqIEZS T00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0Ug T1IKPj4+IE9USEVSIERFQUxJTkdTCj4+PiArICogSU4gVEhFIFNPRlRXQVJFLgo+Pj4gKyAqLwo+ Pj4gKyNpbmNsdWRlICJpZ3QuaCIKPj4+ICsjaW5jbHVkZSAiaWd0X3N5c2ZzLmgiCj4+PiArI2lu Y2x1ZGUgInN3X3N5bmMuaCIKPj4+ICsKPj4+ICsjaW5jbHVkZSA8cHRocmVhZC5oPgo+Pj4gKyNp bmNsdWRlIDxmY250bC5oPgo+Pj4gKwo+Pj4gKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KPj4+ICsj aW5jbHVkZSA8c3lzL3BvbGwuaD4KPj4+ICsjaW5jbHVkZSA8c3lzL3NpZ25hbC5oPgo+Pj4gKyNp bmNsdWRlICJpOTE1L2dlbV9yaW5nLmgiCj4+PiArCj4+PiArI2RlZmluZSBNQVhfUFJJTyBMT0NB TF9JOTE1X0NPTlRFWFRfTUFYX1VTRVJfUFJJT1JJVFkKPj4+ICsjZGVmaW5lIE1JTl9QUklPIExP Q0FMX0k5MTVfQ09OVEVYVF9NSU5fVVNFUl9QUklPUklUWQo+Pj4gKyNkZWZpbmUgSElHSCAxCj4+ PiArI2RlZmluZSBMT1cgMAo+Pj4gKyNkZWZpbmUgTE9DQUxfRVhFQ19GRU5DRV9PVVQgKDEgPDwg MTcpCj4+PiArI2RlZmluZSBXQVRDSERPR19USFJFU0hPTEQgKDEwMCkKPj4+ICsjZGVmaW5lIE1B WF9FTkdJTkVTIDUKPj4+ICsjZGVmaW5lIFJFTkRFUl9DTEFTUyAwCj4+PiArI2RlZmluZSBWSURF T19ERUNPREVfQ0xBU1MgMQo+Pj4gKyNkZWZpbmUgVklERU9fRU5IQU5DRU1FTlRfQ0xBU1MgMgo+ Pj4gKyNkZWZpbmUgQ09QWV9FTkdJTkVfQ0xBU1MgMwo+Pj4gKyNkZWZpbmUgTE9DQUxfSTkxNV9D T05URVhUX1BBUkFNX1dBVENIRE9HIDB4MTAKPj4+ICsKPj4+ICtjb25zdCB1aW50NjRfdCB0aW1l b3V0XzEwMG1zID0gMTAwMDAwMDAwTEw7Cj4+PiArc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBsaXN0 X2xvY2sgPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOwo+Pj4gKwo+Pj4gK3N0cnVjdCBkcm1f aTkxNV9nZW1fd2F0Y2hkb2dfdGltZW91dCB7Cj4+PiArCXVuaW9uIHsKPj4+ICsJCXN0cnVjdCB7 Cj4+PiArCQkJLyoKPj4+ICsJCQkgKiBFbmdpbmUgY2xhc3MgJiBpbnN0YW5jZSB0byBiZSBjb25m aWd1cmVkIG9yCj4+PiBxdWVyaWVkLgo+Pj4gKwkJCSAqLwo+Pj4gKwkJCV9fdTE2IGVuZ2luZV9j bGFzczsKPj4+ICsJCQlfX3UxNiBlbmdpbmVfaW5zdGFuY2U7Cj4+PiArCQl9Owo+Pj4gKwkJLyog SW5kZXggYmFzZWQgYWRkcmVzc2luZyBtb2RlICovCj4+PiArCQlfX3UzMiBpbmRleDsKPj4+ICsJ fTsKPj4+ICsJLyogR1BVIEVuZ2luZSB3YXRjaGRvZyByZXNldHMgdGltZW91dCBpbiB1cyAqLwo+ Pj4gKwlfX3UzMiB0aW1lb3V0X3VzOwo+Pj4gK307Cj4+PiArCj4+PiArc3RhdGljIHZvaWQgY2xl YXJfZXJyb3Jfc3RhdGUoaW50IGZkKQo+Pj4gK3sKPj4+ICsJaW50IGRpcjsKPj4+ICsKPj4+ICsJ ZGlyID0gaWd0X3N5c2ZzX29wZW4oZmQpOwo+Pj4gKwo+Pj4gKwlpZiAoZGlyIDwgMCkKPj4+ICsJ CXJldHVybjsKPj4+ICsKPj4+ICsJLyogQW55IHdyaXRlIHRvIHRoZSBlcnJvciBzdGF0ZSBjbGVh cnMgaXQgKi8KPj4+ICsJaWd0X3N5c2ZzX3NldChkaXIsICJlcnJvciIsICIiKTsKPj4+ICsJY2xv c2UoZGlyKTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGJvb2wgY2hlY2tfZXJyb3Jfc3RhdGUo aW50IGZkKSA+ICt7Cj4+Cj4+IERvbid0IHRoaW5rIHRoaXMgaXMgdXNlZC4KPiAKPiBZb3UncmUg cmlnaHQsIEkgbWlzc2VkIHRvIGRlbGV0ZSBpdC4KPiAKPj4KPj4+ICsJY2hhciAqZXJyb3IsICpz dHI7Cj4+PiArCWJvb2wgZm91bmQgPSBmYWxzZTsKPj4+ICsJaW50IGRpcjsKPj4+ICsKPj4+ICsJ ZGlyID0gaWd0X3N5c2ZzX29wZW4oZmQpOwo+Pj4gKwo+Pj4gKwllcnJvciA9IGlndF9zeXNmc19n ZXQoZGlyLCAiZXJyb3IiKTsKPj4+ICsJaWd0X3N5c2ZzX3NldChkaXIsICJlcnJvciIsICJCZWdv bmUhIik7Cj4+PiArCj4+PiArCWlndF9hc3NlcnQoZXJyb3IpOwo+Pj4gKwlpZ3RfZGVidWcoIkVy cm9yOiAlc1xuIiwgZXJyb3IpOwo+Pj4gKwo+Pj4gKwlpZiAoKHN0ciA9IHN0cnN0cihlcnJvciwg IkdQVSBIQU5HIikpKSB7Cj4+PiArCQlpZ3RfZGVidWcoIkZvdW5kIGVycm9yIHN0YXRlISBHUFUg aGFuZyB0cmlnZ2VyZWQhCj4+PiAlc1xuIiwgc3RyKTsKPj4+ICsJCWZvdW5kID0gdHJ1ZTsKPj4+ ICsJfQo+Pj4gKwo+Pj4gKwljbG9zZShkaXIpOwo+Pj4gKwo+Pj4gKwlyZXR1cm4gZm91bmQ7Cj4+ PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIGNvbnRleHRfc2V0X3dhdGNoZG9nKGludCBmZCwg aW50IGVuZ2luZV9pZCwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBjdHhfaWQsIHVuc2lnbmVkCj4+PiB0aHJlc2hvbGQpCj4+PiArewo+Pj4gKwlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX3dhdGNoZG9nX3RpbWVvdXQKPj4+IGVuZ2luZXNfdGhyZXNob2xkW01BWF9F TkdJTkVTXTsKPj4+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIGFyZyA9IHsK Pj4+ICsJCS5wYXJhbSA9IExPQ0FMX0k5MTVfQ09OVEVYVF9QQVJBTV9XQVRDSERPRywKPj4+ICsJ CS5jdHhfaWQgPSBjdHhfaWQsCj4+PiArCQkuc2l6ZSA9IHNpemVvZihlbmdpbmVzX3RocmVzaG9s ZCksCj4+PiArCQkudmFsdWUgPSAodWludDY0X3QpJmVuZ2luZXNfdGhyZXNob2xkCj4+PiArCX07 Cj4+PiArCj4+PiArICAgIG1lbXNldCgmZW5naW5lc190aHJlc2hvbGQsIDAsIHNpemVvZihlbmdp bmVzX3RocmVzaG9sZCkpOwo+Pj4gKwo+Pj4gKyAgICAvKiByZWFkIGV4aXN0aW5nIHZhbHVlcyAq Lwo+Pj4gKyAgICBnZW1fY29udGV4dF9nZXRfcGFyYW0oZmQsICZhcmcpOwo+Pgo+PiBXaHkgZG8g d2UgbmVlZCB0byByZWFkIHRoZSBleGlzdGluZyB2YWx1ZXM/Cj4gCj4gWW91J3JlIHJpZ2h0LCB3 ZSBkb24ndCBuZWVkIHRvLiBJIGp1c3QgcXVpY2tseSB0ZXN0ZWQgaXQuLi4KPiAKPj4KPj4+ICsK Pj4+ICsgICAgc3dpdGNoIChlbmdpbmVfaWQgJiBJOTE1X0VYRUNfUklOR19NQVNLKSB7Cj4+Cj4+ IElmIEkgcmVhZCB0aGlzIGNvcnJlY3RseSB3ZSBjYW5ub3Qgc2V0IHRoZSB0aHJlc2hvbGQgZm9y IG1vcmUgdGhhbgo+PiBvbmUKPj4gZW5naW5lIGF0IGEgdGltZS4gTWF5YmUgdXNlIGEgbWFzaz8K Pj4KPj4+ICsgICAgY2FzZSBJOTE1X0VYRUNfUkVOREVSOgo+Pj4gKyAgICAgICAgIGVuZ2luZXNf dGhyZXNob2xkW1JFTkRFUl9DTEFTU10udGltZW91dF91cyA9IHRocmVzaG9sZDsKPj4+ICsJIGVu Z2luZXNfdGhyZXNob2xkW1ZJREVPX0RFQ09ERV9DTEFTU10udGltZW91dF91cyA9IDA7Cj4+PiAr CSBlbmdpbmVzX3RocmVzaG9sZFtWSURFT19FTkhBTkNFTUVOVF9DTEFTU10udGltZW91dF91cyA9 IDA7Cj4+PiArCSBlbmdpbmVzX3RocmVzaG9sZFtDT1BZX0VOR0lORV9DTEFTU10udGltZW91dF91 cyA9IDA7Cj4+PiArICAgICAgICAgYnJlYWs7Cj4+PiArICAgIGNhc2UgSTkxNV9FWEVDX0JTRDoK Pj4+ICsgICAgICAgICBlbmdpbmVzX3RocmVzaG9sZFtSRU5ERVJfQ0xBU1NdLnRpbWVvdXRfdXMg PSAwOwo+Pj4gKwkgZW5naW5lc190aHJlc2hvbGRbVklERU9fREVDT0RFX0NMQVNTXS50aW1lb3V0 X3VzID0gdGhyZXNob2xkOwo+Pj4gKwkgZW5naW5lc190aHJlc2hvbGRbVklERU9fRU5IQU5DRU1F TlRfQ0xBU1NdLnRpbWVvdXRfdXMgPSAwOwo+Pj4gKwkgZW5naW5lc190aHJlc2hvbGRbQ09QWV9F TkdJTkVfQ0xBU1NdLnRpbWVvdXRfdXMgPSAwOwo+Pj4gKyAgICAgICAgIGJyZWFrOwo+Pj4gKyAg ICBjYXNlIEk5MTVfRVhFQ19WRUJPWDoKPj4+ICsgICAgICAgICBlbmdpbmVzX3RocmVzaG9sZFtS RU5ERVJfQ0xBU1NdLnRpbWVvdXRfdXMgPSAwOwo+Pj4gKwkgZW5naW5lc190aHJlc2hvbGRbVklE RU9fREVDT0RFX0NMQVNTXS50aW1lb3V0X3VzID0gMDsKPj4+ICsgICAgICAgICBlbmdpbmVzX3Ro cmVzaG9sZFtWSURFT19FTkhBTkNFTUVOVF9DTEFTU10udGltZW91dF91cyA9Cj4+PiB0aHJlc2hv bGQ7Cj4+PiArCSBlbmdpbmVzX3RocmVzaG9sZFtDT1BZX0VOR0lORV9DTEFTU10udGltZW91dF91 cyA9IDA7Cj4+PiArICAgICAgICAgYnJlYWs7Cj4+PiArICAgIGRlZmF1bHQ6Cj4+PiArCWVuZ2lu ZXNfdGhyZXNob2xkW1JFTkRFUl9DTEFTU10udGltZW91dF91cyA9IDA7Cj4+PiArCWVuZ2luZXNf dGhyZXNob2xkW1ZJREVPX0RFQ09ERV9DTEFTU10udGltZW91dF91cyA9IDA7Cj4+PiArCWVuZ2lu ZXNfdGhyZXNob2xkW1ZJREVPX0VOSEFOQ0VNRU5UX0NMQVNTXS50aW1lb3V0X3VzID0gMDsKPj4+ ICsJZW5naW5lc190aHJlc2hvbGRbQ09QWV9FTkdJTkVfQ0xBU1NdLnRpbWVvdXRfdXMgPSAwOwo+ Pgo+PiBOb3Qgc3VyZSBhYm91dCBjbGVhcmluZyBldmVyeXRoaW5nIGhlcmUsIHdlIHNob3VsZCBh dCBsZWFzdCBsb2cKPj4gc29tZXRoaW5nIHRvIHNheSB3ZSBnb3QgaW4gYW4gdW53YW50ZWQgc2l0 dWF0aW9uLgo+Pgo+PiBuaXQ6IGJpdCBvZiBhIHdlaXJkIGluZGVudCBpbiB0aGlzIGJsb2NrLgo+ IAo+IFlvdSdyZSByaWdodCwgd2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0byBjbGVhciBldmVyeXRo aW5nIGluIHRoZSBkZWZhdWx0Cj4gY2FzZS4gSSBqdXN0IHJlLXJhbiB0aGUgdGVzdHMuIEkgaW5p dGlhbGx5IGhhZCBpdCBhcyBhIHByZWNhdXRpb24gYnV0Cj4gbWlzc2VkIHRvIHJldGVzdC9yZW1v dmUuLi4KPiAKPj4KPj4+ICsgICAgICAgIGJyZWFrOwo+Pj4gKyAgICB9Cj4+PiArCWdlbV9jb250 ZXh0X3NldF9wYXJhbShmZCwgJmFyZyk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIHNl bmRfY2FuYXJ5KHVpbnQzMl90IGZkLCB1aW50MzJfdCBjdHhfaWQsIHVuc2lnbmVkCj4+PiBleGVj X2lkLCB1aW50MzJfdCB0YXJnZXQsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgKmhhbmRsZSwK Pj4+IHVpbnQ2NF90IHRpbWVvdXQpCj4+Cj4+IFNob3VsZCBiZSBwb3NzaWJsZSB0byB1c2UgZ2Vt X3Rlc3RfZW5naW5lKCk7Cj4gCj4gT2ssIGxldCBtZSB0aGluayBhYm91dCBpdC4KPiAKPj4KPj4+ ICt7Cj4+PiArICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9ialsyXTsKPj4+ ICsgICAgc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IHJlbG9jOwo+Pj4gKyAg ICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7Cj4+PiArICAgIGlndF9z cGluX3QgKnNwaW4gPSBOVUxMOwo+Pj4gKwo+Pj4gKyAgICBjb25zdCB1aW50MzJfdCBiYmUgPSBN SV9CQVRDSF9CVUZGRVJfRU5EOwo+Pj4gKyAgICBpbnQgaSA9IDA7Cj4+PiArICAgIGludCBmZW5j ZTsKPj4+ICsKPj4+ICsgICAgZ2VtX3F1aWVzY2VudF9ncHUoZmQpOwo+Pj4gKwo+Pj4gKyAgICBt ZW1zZXQoJmV4ZWNidWYsIDAsIHNpemVvZihleGVjYnVmKSk7Cj4+PiArICAgIG1lbXNldCgmb2Jq LCAwLCBzaXplb2Yob2JqKSk7Cj4+PiArICAgIG1lbXNldCgmcmVsb2MsIDAsIHNpemVvZihyZWxv YykpOwo+Pj4gKwo+Pj4gKyAgICBleGVjYnVmLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVy KG9iaik7Cj4+PiArCj4+PiArICAgIGV4ZWNidWYuYnVmZmVyX2NvdW50ID0gMjsKPj4+ICsgICAg ZXhlY2J1Zi5mbGFncyA9IGV4ZWNfaWQgfCBMT0NBTF9FWEVDX0ZFTkNFX09VVDsKPj4+ICsKPj4+ ICsgICAgb2JqWzBdLmhhbmRsZSA9IHRhcmdldDsKPj4+ICsgICAgb2JqWzFdLmhhbmRsZSA9IGdl bV9jcmVhdGUoZmQsIDQwOTYpOwo+Pj4gKwo+Pj4gKyAgICBvYmpbMV0ucmVsb2NhdGlvbl9jb3Vu dCA9IDE7Cj4+PiArICAgIG9ialsxXS5yZWxvY3NfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZyZWxv Yyk7Cj4+PiArCj4+PiArICAgIHJlbG9jLnRhcmdldF9oYW5kbGUgPSBvYmpbMF0uaGFuZGxlOwo+ Pj4gKyAgICByZWxvYy5yZWFkX2RvbWFpbnMgPSBJOTE1X0dFTV9ET01BSU5fQ09NTUFORDsKPj4+ ICsgICAgcmVsb2Mud3JpdGVfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlOX0NPTU1BTkQ7Cj4+PiAr ICAgIHJlbG9jLmRlbHRhID0gb2Zmc2V0ICogc2l6ZW9mKHVpbnQzMl90KTsKPj4+ICsKPj4+ICsg ICAgcmVsb2Mub2Zmc2V0ID0gaSAqIHNpemVvZih1aW50MzJfdCk7Cj4+PiArICAgIGdlbV93cml0 ZShmZCwgb2JqWzFdLmhhbmRsZSwgMCwgJmJiZSwgc2l6ZW9mKGJiZSkpOwo+Pj4gKwo+Pj4gKyAg ICBfX3N5bmNfc3luY2hyb25pemUoKTsKPj4+ICsKPj4+ICsgICAgaWYgKGhhbmRsZSkgewo+Pj4g KyAgICAgICAgKmhhbmRsZSA9IG9ialsxXS5oYW5kbGU7Cj4+PiArICAgICAgICByZXR1cm47Cj4+ PiArICAgIH0KPj4+ICsgICAgZ2VtX3N5bmMoZmQsIG9ialsxXS5oYW5kbGUpOwo+Pj4gKyAgICBl eGVjYnVmLnJzdmQxID0gY3R4X2lkOwo+Pj4gKyAgICBleGVjYnVmLnJzdmQyID0gLTE7Cj4+PiAr Cj4+PiArICAgIHNwaW4gPSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZmQsIC5kZXBlbmRlbmN5ID0gb2Jq WzBdLmhhbmRsZSk7Cj4+PiArICAgIGlndF9zcGluX2JhdGNoX3NldF90aW1lb3V0KHNwaW4sIHRp bWVvdXQpOwo+Pj4gKyAgICBpZ3RfYXNzZXJ0KGdlbV9ib19idXN5KGZkLCBvYmpbMF0uaGFuZGxl KSk7Cj4+PiArCj4+PiArICAgIGdlbV9leGVjYnVmX3dyKGZkLCAmZXhlY2J1Zik7Cj4+PiArICAg IGlndF9zcGluX2JhdGNoX2ZyZWUoZmQsIHNwaW4pOwo+Pj4gKwo+Pj4gKyAgICBmZW5jZSA9IGV4 ZWNidWYucnN2ZDIgPj4gMzI7Cj4+PiArCj4+PiArI2lmIDAKPj4+ICsgICAgaWd0X2luZm8oImZl bmNlOiVkLCBmZW5jZSBzdGF0dXMgOiAlZCBFSU86ICVkCj4+PiBjdHhfaWQ6JWRcbiIsZmVuY2Us IHN5bmNfZmVuY2Vfc3RhdHVzKGZlbmNlKSwtRUlPLCBjdHhfaWQpOwo+Pj4gKyNlbmRpZgo+Pj4g Kwo+IAo+IEFueSBpZGVhcyB3aHkgd291bGQgdGhlIGZlbmNlIHdvdWxkbid0IHNpZ25hbCBjb3Jy ZWN0bHkgKGkuZS4sIEVJTykKPiBhZnRlciByZXNldHRpbmc/ICBJIG5lZWQgaGVscCB3aXRoIHRo aXMuLi4KCk5vdCBzdXJlLCBpdCBsb29rcyBjb3JyZWN0IG9uIHRoaXMgZW5kLCBqdXN0IG9uZSBz bWFsbCBjb21tZW50IHdvdWxkIGJlIAp0byB1c2UgSTkxNV9FWEVDX0ZFTkNFX09VVCBpbnN0ZWFk IG9mIHRoZSBsb2NhbCBmbGFnLgoKPiAKPj4+ICsgICAgY2xvc2UoZmVuY2UpOwo+Pj4gKwo+Pj4g KyAgICBnZW1fY2xvc2UoZmQsIG9ialsxXS5oYW5kbGUpOwo+Pj4gKyAgICBnZW1fcXVpZXNjZW50 X2dwdShmZCk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB1aW50MzJfdCBjcmVhdGVfY3R4X3dp dGhfcHJpb3JpdHkoaW50IGZkLCBpbnQgY3R4X3ByaW8pCj4+PiArewo+Pj4gKwl1aW50MzJfdCBj dHggPSBnZW1fY29udGV4dF9jcmVhdGUoZmQpOwo+Pj4gKwo+Pj4gKwlzd2l0Y2ggKGN0eF9wcmlv KSB7Cj4+PiArCWNhc2UgSElHSDoKPj4+ICsJCV9fZ2VtX2NvbnRleHRfc2V0X3ByaW9yaXR5KGZk LCBjdHgsIE1BWF9QUklPKTsKPj4+ICsJCWlndF9pbmZvKCJTZXR0aW5nIE1BWCBwcmlvcml0eSAl ZFxuIiwgY3R4X3ByaW8pOwo+Pj4gKwkJYnJlYWs7Cj4+PiArCWNhc2UgTE9XOgo+Pj4gKwkJX19n ZW1fY29udGV4dF9zZXRfcHJpb3JpdHkoZmQsIGN0eCwgTUlOX1BSSU8pOwo+Pj4gKwkJaWd0X2lu Zm8oIlNldHRpbmcgTUlOIHByaW9yaXR5ICVkXG4iLCBjdHhfcHJpbyk7Cj4+PiArCQlicmVhazsK Pj4+ICsJZGVmYXVsdDoKPj4+ICsJCWlndF9pbmZvKCJJZ25vcmluZyBjb250ZXh0IHByaW9yaXR5 ICVkXG4iLCBjdHhfcHJpbyk7Cj4+PiArCQlicmVhazsKPj4+ICsJfQo+Pj4gKwlyZXR1cm4gY3R4 Owo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9pZCBiYl9mYWN0b3J5KHVpbnQzMl90IGZkLCB1 aW50MzJfdCAqY3R4LCBpbnQgcHJpbywKPj4+IHVpbnQ2NF90IHRpbWVvdXQsIGludCBwaWQpCj4+ Cj4+IEkgd291bGQgc2NyYXAgdGhpcyBmdW5jdGlvbi4gQUZBSUNUIHlvdSB1c2UgaXQgYm90aCBm b3Igc3VibWl0dGluZyBhCj4+IGNhbmFyeSBiYXRjaCBhbmQgZm9yIGNyZWF0aW5nIGNvbnRleHRz LiBEbyBpdCBleHBsaWNpdGx5IGluIHRoZSB0ZXN0Cj4+IG9yCj4+IHNvbWV3aGVyZSBpdCBpcyBj bGVhciB3aGF0IGlzIGhhcHBlbmluZy4KPiAKPiBPaywgbGV0IG1lIHRoaW5rIGFib3V0IGl0Li4u Cj4gCj4+Cj4+PiArewo+Pj4gKwl1aW50MzJfdCBzY3JhdGNoOwo+Pj4gKwl1bnNpZ25lZCBpbnQg bmVuZ2luZSA9IDA7Cj4+PiArCXVuc2lnbmVkIGludCBlbmdpbmVzWzE2XTsKPj4+ICsJaW50IGks IGo7Cj4+PiArCXVuc2lnbmVkIGludCBlbmdpbmU7Cj4+PiArCj4+PiArCWZvcl9lYWNoX3BoeXNp Y2FsX2VuZ2luZShmZCwgZW5naW5lKQo+Pj4gKwkJZW5naW5lc1tuZW5naW5lKytdID0gZW5naW5l Owo+Pj4gKwo+Pj4gKwlpZ3RfcmVxdWlyZShuZW5naW5lKTsKPj4+ICsKPj4+ICsJZm9yIChpID0g MDsgaSA8IG5lbmdpbmU7IGkrKykgewo+Pj4gKwkJc2NyYXRjaCA9IGdlbV9jcmVhdGUoZmQsIDQw OTYpOwo+Pj4gKwkJcHRocmVhZF9tdXRleF9sb2NrKCZsaXN0X2xvY2spOwo+Pj4gKwo+Pj4gKwkJ aWYgKHByaW8gPT0gSElHSCkKPj4+ICsJCQljcmVhdGVfY3R4X3dpdGhfcHJpb3JpdHkoZmQsIEhJ R0gpOwo+Pgo+PiBtaXNzaW5nICJjdHhbal0gPSIgICBeXl4gYW5kIC4uLgo+IAo+IFllYWgsIHRo aXMgZG9lc24ndCBsb29rIHJpZ2h0Li4uCj4gCj4+Cj4+PiArCQllbHNlIGlmIChwcmlvID09IExP VykKPj4+ICsJCQljcmVhdGVfY3R4X3dpdGhfcHJpb3JpdHkoZmQsIExPVyk7Cj4+Cj4+IC4uLiBo ZXJlCQleXl4gPwo+IAo+IFllYWgsIHRoaXMgZG9lc24ndCBsb29rIHJpZ2h0Li4uCj4gCj4+Cj4+ PiArCQllbHNlCj4+PiArCQkJY3R4W2pdID0gZ2VtX2NvbnRleHRfY3JlYXRlKGZkKTsKPj4+ICsK Pj4+ICsJCXNlbmRfY2FuYXJ5KGZkLCBjdHhbal0sIGVuZ2luZXNbaV0sIHNjcmF0Y2gsIDAsIE5V TEwsCj4+PiB0aW1lb3V0KTsKPj4+ICsJCWdlbV9jbG9zZShmZCwgc2NyYXRjaCk7Cj4+PiArCQlw dGhyZWFkX211dGV4X3VubG9jaygmbGlzdF9sb2NrKTsKPj4+ICsJCWorKzsKPj4+ICsJfQo+Pj4g K30KPj4+ICsKPj4+ICtzdGF0aWMgdm9pZCBpbmplY3RfaGFuZyh1aW50MzJfdCBmZCwgdW5zaWdu ZWQgcmluZywgdWludDMyX3QKPj4+IGN0eF9pZCwgIHVuc2lnbmVkIGZsYWdzKQo+Pj4gK3sKPj4+ ICsJaWd0X2hhbmdfdCBoYW5nOwo+Pj4gKwloYW5nID0gaWd0X2hhbmdfY3R4KGZkLCBjdHhfaWQs IHJpbmcsIGZsYWdzKTsKPj4+ICsJZ2VtX3N5bmMoZmQsIGhhbmcuc3Bpbi0+aGFuZGxlKTsKPj4+ ICt9Cj4+PiArCj4+PiArc3RhdGljIHZvaWQgZ3B1X3dhdGNoZG9nX2xvbmdfYmF0Y2hfMl9jb250 ZXh0cyhpbnQgZmQpCj4+PiArewo+Pj4gKwl1bnNpZ25lZCBmbGFncyA9IEhBTkdfQUxMT1dfQ0FQ VFVSRTsKPj4+ICsJaW50IGkgPSAwLCBqPTA7Cj4+PiArCj4+PiArCWlndF9mb3JrKGNoaWxkLCAx KSB7Cj4+Cj4+IFdoeSBkbyB5b3Ugd2FudCB0byBkbyB0aGlzIGZyb20gdHdvIHNlcGFyYXRlIHBy b2Nlc3Nlcz8KPiAKPiBVcnN1bGluIHN1Z2dlc3RlZCAyIHNlcGFyYXRlIGNvbnRleHRzLCBib3Ro IHdpdGggbG9uZyBiYXRjaGVzLCB0aGVuIGN0eAo+IDEgd291bGQgZXhlY3V0ZSB1bnRpbCBjb21w bGV0aW9uIGFuZCBjdHgyIHdvdWxkIGdldCBjYW5jZWxlZCBzb21lIHRpbWUKPiBhZnRlciB0aGVu IHJlc2V0dGluZyBpdCB3aXRoIGdwdSB3YXRjaGRvZy4gSSB0aG91Z2h0IEkgbmVlZGVkIDIKPiBz ZXBhcmF0ZSB0aHJlYWRzIGFzIG9wcG9zZSB0byBoYXZpbmcgdGhlbSBnZXR0aW5nIGxhdW5jaGVk IGZyb20gdGhlCj4gc2FtZSB0aHJlYWQgYnV0IG1heWJlIEkgYW0gb3ZlciBjb21wbGljYXRpbmcg aXQuLi4KCkkgdGhpbmsgc28gOikuIFlvdSBjYW4gc2VuZCB0aGUgdHdvIGNvbnRleHRzIGZyb20g dGhlIHNhbWUgdGhyZWFkLgoKPiAKPj4KPj4+ICsJCS8qIENoaWxkIHByb2Nlc3MgKi8KPj4+ICsJ CXVpbnQzMl90IGN0eFs1XTsKPj4+ICsJCWNvbnN0IHVpbnQ2NF90IGJhdGNoX3RpbWVvdXRfbXMg PSB0aW1lb3V0XzEwMG1zKjM7Cj4+PiArCQltZW1zZXQoJmN0eCwgMCwgc2l6ZW9mKGN0eCkpOwo+ Pj4gKwkJYmJfZmFjdG9yeShmZCwgY3R4LCAtMSwgYmF0Y2hfdGltZW91dF9tcywKPj4+IHN5c2Nh bGwoU1lTX2dldHRpZCkpOwo+Pj4gKwo+Pj4gKwkJc2xlZXAoNik7Cj4+PiArCj4+PiArCSAgICAJ Y29udGV4dF9zZXRfd2F0Y2hkb2coZmQsIDEsIDEsIFdBVENIRE9HX1RIUkVTSE9MRCk7Cj4+PiAr CSAgICAJY2xlYXJfZXJyb3Jfc3RhdGUoZmQpOwo+Pj4gKwo+Pj4gKwkJLyogRW5naW5lIElEOiBS Q1MwLCBDb250ZXh0IElEOiAxICovCj4+PiArCSAgIAlpbmplY3RfaGFuZyhmZCwgMSwgMSwgZmxh Z3MpOwo+Pj4gKwo+Pj4gKwkJZm9yIChpID0gMDsgaSA8NTsgaSsrKSB7Cj4+PiArCQkJcHJpbnRm KCJjdHhfY2hpbGQ6ICV1IGN0eF9jbnQ6ICVkCj4+PiB0aWQ6JWRcbiIsY3R4W2ldLCBzeXNjYWxs KFNZU19nZXR0aWQpKTsKPj4+ICsJCQkvL2dlbV9jb250ZXh0X2Rlc3Ryb3koZmQsIGN0eFtpXSk7 Cj4+PiArCQl9Cj4+PiArCX0KPj4+ICsKPj4+ICsJewo+Pj4gKwkJLyogUGFyZW50IHByb2Nlc3Mg Ki8KPj4+ICsJCXVpbnQzMl90IGN0eFs1XTsKPj4+ICsJCWNvbnN0IHVpbnQ2NF90IGJhdGNoX3Rp bWVvdXRfbXMgPSB0aW1lb3V0XzEwMG1zKjE7Cj4+PiArCQltZW1zZXQoJmN0eCwgMCwgc2l6ZW9m KGN0eCkpOwo+Pj4gKwkJcHJpbnRmKCIlcyAlZCAsIHRpZDogJWRcbiIsIF9fRlVOQ1RJT05fXyxf X0xJTkVfXywKPj4+IHN5c2NhbGwoU1lTX2dldHRpZCkpOwo+Pj4gKwkJCj4+PiArCQliYl9mYWN0 b3J5KGZkLCBjdHgsIC0xLCBiYXRjaF90aW1lb3V0X21zLAo+Pj4gc3lzY2FsbChTWVNfZ2V0dGlk KSk7Cj4+PiArCj4+PiArCQlzbGVlcCg2KTsKPj4+ICsKPj4+ICsJICAgIAljb250ZXh0X3NldF93 YXRjaGRvZyhmZCwgNCwgMTAsCj4+PiBXQVRDSERPR19USFJFU0hPTEQpOwo+Pj4gKwkgICAgCWNs ZWFyX2Vycm9yX3N0YXRlKGZkKTsKPj4+ICsKPj4+ICsgICAgICAgIAkvKiBFbmdpbmUgSUQ6IFZF Q1MwLCBDb250ZXh0IElEOiAxMCAqLwo+Pj4gKyAgIAkJaW5qZWN0X2hhbmcoZmQsIDQsIDEwLCBm bGFncyk7Cj4+Cj4+IFdoeSBoYXJkY29kaW5nIHRoZSBjb250ZXh0IGlkcz8gWW91IGNhbiB1c2Ug dGhlIG9uZXMgY29taW5nIGZyb20KPj4gZ2VtX2NvbnRleHRfY3JlYXRlKCk7Cj4gCj4gUmlnaHQs IHRoaXMgc3RpbGwgbmVlZHMgc29tZSBtb3JlIHdvcmsuLi4uCj4gCj4+Cj4+PiArCj4+PiArCQlm b3IgKGkgPSAwOyBpIDw1OyBpKyspIHsKPj4+ICsJCQlpZ3RfaW5mbygiY3R4X2RhZDogJXUgY3R4 X2NudDogJWQgdGlkOiVkCj4+PiBcbiIsY3R4W2ldLCBpLCBzeXNjYWxsKFNZU19nZXR0aWQpKTsK Pj4+ICsJCQkvL2dlbV9jb250ZXh0X2Rlc3Ryb3koZmQsIGN0eFtpXSk7Cj4+PiArCQl9Cj4+PiAr CX0KPj4+ICsKPj4+ICsJaWd0X3dhaXRjaGlsZHJlbigpOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0 aWMgdm9pZCBncHVfd2F0Y2hvZGdfaGFuZ19sb25nX2JhdGNoX3NpbmdsZV9lbmdpbmUoaW50IGZk LAo+Pj4gdW5zaWduZWQgZW5naW5lX2lkLCBpbnQgbmVuZ2luZSkKPj4+ICt7Cj4+PiArCXVpbnQz Ml90ICpjdHg7Cj4+PiArCWludCBpOwo+Pj4gKwl1bnNpZ25lZCBmbGFncyA9IEhBTkdfQUxMT1df Q0FQVFVSRTsKPj4+ICsJY29uc3QgdWludDY0X3QgYmF0Y2hfdGltZW91dF9tcyA9IHRpbWVvdXRf MTAwbXMqNDsKPj4+ICsKPj4+ICsJaWd0X3JlcXVpcmUobmVuZ2luZSk7Cj4+PiArCj4+PiArCWN0 eCA9ICh1aW50MzJfdCAqKW1hbGxvYyhzaXplb2YodWludDMyX3QpKm5lbmdpbmUpOwo+Pj4gKwo+ Pj4gKwlpZiAoIWN0eCkgewo+Pj4gKwkJaWd0X2luZm8oIk91dCBvZiBtZW1vcnlcbiIpOwo+Pj4g KwkJZXhpdCgxKTsKPj4+ICsJfQo+Pj4gKwo+Pj4gKwliYl9mYWN0b3J5KGZkLCBjdHgsIC0xLCBi YXRjaF90aW1lb3V0X21zLCBzeXNjYWxsKFNZU19nZXR0aWQpKTsKPj4KPj4gVGhlIGNhbGwgdG8g YmJfZmFjdG9yeSBzZW5kcyBhIGNhbmFyeSBiYXRjaCB0byBlYWNoIGVuZ2luZSwgaXQgd291bGQK Pj4gbWFrZSBtb3JlIHNlbnNlIHRvIGRvIHRoYXQgYWZ0ZXIgdGhlIGhhbmcgdHJpZ2dlcmVkLgo+ IAo+IE9rLCBJIHRoaW5rIEkgbmVlZCB0byBzZXBhcmF0ZSB0aGUgY29udGV4dCBjcmVhdGlvbiBh bmQgdGhlIGNhbmFyeQo+IHN1Ym1pc3Npb24gYW5kIHRoZW4gZG8gd2hhdCB5b3UncmUgc3VnZ2Vz dGluZy4uLgo+IAo+Pgo+Pj4gKwkKPj4+ICsJaWYgKGVuZ2luZV9pZCA9PSAxKSB7Cj4+Cj4+IE5v dCBzdXJlIHdoYXQgdGhpcyBpZnt9ZWxzZSBibG9jayBpcyBmb3IsIGNhbiB5b3UgYWRkIGEgY29t bWVudD8KPiAKPiBUaGlzIGFsbG93cyB0byBydW4gYSBiYXRjaCBzZXBhcmF0ZWx5IHBlciBlbmdp bmUgd2hlbiBjYWxsaW5nICJncHUtCj4gd2F0Y2hkb2ctbG9uZy1iYXRjaC1yZW5kZXIiIHN1YnRl c3QgZm9yIGV4YW1wbGUuIEkgZm91bmQgdGhpcyB0byBiZQo+IHRydWUgcmNzMCA9IDEsIGJzZDEg PSA4MTk0LCBic2QyID0gMTYzODYsIHZlY3MwID0gNS4KCkkgdGhpbmsgdGhhdCB5b3UgZG9uJ3Qg cmVhbGx5IG5lZWQgdGhpcywgb25jZSB5b3UgaGF2ZSB0aGUgY29udGV4dCAKYXZhaWxhYmxlIGF0 IHRoaXMgbGV2ZWwgb25lIHNpbmdsZSBjYWxsIHRvIGluamVjdCBoYW5nIHdvdWxkIHN1ZmZpY2Uu CgoJaW5qZWN0X2hhbmcoZmQsIGVuZ2luZV9pZCwgY3R4LCBmbGFncyk7Cgo+IAo+Pgo+Pj4gKwkJ Y29udGV4dF9zZXRfd2F0Y2hkb2coZmQsIGVuZ2luZV9pZCwgMSwKPj4+IFdBVENIRE9HX1RIUkVT SE9MRCk7ID4gKwkJY2xlYXJfZXJyb3Jfc3RhdGUoZmQpOwo+Pj4gKwkJaW5qZWN0X2hhbmcoZmQs IGVuZ2luZV9pZCwgMSwgZmxhZ3MpOwo+Pj4gKwl9IGVsc2UgaWYgKGVuZ2luZV9pZCA9PSA4MTk0 KSB7Cj4+PiArCQljb250ZXh0X3NldF93YXRjaGRvZyhmZCwgZW5naW5lX2lkLCAyLAo+Pj4gV0FU Q0hET0dfVEhSRVNIT0xEKTsKPj4+ICsJCWNsZWFyX2Vycm9yX3N0YXRlKGZkKTsKPj4+ICsJCWlu amVjdF9oYW5nKGZkLCBlbmdpbmVfaWQsIDIsIGZsYWdzKTsKPj4+ICsJfSBlbHNlIGlmIChlbmdp bmVfaWQgPT0gMTYzODYpIHsKPj4+ICsJCWNvbnRleHRfc2V0X3dhdGNoZG9nKGZkLCBlbmdpbmVf aWQsIDMsCj4+PiBXQVRDSERPR19USFJFU0hPTEQpOwo+Pj4gKwkJY2xlYXJfZXJyb3Jfc3RhdGUo ZmQpOwo+Pj4gKwkJaW5qZWN0X2hhbmcoZmQsIGVuZ2luZV9pZCwgMywgZmxhZ3MpOwo+Pj4gKwl9 IGVsc2UgaWYgKGVuZ2luZV9pZCA9PSA0KSB7Cj4+PiArCQljb250ZXh0X3NldF93YXRjaGRvZyhm ZCwgZW5naW5lX2lkLCA1LAo+Pj4gV0FUQ0hET0dfVEhSRVNIT0xEKTsKPj4+ICsJCWNsZWFyX2Vy cm9yX3N0YXRlKGZkKTsKPj4+ICsJCWluamVjdF9oYW5nKGZkLCBlbmdpbmVfaWQsIDUsIGZsYWdz KTsKPj4+ICsJfQo+Pgo+PiBjb250ZXh0IGlkcyBoYXJkY29kZWQgYWJvdmUgYXMgd2VsbC4KPiAK PiBCZWNhdXNlIHdoZW4gSSBjcmVhdGUgdGhlIGNvbnRleHRzIEkgbG9vcCB0aHJvdWdoIGFsbCB0 aGUgZW5naW5lcyBhbmQKPiB0aGVuIEkgcGFpcmVkIHRoZSBjeHQgaWQgd2l0aCB0aGUgYmF0Y2gg YnVmZmVyIGJlaW5nIHN1Ym1taXRlZAo+IGV4ZWNidWYucnN2ZDEgPSBjdHhfaWQ7IExhdGVyIG9u IHdoZW4gSSBzZXQgdGhlIHdhdGNoZG9nKCkgSSBwYXNzIHRoZQo+IGVuZ2luZV9pZCBhbmQgdGhl biBJIGluamVjdCB0aGUgaGFuZywgdGhlIGV4YWN0IGN0eF9pZCB0aGF0IGlzIHNldHRpbmcKPiB0 aGUgd2F0Y2hkb2cgdGltZW91dCBhbmQgc3VibWl0dGluZyB0aGUgYmF0Y2ggd29yayBtdXN0IG1h dGNoLgo+IAo+Pgo+Pj4gKwo+Pj4gKwlmb3IgKGkgPSAwOyBpIDxuZW5naW5lOyBpKyspCj4+PiAr CQlnZW1fY29udGV4dF9kZXN0cm95KGZkLCBjdHhbaV0pOwo+Pj4gKwlmcmVlKGN0eCk7Cj4+PiAr fQo+Pj4gK3N0YXRpYyB2b2lkIG5vX2dwdV9oYW5nX2xvbmdfYmF0Y2hfYWxsX2VuZ2luZXMoaW50 IGZkLCBpbnQKPj4+IG5lbmdpbmUsIGludCBwcmlvKQo+Pgo+PiBXb3VsZG4ndCB0aGlzIHRlc3Qg Y2FzZSBiZSBjb3ZlcmVkIGJ5IHRoZSBvdGhlciB0ZXN0cyB0aGF0IGRvIG5vcm1hbAo+PiBzdWJt aXNzaW9ucz8KPiAKPiBXZWxsLCB0aGlzIHRlc3QganVzdCBjcmVhdGVzIHRoZSBiYXRjaGVzIGFu ZCBleGVjdXRlcyB0aGVtIHVudGlsCj4gY29tcGxldGlvbiB3aXRob3V0IHNldHRpbmcgdGhlIGdw dSB3YXRjaGRvZyBub3IgaW5qZWN0aW5nIGhhbmcuIFRoZQo+IGlkZWEgYmVoaW5kIHRoaXMgdGVz dCB3YXMgdG8gY3JlYXRlIGEgbG9uZyBiYXRjaCBhbmQgbGV0IGl0IGV4ZWN1dGUuCj4gCj4+Cj4+ PiArewo+Pj4gKwl1aW50MzJfdCAqY3R4Owo+Pj4gKwlpbnQgaTsKPj4+ICsJY29uc3QgdWludDY0 X3QgYmF0Y2hfdGltZW91dF9tcyA9IHRpbWVvdXRfMTAwbXMqNDsKPj4+ICsKPj4+ICsJY3R4ID0g KHVpbnQzMl90ICopbWFsbG9jKHNpemVvZih1aW50MzJfdCkqbmVuZ2luZSk7Cj4+PiArCj4+PiAr CWlmICghY3R4KSB7Cj4+PiArCQlwcmludGYoIk91dCBvZiBtZW1vcnlcbiIpOwo+Pj4gKwkJZXhp dCgxKTsKPj4+ICsJfQo+Pj4gKwo+Pj4gKwliYl9mYWN0b3J5KGZkLCBjdHgsIHByaW8sIGJhdGNo X3RpbWVvdXRfbXMsCj4+PiBzeXNjYWxsKFNZU19nZXR0aWQpKTsKPj4+ICsKPj4+ICsJZm9yIChp ID0gMDsgaSA8bmVuZ2luZTsgaSsrKQo+Pj4gKwkJZ2VtX2NvbnRleHRfZGVzdHJveShmZCwgY3R4 W2ldKTsKPj4+ICsKPj4+ICsJZnJlZShjdHgpOwo+Pj4gK30KPj4+ICsKPj4+ICtpZ3RfbWFpbgo+ Pj4gK3sKPj4+ICsJaW50IGZkOwo+Pj4gKwl1bnNpZ25lZCBpbnQgbmVuZ2luZSA9IDA7Cj4+PiAr CXVuc2lnbmVkIGludCBlbmdpbmU7Cj4+PiArCXVuc2lnbmVkIGludCBlbmdpbmVzWzE2XTsKPj4+ ICsKPj4+ICsJaWd0X3NraXBfb25fc2ltdWxhdGlvbigpOwo+Pj4gKwo+Pj4gKwlpZ3RfZml4dHVy ZSB7Cj4+PiArCQlmZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfSU5URUwpOwo+Pj4gKwkJaWd0 X3JlcXVpcmVfZ2VtKGZkKTsKPj4+ICsKPj4+ICsJCWZvcl9lYWNoX3BoeXNpY2FsX2VuZ2luZShm ZCwgZW5naW5lKQo+Pj4gKwkJCWVuZ2luZXNbbmVuZ2luZSsrXSA9IGVuZ2luZTsKPj4+ICsJCWln dF9yZXF1aXJlKG5lbmdpbmUpOwo+Pgo+PiBJIHRoaW5rIHRoaXMgdGVzdCBzaG91bGQgcnVuIHdp dGggdGhlIGhhbmcgZGV0ZWN0b3IgYWx3YXlzIG9uLgo+IAo+IE9rLCBsZXQgbWUgcGluZyB5b3Ug b24gdGhpcyBiZWNhdXNlIEkgZG9uJ3QgdW5kZXJzdGFuZCBmdWxseSB0aGUgaGFuZwo+IGRldGVj dG9yIG1lY2hhbmlzbS4uLgoKU3VyZSwganVzdCB0byBiZSBjbGVhciBJJ20gdGFsa2luZyBvZiBo YW5nX2RldGVjdG9yX3Byb2Nlc3MoKSB3aGljaCBjYW4gCmJlIHN0YXJ0ZWQgYnkgY2FsbGluZyBp Z3RfZm9ya19oYW5nX2RldGVjdG9yKCkuCgpBbnRvbmlvCgo+IAo+Pgo+Pj4gKwl9Cj4+PiArCj4+ PiArCWlndF9zdWJ0ZXN0X2dyb3VwIHsKPj4KPj4gSSB0aGluayB3ZSBhcmUgbWlzc2luZyBhIHRl c3Qgd2hlcmUgd2Ugc2V0IG1vcmUgdGhhbiBvbmUgZW5naW5lJ3MKPj4gdGhyZXNob2xkIGFuZCBj aGVjayB0aGF0IHRoZSB3YXRoY2RvZyBvbmx5IGFwcGxpZXMgdG8gdGhlIGVuZ2luZSBpdAo+PiBn b3QKPj4gc2V0IGZvci4gVGhlcmUgaXMgYWxzbyBhIGxvdyBoYW5naW5nIGZydWl0IGZvciBpbnZh bGlkIHBhcmFtZXRlcnMKPj4gaW50bwo+PiB0aGUgSU9DVEwuCj4gCj4gT2ssIEkndmUgdGVzdGVk IHRoZSBmaXJzdCBjYXNlIGFscmVhZHksIEkgY2FuIGFkZCBpdCwgYW5kIEkgY2FuIGFkZAo+IGNh c2UgMiBhcyB3ZWxsLgo+IAo+IFJlZ2FyZHMsCj4gQ2FybG9zCj4gCj4+Cj4+IEFudG9uaW8KPj4K Pj4+ICsJCWlndF9zdWJ0ZXN0X2YoIm5vLWdwdS13YXRjaGRvZy1sb25nLWJhdGNoLWFsbC1lbmdp bmVzLQo+Pj4gbm8tcHJpb3JpdHkiKSB7Cj4+PiArCQkJaW50IHByaW8gPSAtMTsKPj4+ICsJCQlu b19ncHVfaGFuZ19sb25nX2JhdGNoX2FsbF9lbmdpbmVzKGZkLCBuZW5naW5lLAo+Pj4gcHJpbyk7 Cj4+PiArCQl9Cj4+PiArCj4+PiArCQlpZ3Rfc3VidGVzdF9mKCJuby1ncHUtd2F0Y2hkb2ctbG9u Zy1iYXRjaC1hbGwtZW5naW5lcy0KPj4+IGxvdy1wcmlvcml0eSIpIHsKPj4+ICsJCQlpbnQgcHJp byA9IExPVzsKPj4+ICsJCQlub19ncHVfaGFuZ19sb25nX2JhdGNoX2FsbF9lbmdpbmVzKGZkLCBu ZW5naW5lLAo+Pj4gcHJpbyk7Cj4+PiArCQl9Cj4+PiArCj4+PiArCQlpZ3Rfc3VidGVzdF9mKCJu by1ncHUtd2F0Y2hkb2ctbG9uZy1iYXRjaC1hbGwtZW5naW5lcy0KPj4+IGhpZ2gtcHJpb3JpdHki KSB7Cj4+PiArCQkJaW50IHByaW8gPSBISUdIOwo+Pj4gKwkJCW5vX2dwdV9oYW5nX2xvbmdfYmF0 Y2hfYWxsX2VuZ2luZXMoZmQsIG5lbmdpbmUsCj4+PiBwcmlvKTsKPj4+ICsJCX0KPj4+ICsKPj4+ ICsJCWZvciAoY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUgKmUgPQo+Pj4gaW50 ZWxfZXhlY3V0aW9uX2VuZ2luZXM7IGUtPm5hbWU7IGUrKykgewo+Pj4gKwkJCS8qIG5vIHN1cHBv cnQgZm9yIGdwdSB3YXRjaGRvZyBvbiBCTFQgKi8KPj4+ICsJCQlpZiAoZS0+ZXhlY19pZCA9PSAw IHx8IGUtPmV4ZWNfaWQgPT0KPj4+IEk5MTVfRVhFQ19CTFQpCj4+PiArCQkJCWNvbnRpbnVlOwo+ Pj4gKwo+Pj4gKwkJCWlndF9zdWJ0ZXN0X2YoImdwdS13YXRjaGRvZy1sb25nLWJhdGNoLSVzIiwg ZS0KPj4+PiBuYW1lKSB7Cj4+PiArCQkJCWlndF9yZXF1aXJlKGdlbV9yaW5nX2hhc19waHlzaWNh bF9lbmdpbgo+Pj4gZShmZCwgZS0+ZXhlY19pZCB8IGUtPmZsYWdzKSk7Cj4+PiArCQkJCWdwdV93 YXRjaG9kZ19oYW5nX2xvbmdfYmF0Y2hfc2luZ2xlX2VuZwo+Pj4gaW5lKGZkLCBlLT5leGVjX2lk IHwgZS0+ZmxhZ3MsIG5lbmdpbmUpOwo+Pj4gKwkJCX0KPj4+ICsJCX0KPj4+ICsKPj4+ICsJCWln dF9zdWJ0ZXN0X2YoImdwdS13YXRjaGRvZy1sb25nLWJhdGNoLTItY29udGV4dHMiKSB7Cj4+PiAr CQkJZ3B1X3dhdGNoZG9nX2xvbmdfYmF0Y2hfMl9jb250ZXh0cyhmZCk7Cj4+PiArCQl9Cj4+PiAr ICAgIH0KPj4+ICsKPj4+ICsgICAgaWd0X2ZpeHR1cmUgewo+Pj4gKwljbG9zZShmZCk7Cj4+PiAr ICAgIH0KPj4+ICt9Cj4+PiBkaWZmIC0tZ2l0IGEvdGVzdHMvbWVzb24uYnVpbGQgYi90ZXN0cy9t ZXNvbi5idWlsZAo+Pj4gaW5kZXggNTE2N2E2Yy4uYjI4MWI3NSAxMDA2NDQKPj4+IC0tLSBhL3Rl c3RzL21lc29uLmJ1aWxkCj4+PiArKysgYi90ZXN0cy9tZXNvbi5idWlsZAo+Pj4gQEAgLTIxMCw2 ICsyMTAsNyBAQCBpOTE1X3Byb2dzID0gWwo+Pj4gICAgCSdnZW1fdW5yZWZfYWN0aXZlX2J1ZmZl cnMnLAo+Pj4gICAgCSdnZW1fdXNlcnB0cl9ibGl0cycsCj4+PiAgICAJJ2dlbV93YWl0JywKPj4+ ICsgICAgICAgICdnZW1fd2F0Y2hkb2cnLAo+Pj4gICAgCSdnZW1fd29ya2Fyb3VuZHMnLAo+Pj4g ICAgCSdnZW1fd3JpdGVfcmVhZF9yaW5nX3N3aXRjaCcsCj4+PiAgICAJJ2k5MTVfZmJfdGlsaW5n JywKPj4+Cj4gCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldg==