From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1076289126 for ; Tue, 23 Apr 2019 00:05:27 +0000 (UTC) Message-ID: From: Carlos Santa Date: Mon, 22 Apr 2019 17:04:40 -0700 In-Reply-To: <8529680f-c95b-08db-4526-2c2eae34a14d@intel.com> References: <20190418165337.23438-1-carlos.santa@intel.com> <8529680f-c95b-08db-4526-2c2eae34a14d@intel.com> Mime-Version: 1.0 Subject: Re: [igt-dev] [RFC v2] tests/gem_watchdog: Initial set of tests for GPU watchdog List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Antonio Argenziano , igt-dev@lists.freedesktop.org Cc: Ursulin Tvrtko List-ID: T24gRnJpLCAyMDE5LTA0LTE5IGF0IDE0OjI5IC0wNzAwLCBBbnRvbmlvIEFyZ2Vuemlhbm8gd3Jv dGU6Cj4gCj4gT24gMTgvMDQvMTkgMDk6NTMsIENhcmxvcyBTYW50YSB3cm90ZToKPiA+IFRoaXMg dGVzdCBhZGRzIGJhc2ljIHNldCBvZiB0ZXN0cyB0byByZXNldCB0aGUgZGlmZmVyZW50Cj4gPiBH UFUgZW5naW5lcyB0aHJvdWdoIHRoZSBncHUgd2F0Y2hkb2cgdGltZXIuCj4gPiAKPiA+IENyZWRp dHMgdG8gQW50b25pbyBmb3IgdGhlIG9yaWdpbmFsIGNvZGViYXNlIHRoaXMgaXMgYmFzZWQgb24u Cj4gPiAKPiA+IHYyOiByZW1vdmUgZ2VtX2NvbnRleHRfZ2V0X3BhcmFtKCkgZHVyaW5nIHNldCAo QW50b25pbykKPiA+ICAgICAgcmVtb3ZlIGNsZWFyaW5nIG9mIHRoZSBlbmdpbmVzX3RocmVzaG9s ZFtdIGluIHRoZSBkZWZhdWx0IGNhc2UKPiA+ICAgICAgaW5zaWRlIGNvbnRleHRfc2V0X3dhdGNo ZG9nKCkuIChBbnRvbmlvKQo+ID4gICAgICBmaXggaW5kZXhpbmcgd2hlbiBjcmVhdGluZyBsb3cv aGlnaCBwcmlvcml0eSBjb250ZXh0cwo+ID4gICAgICBnZXQgcmlkIG9mIDIgdGhyZWFkcyBpZGVh IChBbnRvbmlvKQo+ID4gICAgICBmaXggY29udGV4dCBwcmlvIGJ1ZyBkdWUgdG8gd3JvbmcgaW5k ZXhpbmcgKEFudG9uaW8pCj4gPiAKPiA+IENjOiBVcnN1bGluIFR2cnRrbyA8dHZydGtvLnVyc3Vs aW5AaW50ZWwuY29tPgo+ID4gQ2M6IEFudG9uaW8gQXJnZW56aWFubyA8YW50b25pby5hcmdlbnpp YW5vQGludGVsLmNvbT4KPiA+IENjOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5j by51az4KPiA+IFNpZ25lZC1vZmYtYnk6IENhcmxvcyBTYW50YSA8Y2FybG9zLnNhbnRhQGludGVs LmNvbT4KPiA+IC0tLQo+ID4gICB0ZXN0cy9NYWtlZmlsZS5zb3VyY2VzICAgIHwgICAzICsKPiA+ ICAgdGVzdHMvaTkxNS9nZW1fd2F0Y2hkb2cuYyB8IDM2Ngo+ID4gKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ID4gICB0ZXN0cy9tZXNvbi5idWlsZCAgICAg ICAgIHwgICAxICsKPiA+ICAgMyBmaWxlcyBjaGFuZ2VkLCAzNzAgaW5zZXJ0aW9ucygrKQo+ID4g ICBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvaTkxNS9nZW1fd2F0Y2hkb2cuYwo+ID4gCj4gPiBk aWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJj ZXMKPiA+IGluZGV4IDIxNDY5OGQuLjdmMTdmMjAgMTAwNjQ0Cj4gPiAtLS0gYS90ZXN0cy9NYWtl ZmlsZS5zb3VyY2VzCj4gPiArKysgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4gPiBAQCAtNDQ0 LDYgKzQ0NCw5IEBAIGdlbV91c2VycHRyX2JsaXRzX1NPVVJDRVMgPQo+ID4gaTkxNS9nZW1fdXNl cnB0cl9ibGl0cy5jCj4gPiAgIFRFU1RTX3Byb2dzICs9IGdlbV93YWl0Cj4gPiAgIGdlbV93YWl0 X1NPVVJDRVMgPSBpOTE1L2dlbV93YWl0LmMKPiA+ICAgCj4gPiArVEVTVFNfcHJvZ3MgKz0gZ2Vt X3dhdGNoZG9nCj4gPiArZ2VtX3dhdGNoZG9nX1NPVVJDRVMgPSBpOTE1L2dlbV93YXRjaGRvZy5j Cj4gPiArCj4gPiAgIFRFU1RTX3Byb2dzICs9IGdlbV93b3JrYXJvdW5kcwo+ID4gICBnZW1fd29y a2Fyb3VuZHNfU09VUkNFUyA9IGk5MTUvZ2VtX3dvcmthcm91bmRzLmMKPiA+ICAgCj4gPiBkaWZm IC0tZ2l0IGEvdGVzdHMvaTkxNS9nZW1fd2F0Y2hkb2cuYyBiL3Rlc3RzL2k5MTUvZ2VtX3dhdGNo ZG9nLmMKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwLi5lNmMxYWJl Cj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi90ZXN0cy9pOTE1L2dlbV93YXRjaGRvZy5jCj4g PiBAQCAtMCwwICsxLDM2NiBAQAo+ID4gKy8qCj4gPiArICogQ29weXJpZ2h0IMKpIDIwMTYgSW50 ZWwgQ29ycG9yYXRpb24KPiA+ICsgKgo+ID4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50 ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCj4gPiBvYnRhaW5pbmcgYQo+ID4gKyAq IGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVz ICh0aGUKPiA+ICJTb2Z0d2FyZSIpLAo+ID4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdp dGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0Cj4gPiBsaW1pdGF0aW9uCj4gPiAr ICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3Ry aWJ1dGUsCj4gPiBzdWJsaWNlbnNlLAo+ID4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUg U29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0bwo+ID4gd2hvbSB0aGUKPiA+ICsgKiBT b2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZwo+ ID4gY29uZGl0aW9uczoKPiA+ICsgKgo+ID4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlCj4gPiAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gPiAr ICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50 aWFsCj4gPiBwb3J0aW9ucyBvZiB0aGUKPiA+ICsgKiBTb2Z0d2FyZS4KPiA+ICsgKgo+ID4gKyAq IFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFO WSBLSU5ELAo+ID4gRVhQUkVTUyBPUgo+ID4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9U IExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKPiA+IE1FUkNIQU5UQUJJTElUWSwKPiA+ICsg KiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAg SU4gTk8KPiA+IEVWRU5UIFNIQUxMCj4gPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhP TERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCj4gPiBEQU1BR0VTIE9SIE9USEVSCj4gPiAr ICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBP VEhFUldJU0UsCj4gPiBBUklTSU5HCj4gPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJ T04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgo+ID4gT1RIRVIgREVBTElOR1MKPiA+ ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4gPiArICovCj4gPiArI2luY2x1ZGUgImlndC5oIgo+ID4g KyNpbmNsdWRlICJpZ3Rfc3lzZnMuaCIKPiA+ICsjaW5jbHVkZSAic3dfc3luYy5oIgo+ID4gKwo+ ID4gKyNpbmNsdWRlIDxwdGhyZWFkLmg+Cj4gPiArI2luY2x1ZGUgPGZjbnRsLmg+Cj4gPiArCj4g PiArI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgo+ID4gKyNpbmNsdWRlIDxzeXMvcG9sbC5oPgo+ID4g KyNpbmNsdWRlIDxzeXMvc2lnbmFsLmg+Cj4gPiArI2luY2x1ZGUgImk5MTUvZ2VtX3JpbmcuaCIK PiA+ICsKPiA+ICsjZGVmaW5lIExPQ0FMX0k5MTVfRVhFQ19CU0RfU0hJRlQJKDEzKQo+ID4gKyNk ZWZpbmUgTE9DQUxfSTkxNV9FWEVDX0JTRF9SSU5HMSAJKDEgPDwKPiA+IExPQ0FMX0k5MTVfRVhF Q19CU0RfU0hJRlQpCj4gPiArI2RlZmluZSBMT0NBTF9JOTE1X0VYRUNfQlNEX1JJTkcyIAkoMiA8 PAo+ID4gTE9DQUxfSTkxNV9FWEVDX0JTRF9TSElGVCkKPiA+ICsKPiA+ICsjZGVmaW5lIE1BWF9Q UklPIExPQ0FMX0k5MTVfQ09OVEVYVF9NQVhfVVNFUl9QUklPUklUWQo+ID4gKyNkZWZpbmUgTUlO X1BSSU8gTE9DQUxfSTkxNV9DT05URVhUX01JTl9VU0VSX1BSSU9SSVRZCj4gPiArI2RlZmluZSBI SUdIIDEKPiA+ICsjZGVmaW5lIExPVyAwCj4gPiArI2RlZmluZSBXQVRDSERPR19USFJFU0hPTEQg KDEwMCkKPiA+ICsjZGVmaW5lIE1BWF9FTkdJTkVTIDUKPiA+ICsjZGVmaW5lIFJFTkRFUl9DTEFT UyAwCj4gPiArI2RlZmluZSBWSURFT19ERUNPREVfQ0xBU1MgMQo+ID4gKyNkZWZpbmUgVklERU9f RU5IQU5DRU1FTlRfQ0xBU1MgMgo+ID4gKyNkZWZpbmUgQ09QWV9FTkdJTkVfQ0xBU1MgMwo+ID4g KyNkZWZpbmUgTE9DQUxfSTkxNV9DT05URVhUX1BBUkFNX1dBVENIRE9HIDB4MTAKPiA+ICsKPiA+ ICtjb25zdCB1aW50NjRfdCB0aW1lb3V0XzEwMG1zID0gMTAwMDAwMDAwTEw7Cj4gPiAraW50IG51 bTsKPiA+ICsKPiA+ICtzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3dhdGNoZG9nX3RpbWVvdXQgewo+ID4g Kwl1bmlvbiB7Cj4gPiArCQlzdHJ1Y3Qgewo+ID4gKwkJCS8qCj4gPiArCQkJICogRW5naW5lIGNs YXNzICYgaW5zdGFuY2UgdG8gYmUgY29uZmlndXJlZCBvcgo+ID4gcXVlcmllZC4KPiA+ICsJCQkg Ki8KPiA+ICsJCQlfX3UxNiBlbmdpbmVfY2xhc3M7Cj4gPiArCQkJX191MTYgZW5naW5lX2luc3Rh bmNlOwo+ID4gKwkJfTsKPiA+ICsJCS8qIEluZGV4IGJhc2VkIGFkZHJlc3NpbmcgbW9kZSAqLwo+ ID4gKwkJX191MzIgaW5kZXg7Cj4gPiArCX07Cj4gPiArCS8qIEdQVSBFbmdpbmUgd2F0Y2hkb2cg cmVzZXRzIHRpbWVvdXQgaW4gdXMgKi8KPiA+ICsJX191MzIgdGltZW91dF91czsKPiA+ICt9Owo+ ID4gKwo+ID4gK3N0YXRpYyB2b2lkIGNsZWFyX2Vycm9yX3N0YXRlKGludCBmZCkKPiA+ICt7Cj4g PiArCWludCBkaXI7Cj4gPiArCj4gPiArCWRpciA9IGlndF9zeXNmc19vcGVuKGZkKTsKPiA+ICsK PiA+ICsJaWYgKGRpciA8IDApCj4gPiArCQlyZXR1cm47Cj4gPiArCj4gPiArCS8qIEFueSB3cml0 ZSB0byB0aGUgZXJyb3Igc3RhdGUgY2xlYXJzIGl0ICovCj4gPiArCWlndF9zeXNmc19zZXQoZGly LCAiZXJyb3IiLCAiIik7Cj4gPiArCWNsb3NlKGRpcik7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRp YyB2b2lkIGNvbnRleHRfc2V0X3dhdGNoZG9nKGludCBmZCwgaW50IGVuZ2luZV9pZCwKPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjdHhfaWQsIHVuc2lnbmVk Cj4gPiB0aHJlc2hvbGQpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3dhdGNoZG9n X3RpbWVvdXQKPiA+IGVuZ2luZXNfdGhyZXNob2xkW01BWF9FTkdJTkVTXTsKPiA+ICsJc3RydWN0 IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIGFyZyA9IHsKPiA+ICsJCS5wYXJhbSA9IExPQ0FM X0k5MTVfQ09OVEVYVF9QQVJBTV9XQVRDSERPRywKPiA+ICsJCS5jdHhfaWQgPSBjdHhfaWQsCj4g PiArCQkuc2l6ZSA9IHNpemVvZihlbmdpbmVzX3RocmVzaG9sZCksCj4gPiArCQkudmFsdWUgPSAo dWludDY0X3QpJmVuZ2luZXNfdGhyZXNob2xkCj4gPiArCX07Cj4gPiArCj4gPiArCW1lbXNldCgm ZW5naW5lc190aHJlc2hvbGQsIDAsIHNpemVvZihlbmdpbmVzX3RocmVzaG9sZCkpOwo+ID4gKwo+ ID4gKwlzd2l0Y2ggKGVuZ2luZV9pZCAmIEk5MTVfRVhFQ19SSU5HX01BU0spIHsKPiA+ICsJY2Fz ZSBJOTE1X0VYRUNfUkVOREVSOgo+ID4gKwkJZW5naW5lc190aHJlc2hvbGRbUkVOREVSX0NMQVNT XS50aW1lb3V0X3VzID0gdGhyZXNob2xkOwo+ID4gKwkJZW5naW5lc190aHJlc2hvbGRbVklERU9f REVDT0RFX0NMQVNTXS50aW1lb3V0X3VzID0gMDsKPiA+ICsJCWVuZ2luZXNfdGhyZXNob2xkW1ZJ REVPX0VOSEFOQ0VNRU5UX0NMQVNTXS50aW1lb3V0X3VzID0KPiA+IDA7Cj4gCj4gbml0OiBzdHJ1 Y3QgYWxyZWFkeSBpbml0aWFsaXplZCB0byAwLCBubyBuZWVkIHRvIGV4cGxpY2l0bHkgemVybyBp dHMgCj4gZWxlbWVudHMuCgpBZ3JlZS4KCj4gCj4gPiArCQlicmVhazsKPiA+ICsJY2FzZSBJOTE1 X0VYRUNfQlNEOgo+ID4gKwkJZW5naW5lc190aHJlc2hvbGRbUkVOREVSX0NMQVNTXS50aW1lb3V0 X3VzID0gMDsKPiA+ICsJCWVuZ2luZXNfdGhyZXNob2xkW1ZJREVPX0RFQ09ERV9DTEFTU10udGlt ZW91dF91cyA9Cj4gPiB0aHJlc2hvbGQ7Cj4gPiArCQllbmdpbmVzX3RocmVzaG9sZFtWSURFT19F TkhBTkNFTUVOVF9DTEFTU10udGltZW91dF91cyA9Cj4gPiAwOwo+ID4gKwkJYnJlYWs7Cj4gPiAr CWNhc2UgSTkxNV9FWEVDX1ZFQk9YOgo+ID4gKwkJZW5naW5lc190aHJlc2hvbGRbUkVOREVSX0NM QVNTXS50aW1lb3V0X3VzID0gMDsKPiA+ICsJCWVuZ2luZXNfdGhyZXNob2xkW1ZJREVPX0RFQ09E RV9DTEFTU10udGltZW91dF91cyA9IDA7Cj4gPiArCQllbmdpbmVzX3RocmVzaG9sZFtWSURFT19F TkhBTkNFTUVOVF9DTEFTU10udGltZW91dF91cyA9Cj4gPiB0aHJlc2hvbGQ7Cj4gPiArCQlicmVh azsKPiA+ICsJZGVmYXVsdDoKPiA+ICsJCWJyZWFrOwo+ID4gKwl9Cj4gPiArCj4gPiArCWdlbV9j b250ZXh0X3NldF9wYXJhbShmZCwgJmFyZyk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lk IGJhdGNoX2J1ZmZlcl9mYWN0b3J5KHVpbnQzMl90IGZkLCB1aW50MzJfdCBjdHhfaWQsCj4gPiB1 bnNpZ25lZCBleGVjX2lkLCB1aW50MzJfdCB0YXJnZXQsIHVpbnQzMl90IG9mZnNldCwgdWludDMy X3QKPiA+ICpoYW5kbGUsIHVpbnQ2NF90IHRpbWVvdXQsIGludCAqZmVuY2UsIGludCBmZW5jZV9p bmRleCkKPiA+ICt7Cj4gPiArICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9i alsyXTsKPiA+ICsgICAgc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IHJlbG9j Owo+ID4gKyAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7Cj4gPiAr ICAgIGlndF9zcGluX3QgKnNwaW4gPSBOVUxMOwo+ID4gKyAgICBjb25zdCB1aW50MzJfdCBiYmUg PSBNSV9CQVRDSF9CVUZGRVJfRU5EOwo+ID4gKyAgICBpbnQgaSA9IDA7Cj4gPiArCj4gPiArICAg IGdlbV9xdWllc2NlbnRfZ3B1KGZkKTsKPiA+ICsKPiA+ICsgICAgbWVtc2V0KCZleGVjYnVmLCAw LCBzaXplb2YoZXhlY2J1ZikpOwo+ID4gKyAgICBtZW1zZXQoJm9iaiwgMCwgc2l6ZW9mKG9iaikp Owo+ID4gKyAgICBtZW1zZXQoJnJlbG9jLCAwLCBzaXplb2YocmVsb2MpKTsKPiA+ICsKPiA+ICsg ICAgZXhlY2J1Zi5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcihvYmopOwo+ID4gKwo+ID4g KyAgICBleGVjYnVmLmJ1ZmZlcl9jb3VudCA9IDI7Cj4gPiArICAgIGV4ZWNidWYuZmxhZ3MgPSBl eGVjX2lkIHwgSTkxNV9FWEVDX0ZFTkNFX09VVCA7Cj4gPiArCj4gPiArICAgIG9ialswXS5oYW5k bGUgPSB0YXJnZXQ7Cj4gPiArICAgIG9ialsxXS5oYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCA0MDk2 KTsKPiA+ICsKPiA+ICsgICAgb2JqWzFdLnJlbG9jYXRpb25fY291bnQgPSAxOwo+ID4gKyAgICBv YmpbMV0ucmVsb2NzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcigmcmVsb2MpOwo+ID4gKwo+ID4gKyAg ICByZWxvYy50YXJnZXRfaGFuZGxlID0gb2JqWzBdLmhhbmRsZTsKPiA+ICsgICAgcmVsb2MucmVh ZF9kb21haW5zID0gSTkxNV9HRU1fRE9NQUlOX0NPTU1BTkQ7Cj4gPiArICAgIHJlbG9jLndyaXRl X2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9DT01NQU5EOwo+ID4gKyAgICByZWxvYy5kZWx0YSA9 IG9mZnNldCAqIHNpemVvZih1aW50MzJfdCk7Cj4gPiArCj4gPiArICAgIHJlbG9jLm9mZnNldCA9 IGkgKiBzaXplb2YodWludDMyX3QpOwo+ID4gKyAgICBnZW1fd3JpdGUoZmQsIG9ialsxXS5oYW5k bGUsIDAsICZiYmUsIHNpemVvZihiYmUpKTsKPiA+ICsKPiA+ICsgICAgX19zeW5jX3N5bmNocm9u aXplKCk7Cj4gPiArCj4gPiArICAgIGlmIChoYW5kbGUpIHsKPiA+ICsgICAgICAgICpoYW5kbGUg PSBvYmpbMV0uaGFuZGxlOwo+ID4gKyAgICAgICAgcmV0dXJuOwo+ID4gKyAgICB9Cj4gPiArCj4g PiArICAgIGdlbV9zeW5jKGZkLCBvYmpbMV0uaGFuZGxlKTsKPiA+ICsgICAgZXhlY2J1Zi5yc3Zk MSA9IGN0eF9pZDsKPiA+ICsgICAgZXhlY2J1Zi5yc3ZkMiA9IC0xOwo+ID4gKwo+ID4gKyAgICBz cGluID0gaWd0X3NwaW5fYmF0Y2hfbmV3KGZkLCAuZGVwZW5kZW5jeSA9IG9ialswXS5oYW5kbGUp Owo+ID4gKyAgICBpZ3Rfc3Bpbl9iYXRjaF9zZXRfdGltZW91dChzcGluLCB0aW1lb3V0KTsKPiA+ ICsgICAgaWd0X2Fzc2VydChnZW1fYm9fYnVzeShmZCwgb2JqWzBdLmhhbmRsZSkpOwo+ID4gKwo+ ID4gKyAgICBnZW1fZXhlY2J1Zl93cihmZCwgJmV4ZWNidWYpOwo+ID4gKyAgICBpZ3Rfc3Bpbl9i YXRjaF9mcmVlKGZkLCBzcGluKTsKPiA+ICsKPiA+ICsgICAgZmVuY2VbZmVuY2VfaW5kZXhdID0g ZXhlY2J1Zi5yc3ZkMiA+PiAzMjsKPiA+ICsKPiA+ICsgICAgZ2VtX2Nsb3NlKGZkLCBvYmpbMV0u aGFuZGxlKTsKPiA+ICsgICAgZ2VtX3F1aWVzY2VudF9ncHUoZmQpOwo+ID4gK30KPiA+ICsKPiA+ ICtzdGF0aWMgdWludDMyX3QgY3JlYXRlX2N0eF93aXRoX3ByaW9yaXR5KGludCBmZCwgaW50IGN0 eF9wcmlvKQo+ID4gK3sKPiA+ICsJdWludDMyX3QgY3R4ID0gZ2VtX2NvbnRleHRfY3JlYXRlKGZk KTsKPiA+ICsKPiA+ICsJc3dpdGNoIChjdHhfcHJpbykgewo+ID4gKwljYXNlIEhJR0g6Cj4gPiAr CQlfX2dlbV9jb250ZXh0X3NldF9wcmlvcml0eShmZCwgY3R4LCBNQVhfUFJJTyk7Cj4gCj4gVGhp cyBoZWxwZXIgcmV0dXJucyBhbiBlcnJvciBjb2RlLCBuZWVkIHRvIGNoZWNrIGl0IG9yIHVzZSAK PiBnZW1fY29udGV4dF9zZXRfcHJpb3JpdHkoKSB3aGljaCB3aWxsIGFzc2VydCBpZiB0aGUgSU9D VEwgZmFpbHMuCgpBZ3JlZS4KIAo+IAo+ID4gKwkJaWd0X2luZm8oIlNldHRpbmcgTUFYIHByaW9y aXR5ICVkXG4iLCBjdHhfcHJpbyk7Cj4gPiArCQlicmVhazsKPiA+ICsJY2FzZSBMT1c6Cj4gPiAr CQlfX2dlbV9jb250ZXh0X3NldF9wcmlvcml0eShmZCwgY3R4LCBNSU5fUFJJTyk7Cj4gPiArCQlp Z3RfaW5mbygiU2V0dGluZyBNSU4gcHJpb3JpdHkgJWRcbiIsIGN0eF9wcmlvKTsKPiA+ICsJCWJy ZWFrOwo+ID4gKwlkZWZhdWx0Ogo+ID4gKwkJaWd0X2luZm8oIklnbm9yaW5nIGNvbnRleHQgcHJp b3JpdHkgJWRcbiIsIGN0eF9wcmlvKTsKPiA+ICsJCWJyZWFrOwo+ID4gKwl9Cj4gPiArCXByaW50 ZigiY3R4IGlkOiAldVxuIixjdHgpOwo+IAo+IFJlbWVtYmVyIHRvIGNoYW5nZSB0aGlzIHRvIGEg bG9nIG9uY2UgeW91IHNlbmQgdGhlIFBBVENIIHZlcnNpb24uCj4gCj4gPiArCXJldHVybiBjdHg7 Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIGluamVjdF9oYW5nKHVpbnQzMl90IGZkLCB1 bnNpZ25lZCByaW5nLCB1aW50MzJfdAo+ID4gY3R4X2lkLCAgdW5zaWduZWQgZmxhZ3MpCj4gPiAr ewo+ID4gKwlpZ3RfaGFuZ190IGhhbmc7Cj4gPiArCWhhbmcgPSBpZ3RfaGFuZ19jdHgoZmQsIGN0 eF9pZCwgcmluZywgZmxhZ3MpOwo+ID4gKwlnZW1fc3luYyhmZCwgaGFuZy5zcGluLT5oYW5kbGUp Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBncHVfd2F0Y2hkb2dfbG9uZ19iYXRjaF8y X2NvbnRleHRzKGludCBmZCwgaW50Cj4gPiBuZW5naW5lLCBpbnQgcHJpb19jdHgxLCBpbnQgcHJp b19jdHgyKQo+ID4gK3sKPiA+ICsJdWludDMyX3QgY3R4WzJdOwo+ID4gKwl1aW50MzJfdCBzY3Jh dGNoWzJdOwo+ID4gKwl1bnNpZ25lZCBmbGFncyA9IEhBTkdfQUxMT1dfQ0FQVFVSRTsKPiA+ICsJ Y29uc3QgdWludDY0X3QgYmF0Y2hfdGltZW91dF9tcyA9IHRpbWVvdXRfMTAwbXMgKiAzOwo+ID4g KwlpbnQgaSA9IDAsIGVuZ2luZV9pZDsKPiA+ICsJaW50ICpmZW5jZSA9IDA7Cj4gPiArCj4gPiAr CWlndF9yZXF1aXJlKG5lbmdpbmUpOwo+ID4gKwo+ID4gKwlmZW5jZSA9IChpbnQgKiltYWxsb2Mo c2l6ZW9mKGludCkqMik7Cj4gPiArCj4gPiArCWlmICghZmVuY2UpIHsKPiA+ICsJCWlndF9pbmZv KCJPdXQgb2YgbWVtb3J5XG4iKTsKPiA+ICsJCWV4aXQoMSk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJ Zm9yIChpID0gMDsgaSA8IDI7IGkrKykgewo+ID4gKwkJc2NyYXRjaFtpXSA9IGdlbV9jcmVhdGUo ZmQsIDQwOTYpOwo+ID4gKwl9Cj4gPiArCj4gPiArCS8qIENyZWF0ZSBzb21lIHdvcmsgb24gUkNT MCAqLwo+ID4gKwllbmdpbmVfaWQgPSAxOwo+IAo+IE5vdCB0aGF0IG1hbnkgY29tYmluYXRpb25z IEkgdGhpbmsgd2UgY2FuIGl0ZXJhdGUgb3ZlciBhbGwgZW5naW5lcyBpbgo+IGEgCj4gcmVhc29u YWJsZSB0aW1lLgoKT2ssIG5vdyBpdCdzIGEgbG9vcGVyIGluIHZlcnNpb24gIzMuCgo+IAo+ID4g KwljdHhbMF0gPSBjcmVhdGVfY3R4X3dpdGhfcHJpb3JpdHkoZmQsIHByaW9fY3R4MSk7Cj4gPiAr CWJhdGNoX2J1ZmZlcl9mYWN0b3J5KGZkLCBjdHhbMF0sIGVuZ2luZV9pZCwgc2NyYXRjaFswXSwg MCwKPiA+IE5VTEwsIGJhdGNoX3RpbWVvdXRfbXMsIGZlbmNlLCAwKTsKPiAKPiBOb3RlIHRoYXQg dGhlIGV4ZWNidWYgdXNlZCBpbiBiYXRjaF9idWZmZXJfZmFjdG9yeSgpIGlzIG5vdCB0aGUgc2Ft ZSAKPiB1c2VkIGluIGluamVjdF9oYW5nKCkuCj4gCj4gPiArCj4gPiArCS8qIENhbmNlbCBiYXRj aCBvbiBSQ1MwIHcvIGdwdSB3YXRjaGRvZyB0aW1lb3V0ICovCj4gPiArCWlmKHByaW9fY3R4MSA8 IDAgJiYgcHJpb19jdHgyIDwgMCkgewo+ID4gKwkJY29udGV4dF9zZXRfd2F0Y2hkb2coZmQsIGVu Z2luZV9pZCwgY3R4WzBdLAo+ID4gV0FUQ0hET0dfVEhSRVNIT0xEKTsKPiA+ICsJCWNsZWFyX2Vy cm9yX3N0YXRlKGZkKTsKPiA+ICsJCWluamVjdF9oYW5nKGZkLCBlbmdpbmVfaWQsIGN0eFswXSwg ZmxhZ3MpOwo+ID4gKwl9Cj4gPiArCj4gPiArI2lmIDAKPiAKPiBJcyB0aGUgY29kZSB3cmFwcGVk IGluIGlmIDAgc3RhdGVtZW50cyBnb2luZyB0byBiZSBpbmNsdWRlZCBpbiB0aGUKPiBmaW5hbCAK PiBwYXRjaD8KPiAKPiA+ICsJLyogTm93IGNoZWNrIHRoZSBlbmdpbmUgd2FzIHJlc2V0IHN1Y2Nl c3NmdWxseSovCj4gPiArCWlndF9hc3NlcnRfZXEoc3luY19mZW5jZV9zdGF0dXMoKmZlbmNlKSwg LUVJTyk7ID4gKyNlbmRpZgo+ID4gKwljbG9zZShmZW5jZVswXSk7Cj4gCj4gbml0OiB5b3UgY2Fu IGNsb3NlIGFsbCBmZW5jZXMgYXQgdGhlIHZlcnkgZW5kIG9mIHRoZSB0ZXN0LgoKb2suCj4gCj4g PiArCj4gPiArCS8qIENyZWF0ZSBzb21lIHdvcmsgb24gVkVDUzAgKi8KPiA+ICsJZW5naW5lX2lk ID0gNDsKPiA+ICsJY3R4WzFdID0gY3JlYXRlX2N0eF93aXRoX3ByaW9yaXR5KGZkLCBwcmlvX2N0 eDIpOwo+ID4gKwliYXRjaF9idWZmZXJfZmFjdG9yeShmZCwgY3R4WzFdLCBlbmdpbmVfaWQsIHNj cmF0Y2hbMV0sIDAsCj4gPiBOVUxMLCBiYXRjaF90aW1lb3V0X21zLCBmZW5jZSwgMSk7Cj4gPiAr Cj4gPiArCS8qIENhbmNlbCBiYXRjaCBvbiBSQ1MwIHcvIGdwdSB3YXRjaGRvZyB0aW1lb3V0ICov Cj4gPiArCWNvbnRleHRfc2V0X3dhdGNoZG9nKGZkLCBlbmdpbmVfaWQsIGN0eFsxXSwKPiA+IFdB VENIRE9HX1RIUkVTSE9MRCk7Cj4gPiArCWNsZWFyX2Vycm9yX3N0YXRlKGZkKTsKPiA+ICsJaW5q ZWN0X2hhbmcoZmQsIGVuZ2luZV9pZCwgY3R4WzFdLCBmbGFncyk7Cj4gCj4gWW91IGRvbid0IHdh bnQgdG8gc3luYyBhZnRlciB0aGUgaGFuZyBpbiB0aGlzIHRlc3QgSSB0aGluay4gSXQgd291bGQK PiBiZSAKPiBiZXR0ZXIgdG8gc2VuZCBwbGVudHkgb2YgY29udGV4dHMgd2l0aCBkaWZmZXJlbnQg dGhyZXNob2xkcyBhbmQgaGF2ZSAKPiB0aGVtIGFjdGl2ZSBhdCB+IHRoZSBzYW1lIHRpbWUuCgpP aywgZGlkIHRoaXMgaW4gdGhlIHZlcnNpb24gIzMuCgo+IAo+ID4gKwo+ID4gKyNpZiAwCj4gPiAr CS8qIE5vdyBjaGVjayB0aGUgZW5naW5lIHdhcyByZXNldCBzdWNjZXNzZnVsbHkgKi8KPiA+ICsJ aWd0X2Fzc2VydF9lcShzeW5jX2ZlbmNlX3N0YXR1cygqZmVuY2UpLCAtRUlPKTsKPiA+ICsjZW5k aWYKPiA+ICsJY2xvc2UoZmVuY2VbMV0pOwo+ID4gKwo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgMjsg aSsrKSB7Cj4gPiArCQlnZW1fY29udGV4dF9kZXN0cm95KGZkLCBjdHhbaV0pOwo+ID4gKwkJZ2Vt X2Nsb3NlKGZkLCBzY3JhdGNoW2ldKTsKPiA+ICsJfQo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMg dm9pZCBncHVfd2F0Y2hvZGdfaGFuZ19sb25nX2JhdGNoX3NpbmdsZV9lbmdpbmUoaW50IGZkLAo+ ID4gdW5zaWduZWQgZW5naW5lX2lkLCBjb25zdCBjaGFyICpuYW1lKQo+IAo+IGVuZ2luZV9pZCBp cyB1bnVzZWQgaW4gdGhpcyBmdW5jdGlvbi4KPiAKPiA+ICt7Cj4gPiArCXVpbnQzMl90IGN0eFsx Nl07Cj4gPiArCXVpbnQzMl90IHNjcmF0Y2hbMTZdOwo+ID4gKwlpbnQgKmZlbmNlOwo+ID4gKwl1 bnNpZ25lZCBuZW5naW5lID0gMDsKPiA+ICsJdW5zaWduZWQgZW5naW5lOwo+ID4gKwo+ID4gKwlp bnQgaTsKPiA+ICsJdW5zaWduZWQgZmxhZ3MgPSBIQU5HX0FMTE9XX0NBUFRVUkU7Cj4gPiArCWNv bnN0IHVpbnQ2NF90IGJhdGNoX3RpbWVvdXRfbXMgPSB0aW1lb3V0XzEwMG1zKjQ7Cj4gPiArCj4g PiArCWZlbmNlID0gKGludCAqKW1hbGxvYyhzaXplb2YoaW50KSoxNik7Cj4gPiArCj4gPiArCWlm ICghZmVuY2UpIHsKPiA+ICsJCWlndF9pbmZvKCJPdXQgb2YgbWVtb3J5XG4iKTsKPiA+ICsJCWV4 aXQoMSk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJZm9yX2VhY2hfcGh5c2ljYWxfZW5naW5lKGZkLCBl bmdpbmUpIHsKPiAKPiBKdXN0IGEgc3VnZ2VzdGlvbjogeW91IGNvdWxkIHVzZSBmb3JfZWFjaF9l bmdpbmVfY2xhc3NfaW5zdGFuY2UoKQo+IGVuZCAKPiBza2lwIGJhc2VkIG9uIHRoZSBjbGFzcy4g VGhpcyBzaG91bGQgZml0IGluIGJldHRlciB3aXRoIHRoZSBuZXcKPiBlbmdpbmUgCj4gaW50ZXJm YWNlIEFuZGkgaXMgd29ya2luZyBvbi4KCk9rLCBkb25lIGluIHYzLgoKPiAKPiA+ICsJCS8qIG5v IHN1cHBvcnQgZm9yIGdwdSB3YXRjaGRvZyBvbiBCTFQgKi8KPiA+ICsJCWlmICggc3RybmNtcChl X18tPm5hbWUsICJibHQiLCAzKSA9PSAwICkKPiA+ICsJCQljb250aW51ZTsKPiA+ICsKPiA+ICsJ CXNjcmF0Y2hbbmVuZ2luZV0gPSBnZW1fY3JlYXRlKGZkLCA0MDk2KTsKPiA+ICsJCWN0eFtuZW5n aW5lXSA9IGNyZWF0ZV9jdHhfd2l0aF9wcmlvcml0eShmZCwgLTEpOwo+ID4gKwo+ID4gKwkJLyog Q3JlYXRlIHNvbWUgd29yayBvbiB0aGUgZW5naW5lIHVzaW5nIHRoZSBzYW1lIGN0eCovCj4gPiAr CQliYXRjaF9idWZmZXJfZmFjdG9yeShmZCwgY3R4W25lbmdpbmVdLCBlX18tPmV4ZWNfaWQsCj4g PiBzY3JhdGNoW25lbmdpbmVdLCAwLCBOVUxMLCBiYXRjaF90aW1lb3V0X21zLCBmZW5jZSwgbmVu Z2luZSk7Cj4gCj4gV2h5IGFyZSB3ZSBzZW5kaW5nIHdvcmsgYmVmb3JlIHNlbmRpbmcgdGhlIGhh bmdpbmcgYmF0Y2g/IEkgdGhpbmsgaXQgCj4gd291bGQgYmUgYmV0dGVyIG5vdCB0byBzZW5kIGFu eXRoaW5nIGRvd24gYW5kIG1heWJlIGhhdmUgYSBkaWZmZXJlbnQgCj4gdGVzdCB3aGVyZSB5b3U6 Cj4gCj4gCS0gU3VibWl0IHdvcmsgZnJvbSBjb250ZXh0IEEKPiAJLSBTZXQgYSBub24gMCB0aHJl c2hvbGQgb24gY29udGV4dCBBCj4gCS0gU3VibWl0IG1vcmUgd29yayBvbiBjb250ZXh0IEEKPiAK PiBBbmQgZXhwZWN0IHRoZSB3b3JrIGJlZm9yZSB5b3Ugc2V0IHRoZSB0aHJlc2hvbGQgaXMgbm90 IHJlc2V0IGFuZAo+IHdoYXQgCj4gd2FzIHNlbnQgYWZ0ZXIgaXMuCgpvaywgImluamVjdF9oYW5n KCkiIGlzIHRoZSBoYW5naW5nIGJhdGNoIGluIGl0c2VsZiBhbmQgc2VuZGluZyB0aGF0CmJlZm9y ZSBhbnkgYmF0Y2ggYnVmZmVyIHNpbXBseSBoYW5ncyB0aGUgZW5naW5lLi4uIFRoYXQncyB3aHks IEkKdXN1YWxseSBjcmVhdGUgc29tZSB3b3JrIGFuZCB0aGVuIHNlbmQgdGhlIGhhbmdpbmcgYmF0 Y2ggbGFzdC4KCkhhdmluZyBzYWlkIHRoYXQsIEkgdG9vayB5b3VyIHN1Z2dlc3Rpb24gZm9yIHRo ZSBuZXcgdGVzdCBvbiB2ZXJzaW9uIDMuCgo+IAo+ID4gKwo+ID4gKwkJLyogU2V0IHRoZSBncHUg d2F0Y2hkb2cgdGltZW91dCAqLwo+ID4gKwkJY29udGV4dF9zZXRfd2F0Y2hkb2coZmQsIGVfXy0+ ZXhlY19pZCwgY3R4W25lbmdpbmVdLAo+ID4gV0FUQ0hET0dfVEhSRVNIT0xEKTsKPiA+ICsJCWNs ZWFyX2Vycm9yX3N0YXRlKGZkKTsKPiA+ICsKPiA+ICsJCS8qIENhbmNlbCBvbmx5IHRoZSBiYXRj aCByZXF1ZXN0ZWQgKi8KPiA+ICsJCWlmICggc3RybmNtcChlX18tPm5hbWUsIG5hbWUsIDQpID09 IDAgKQo+ID4gKwkJCWluamVjdF9oYW5nKGZkLCBlX18tPmV4ZWNfaWQsIGN0eFtuZW5naW5lXSwK PiA+IGZsYWdzKTsKPiA+ICsjaWYgMAo+ID4gKwkJaWd0X2luZm8oImZlbmNlOiVkLCBmZW5jZSBz dGF0dXMgOiAlZCBFSU86ICVkCj4gPiBjdHhfaWQ6JWRcbiIsZmVuY2VbbmVuZ2luZV0sIHN5bmNf ZmVuY2Vfc3RhdHVzKGZlbmNlW25lbmdpbmVdKSwtCj4gPiBFSU8sIGN0eFtuZW5naW5lXSk7Cj4g PiArCQkvKiBOb3cgY2hlY2sgdGhlIGVuZ2luZSB3YXMgcmVzZXQgKi8KPiA+ICsJCWlndF9hc3Nl cnRfZXEoc3luY19mZW5jZV9zdGF0dXMoZmVuY2VbbmVuZ2luZV0pLCAtRUlPKTsKPiA+ICsjZW5k aWYKPiA+ICsJCW5lbmdpbmUrKzsKPiA+ICsJfQo+ID4gKwo+ID4gKwlmb3IgKGkgPSAwOyBpIDwg bmVuZ2luZTsgaSsrKSB7Cj4gPiArCQljbG9zZShmZW5jZVtpXSk7Cj4gPiArCQlnZW1fY29udGV4 dF9kZXN0cm95KGZkLCBjdHhbaV0pOwo+ID4gKwkJZ2VtX2Nsb3NlKGZkLCBzY3JhdGNoW2ldKTsK PiA+ICsJfQo+ID4gK30KPiA+ICsKPiA+ICtpZ3RfbWFpbgo+ID4gK3sKPiA+ICsJaW50IGZkOwo+ ID4gKwl1bnNpZ25lZCBpbnQgbmVuZ2luZSA9IDA7Cj4gPiArCXVuc2lnbmVkIGludCBlbmdpbmU7 Cj4gPiArCj4gPiArCWlndF9za2lwX29uX3NpbXVsYXRpb24oKTsKPiA+ICsKPiA+ICsJaWd0X2Zp eHR1cmUgewo+ID4gKwkJZmQgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKPiA+ICsJ CWlndF9yZXF1aXJlX2dlbShmZCk7Cj4gPiArCj4gPiArCQlmb3JfZWFjaF9waHlzaWNhbF9lbmdp bmUoZmQsIGVuZ2luZSkKPiA+ICsJCQluZW5naW5lKys7Cj4gPiArCQlpZ3RfcmVxdWlyZShuZW5n aW5lKTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlpZ3Rfc3VidGVzdF9ncm91cCB7Cj4gPiArCj4gPiAr CQlpZ3Rfc3VidGVzdF9mKCJsb3ctcHJpby1jdHgtd28tZ3B1LXdhdGNoZG9nLWFuZC1oaWdoLQo+ ID4gcHJpby1jdHgtd2l0aC1ncHUtd2F0Y2hkb2ciKSB7Cj4gPiArCQkJaW50IHByaW8xID0gTE9X Owo+ID4gKwkJCWludCBwcmlvMiA9IEhJR0g7Cj4gPiArCQkJZ3B1X3dhdGNoZG9nX2xvbmdfYmF0 Y2hfMl9jb250ZXh0cyhmZCwgbmVuZ2luZSwKPiA+IHByaW8xLCBwcmlvMik7Cj4gPiArCQl9Cj4g PiArCj4gPiArCQlmb3IgKGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lICplID0K PiA+IGludGVsX2V4ZWN1dGlvbl9lbmdpbmVzOyBlLT5uYW1lOyBlKyspIHsKPiAKPiBZb3UgYXJl IGxvb3Bpbmcgb24gZWFjaCBlbmdpbmUgaW5zaWRlIHRoZSB0ZXN0IGFzIHdlbGwuCgpZZXMsIHRo aXMgaXMgZG9uZSBvbiBwdXJwb3NlLCB0aGUgdGVzdCBjYW5jZWwgdGhlIGJhdGNoIGJhc2VkIG9u IHRoZQplbmdpbmUgcGlja2VkIGJ5IHRoZSB1c2VyIGFuZCB0aGVuIGl0IGNvbnRpbnVlcyBsb29w aW5nIHRocm91Z2ggYWxsIHRoZQpyZW1haW5pbmcgZW5naW5lcy4uLgoKUmVnYXJkcywKQ2FybG9z Cgo+IAo+IEFudG9uaW8KPiAKPiA+ICsJCQkvKiBubyBzdXBwb3J0IGZvciBncHUgd2F0Y2hkb2cg b24gQkxUICovCj4gPiArCQkJaWYgKGUtPmV4ZWNfaWQgPT0gMCB8fCBlLT5leGVjX2lkID09Cj4g PiBJOTE1X0VYRUNfQkxUKQo+ID4gKwkJCQljb250aW51ZTsKPiA+ICsKPiA+ICsJCQlpZ3Rfc3Vi dGVzdF9mKCJncHUtd2F0Y2hkb2ctbG9uZy1iYXRjaC0lcyIsIGUtCj4gPiA+bmFtZSkgewo+ID4g KwkJCQlpZ3RfcmVxdWlyZShnZW1fcmluZ19oYXNfcGh5c2ljYWxfZW5naW4KPiA+IGUoZmQsIGUt PmV4ZWNfaWQgfCBlLT5mbGFncykpOwo+ID4gKwkJCQlwcmludGYoImJlbG93IGlkOiAlZFxuIixl LT5leGVjX2lkKTsKPiA+ICsJCQkJZ3B1X3dhdGNob2RnX2hhbmdfbG9uZ19iYXRjaF9zaW5nbGVf ZW5nCj4gPiBpbmUoZmQsIGUtPmV4ZWNfaWQgfCBlLT5mbGFncywgZS0+bmFtZSk7Cj4gPiArCQkJ fQo+ID4gKwkJfQo+ID4gKwo+ID4gKwkJaWd0X3N1YnRlc3RfZigiZ3B1LXdhdGNoZG9nLWxvbmct YmF0Y2gtMi1jb250ZXh0cyIpIHsKPiA+ICsJCQlpbnQgcHJpbyA9IC0xOwo+ID4gKwkJCWdwdV93 YXRjaGRvZ19sb25nX2JhdGNoXzJfY29udGV4dHMoZmQsIG5lbmdpbmUsCj4gPiBwcmlvLCBwcmlv KTsKPiA+ICsJCX0KPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBpZ3RfZml4dHVyZSB7Cj4gPiAr CWNsb3NlKGZkKTsKPiA+ICsgICAgfQo+ID4gK30KPiA+IGRpZmYgLS1naXQgYS90ZXN0cy9tZXNv bi5idWlsZCBiL3Rlc3RzL21lc29uLmJ1aWxkCj4gPiBpbmRleCA1MTY3YTZjLi5iMjgxYjc1IDEw MDY0NAo+ID4gLS0tIGEvdGVzdHMvbWVzb24uYnVpbGQKPiA+ICsrKyBiL3Rlc3RzL21lc29uLmJ1 aWxkCj4gPiBAQCAtMjEwLDYgKzIxMCw3IEBAIGk5MTVfcHJvZ3MgPSBbCj4gPiAgIAknZ2VtX3Vu cmVmX2FjdGl2ZV9idWZmZXJzJywKPiA+ICAgCSdnZW1fdXNlcnB0cl9ibGl0cycsCj4gPiAgIAkn Z2VtX3dhaXQnLAo+ID4gKyAgICAgICAgJ2dlbV93YXRjaGRvZycsCj4gPiAgIAknZ2VtX3dvcmth cm91bmRzJywKPiA+ICAgCSdnZW1fd3JpdGVfcmVhZF9yaW5nX3N3aXRjaCcsCj4gPiAgIAknaTkx NV9mYl90aWxpbmcnLAo+ID4gCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1k ZXY=