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 E601F89444 for ; Tue, 23 Apr 2019 16:25:41 +0000 (UTC) References: <20190423000554.32274-1-carlos.santa@intel.com> From: Tvrtko Ursulin Message-ID: Date: Tue, 23 Apr 2019 17:25:39 +0100 MIME-Version: 1.0 In-Reply-To: <20190423000554.32274-1-carlos.santa@intel.com> Content-Language: en-US Subject: Re: [igt-dev] [RFC v3] 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: CkhpLAoKSG93IGlzIHRoZSB0ZXN0IGRvaW5nIGFnYWluc3QgdGhlIGNvZGUgaW4gcHJvZ3Jlc3M/ IEFueSBpc3N1ZXMgCmRpc2NvdmVyZWQgZXRjPwoKSW4gZ2VuZXJhbCBpdCBsb29rcyBhIGJpdCB1 bnRpZHkuIENvZGluZyBzdHlsZSBpcyBvZmYsIGFsaWdubWVudCBpcyAKcmFuZG9tIGV0Yy4uIHNv IGEgYml0IGRpZmZpY3VsdCB0byByZWFkLiBCdXQgSSdsbCBtYWtlIGEgcGFzcyBhbmQgc2VlIGlm IApJIGNhbiBtYWtlIHNlbnNlIG9mIGl0LiBJIHdvbid0IGxlYXZlIGNvbW1lbnRzIG9uIGNvZGlu ZyBzdHlsZSBhbmQgCmZvcm1hdHRpbmcgc2luY2UgdGhlcmUgYXJlIHRvbyBtYW55LiBCdXQgcGxl YXNlIGRvIGZpeCB0aGF0IGJlZm9yZSAKcmUtcG9zdGluZy4KCk9uIDIzLzA0LzIwMTkgMDE6MDUs IENhcmxvcyBTYW50YSB3cm90ZToKPiBUaGlzIHRlc3QgYWRkcyBiYXNpYyBzZXQgb2YgdGVzdHMg dG8gcmVzZXQgdGhlIGRpZmZlcmVudAo+IEdQVSBlbmdpbmVzIHRocm91Z2ggdGhlIGdwdSB3YXRj aGRvZyB0aW1lci4KPiAKPiBDcmVkaXRzIHRvIEFudG9uaW8gZm9yIHRoZSBvcmlnaW5hbCBjb2Rl YmFzZSB0aGlzIGlzIGJhc2VkIG9uLgo+IAo+IHYyOiByZW1vdmUgZ2VtX2NvbnRleHRfZ2V0X3Bh cmFtKCkgZHVyaW5nIHNldCAoQW50b25pbykKPiAgICAgIHJlbW92ZSBjbGVhcmluZyBvZiB0aGUg ZW5naW5lc190aHJlc2hvbGRbXSBpbiB0aGUgZGVmYXVsdCBjYXNlCj4gICAgICBpbnNpZGUgY29u dGV4dF9zZXRfd2F0Y2hkb2coKS4gKEFudG9uaW8pCj4gICAgICBmaXggaW5kZXhpbmcgd2hlbiBj cmVhdGluZyBsb3cvaGlnaCBwcmlvcml0eSBjb250ZXh0cwo+ICAgICAgZ2V0IHJpZCBvZiAyIHRo cmVhZHMgaWRlYSAoQW50b25pbykKPiAgICAgIGZpeCBjb250ZXh0IHByaW8gYnVnIGR1ZSB0byB3 cm9uZyBpbmRleGluZyAoQW50b25pbykKPiB2Mzogbm8gbmVlZCB0byBmb3JjZSBjbGVhciBkcm1f aTkxNV9nZW1fd2F0Y2hkb2dfdGltZW91dCBzdHJ1Y3QKPiAgICAgIHdoZW4gc2V0dGluZyB0aGUg d2F0Y2hkb2cgdGltZW91dHMgKEFudG9uaW8pCj4gICAgICAtdXNlIGdlbV9jb250ZXh0X3NldF9w cmlvcml0eSgpIGluc3RlYWQgdG8gdXNlIGVycm9yIGNoZWNraW5nCj4gICAgICAtYWx3YXlzIHVz ZSBhIGxvb3BlciB0byB0ZXN0IGFsbCBlbmdpbmVzIChBbnRvbmlvKQo+ICAgICAgLW1vZGlmeSB0 ZXN0IGdwdV93YXRjaG9kZ19oYW5nX2xvbmdfYmF0Y2hfc2luZ2xlX2VuZ2luZSgpCj4gICAgICB0 byB1c2UgYSBjb3VwbGUgb2YgYmF0Y2hlcyBhbmQgc2V0IHRoZSB0aW1lb3V0IGluIGJldHdlZW4g dGhlbSAoQW50b25pbykKPiAgICAgIC1tYWtlIHVzZSBvZiBmb3JfZWFjaF9lbmdpbmVfY2xhc3Nf aW5zdGFuY2UoKSAoQW50b25pbykKPiAKPiBDYzogVXJzdWxpbiBUdnJ0a28gPHR2cnRrby51cnN1 bGluQGludGVsLmNvbT4KPiBDYzogQW50b25pbyBBcmdlbnppYW5vIDxhbnRvbmlvLmFyZ2Vuemlh bm9AaW50ZWwuY29tPgo+IENjOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51 az4KPiBTaWduZWQtb2ZmLWJ5OiBDYXJsb3MgU2FudGEgPGNhcmxvcy5zYW50YUBpbnRlbC5jb20+ Cj4gLS0tCj4gICB0ZXN0cy9NYWtlZmlsZS5zb3VyY2VzICAgIHwgICAzICsKPiAgIHRlc3RzL2k5 MTUvZ2VtX3dhdGNoZG9nLmMgfCA1MTcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKwo+ICAgdGVzdHMvbWVzb24uYnVpbGQgICAgICAgICB8ICAgMSArCj4gICAz IGZpbGVzIGNoYW5nZWQsIDUyMSBpbnNlcnRpb25zKCspCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQg dGVzdHMvaTkxNS9nZW1fd2F0Y2hkb2cuYwo+IAo+IGRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmls ZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+IGluZGV4IDIxNDY5OGQuLjdmMTdm MjAgMTAwNjQ0Cj4gLS0tIGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+ICsrKyBiL3Rlc3RzL01h a2VmaWxlLnNvdXJjZXMKPiBAQCAtNDQ0LDYgKzQ0NCw5IEBAIGdlbV91c2VycHRyX2JsaXRzX1NP VVJDRVMgPSBpOTE1L2dlbV91c2VycHRyX2JsaXRzLmMKPiAgIFRFU1RTX3Byb2dzICs9IGdlbV93 YWl0Cj4gICBnZW1fd2FpdF9TT1VSQ0VTID0gaTkxNS9nZW1fd2FpdC5jCj4gICAKPiArVEVTVFNf cHJvZ3MgKz0gZ2VtX3dhdGNoZG9nCj4gK2dlbV93YXRjaGRvZ19TT1VSQ0VTID0gaTkxNS9nZW1f d2F0Y2hkb2cuYwo+ICsKPiAgIFRFU1RTX3Byb2dzICs9IGdlbV93b3JrYXJvdW5kcwo+ICAgZ2Vt X3dvcmthcm91bmRzX1NPVVJDRVMgPSBpOTE1L2dlbV93b3JrYXJvdW5kcy5jCj4gICAKPiBkaWZm IC0tZ2l0IGEvdGVzdHMvaTkxNS9nZW1fd2F0Y2hkb2cuYyBiL3Rlc3RzL2k5MTUvZ2VtX3dhdGNo ZG9nLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjhmNzg5YWIKPiAt LS0gL2Rldi9udWxsCj4gKysrIGIvdGVzdHMvaTkxNS9nZW1fd2F0Y2hkb2cuYwo+IEBAIC0wLDAg KzEsNTE3IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCDCqSAyMDE2IEludGVsIENvcnBvcmF0aW9u Cj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdl LCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBh bmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAq IHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3 aXRob3V0IGxpbWl0YXRpb24KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwg bWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxs IGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRo ZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZv bGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBh cmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBw b3J0aW9ucyBvZiB0aGUKPiArICogU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJ UyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNT IE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhF IEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERB TUFHRVMgT1IgT1RIRVIKPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBD T05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9S IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFM SU5HUwo+ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4gKyAqLwo+ICsjaW5jbHVkZSAiaWd0LmgiCj4g KyNpbmNsdWRlICJpZ3Rfc3lzZnMuaCIKPiArI2luY2x1ZGUgInN3X3N5bmMuaCIKPiArCj4gKyNp bmNsdWRlIDxwdGhyZWFkLmg+Cj4gKyNpbmNsdWRlIDxmY250bC5oPgo+ICsKPiArI2luY2x1ZGUg PHN5cy9pb2N0bC5oPgo+ICsjaW5jbHVkZSA8c3lzL3BvbGwuaD4KPiArI2luY2x1ZGUgPHN5cy9z aWduYWwuaD4KPiArI2luY2x1ZGUgImk5MTUvZ2VtX3JpbmcuaCIKPiArCj4gKyNkZWZpbmUgTE9D QUxfSTkxNV9FWEVDX0JTRF9TSElGVAkoMTMpCj4gKyNkZWZpbmUgTE9DQUxfSTkxNV9FWEVDX0JT RF9SSU5HMSAJKDEgPDwgTE9DQUxfSTkxNV9FWEVDX0JTRF9TSElGVCkKPiArI2RlZmluZSBMT0NB TF9JOTE1X0VYRUNfQlNEX1JJTkcyIAkoMiA8PCBMT0NBTF9JOTE1X0VYRUNfQlNEX1NISUZUKQoK VGhlc2UgYXJlIGluIG9sZCBzbyBubyBuZWVkIGZvciBsb2NhbCBkZWZpbml0aW9ucy4KCj4gKwo+ ICsjZGVmaW5lIE1BWF9QUklPIExPQ0FMX0k5MTVfQ09OVEVYVF9NQVhfVVNFUl9QUklPUklUWQo+ ICsjZGVmaW5lIE1JTl9QUklPIExPQ0FMX0k5MTVfQ09OVEVYVF9NSU5fVVNFUl9QUklPUklUWQo+ ICsjZGVmaW5lIEhJR0ggMQo+ICsjZGVmaW5lIExPVyAwCj4gKyNkZWZpbmUgVFJVRSAxCj4gKyNk ZWZpbmUgRkFMU0UgMAoKdHJ1ZSBhbmQgZmFsc2UgYXJlIGZhaXIgZ2FtZSBpbiBpZ3QuCgo+ICsj ZGVmaW5lIFdBVENIRE9HX1RIUkVTSE9MRCAoMTAwKQo+ICsjZGVmaW5lIE1BWF9FTkdJTkVTIDUK PiArI2RlZmluZSBSRU5ERVJfQ0xBU1MgMAo+ICsjZGVmaW5lIFZJREVPX0RFQ09ERV9DTEFTUyAx Cj4gKyNkZWZpbmUgVklERU9fRU5IQU5DRU1FTlRfQ0xBU1MgMgo+ICsjZGVmaW5lIENPUFlfRU5H SU5FX0NMQVNTIDMKCkNsYXNzZXMgYXJlIGluIGk5MTVfZHJtLmggYXMgd2VsbC4KCj4gKyNkZWZp bmUgTE9DQUxfSTkxNV9DT05URVhUX1BBUkFNX1dBVENIRE9HIDB4MTAKPiArCj4gKyNkZWZpbmUg UlNfTk9fRVJST1IgICAgICAwCj4gKyNkZWZpbmUgUlNfQkFUQ0hfQUNUSVZFICAoMSA8PCAwKQo+ ICsjZGVmaW5lIFJTX0JBVENIX1BFTkRJTkcgKDEgPDwgMSkKPiArI2RlZmluZSBSU19VTktOT1dO ICAgICAgICgxIDw8IDIpCgpXaGF0IGFyZSB0aGVzZT8gTG9vayB1bnVzZWQgaW4gY29kZS4KCj4g Kwo+ICsjZGVmaW5lIEdFVF9SRVNFVF9TVEFUU19JT0NUTCBEUk1fSU9XUihEUk1fQ09NTUFORF9C QVNFICsgMHgzMiwgc3RydWN0IGxvY2FsX2RybV9pOTE1X3Jlc2V0X3N0YXRzKQo+ICtzdHJ1Y3Qg bG9jYWxfZHJtX2k5MTVfcmVzZXRfc3RhdHMgewo+ICsJX191MzIgY3R4X2lkOwo+ICsJX191MzIg ZmxhZ3M7Cj4gKwlfX3UzMiByZXNldF9jb3VudDsKPiArCV9fdTMyIGJhdGNoX2FjdGl2ZTsKPiAr CV9fdTMyIGJhdGNoX3BlbmRpbmc7Cj4gKwlfX3UzMiBwYWQ7Cj4gK307Cj4gKwo+ICtjb25zdCB1 aW50NjRfdCB0aW1lb3V0XzEwMG1zID0gMTAwMDAwMDAwTEw7Cj4gK2ludCBudW07Cj4gKwo+ICtz dHJ1Y3QgZHJtX2k5MTVfZ2VtX3dhdGNoZG9nX3RpbWVvdXQgewo+ICsJdW5pb24gewo+ICsJCXN0 cnVjdCB7Cj4gKwkJCS8qCj4gKwkJCSAqIEVuZ2luZSBjbGFzcyAmIGluc3RhbmNlIHRvIGJlIGNv bmZpZ3VyZWQgb3IgcXVlcmllZC4KPiArCQkJICovCj4gKwkJCV9fdTE2IGVuZ2luZV9jbGFzczsK PiArCQkJX191MTYgZW5naW5lX2luc3RhbmNlOwo+ICsJCX07Cj4gKwkJLyogSW5kZXggYmFzZWQg YWRkcmVzc2luZyBtb2RlICovCj4gKwkJX191MzIgaW5kZXg7Cj4gKwl9Owo+ICsJLyogR1BVIEVu Z2luZSB3YXRjaGRvZyByZXNldHMgdGltZW91dCBpbiB1cyAqLwo+ICsJX191MzIgdGltZW91dF91 czsKPiArfTsKPiArCj4gK3N0YXRpYyB2b2lkIGNsZWFyX2Vycm9yX3N0YXRlKGludCBmZCkKPiAr ewo+ICsJaW50IGRpcjsKPiArCj4gKwlkaXIgPSBpZ3Rfc3lzZnNfb3BlbihmZCk7Cj4gKwo+ICsJ aWYgKGRpciA8IDApCj4gKwkJcmV0dXJuOwoKaWd0X3JlcXVpcmUoZGlyID49IDApIGlmIHRlc3Qg cmVsaWVzIG9uIHRoaXMgYmVpbmcgcHJlc2VudD8KCj4gKwo+ICsJLyogQW55IHdyaXRlIHRvIHRo ZSBlcnJvciBzdGF0ZSBjbGVhcnMgaXQgKi8KPiArCWlndF9zeXNmc19zZXQoZGlyLCAiZXJyb3Ii LCAiIik7Cj4gKwljbG9zZShkaXIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdW5zaWduZWQgaW50IGUy cmluZyhpbnQgZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSkKPiAr ewo+ICsgICAgcmV0dXJuIGdlbV9jbGFzc19pbnN0YW5jZV90b19lYl9mbGFncyhmZCwgZS0+Y2xh c3MsIGUtPmluc3RhbmNlKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgY29udGV4dF9zZXRfd2F0 Y2hkb2coaW50IGZkLCB1bnNpZ25lZCBlbmdpbmVfaWQsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGN0eF9pZCwgdW5zaWduZWQgdGhyZXNob2xkKQo+ICt7Cj4g KwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3dhdGNoZG9nX3RpbWVvdXQgZW5naW5lc190aHJlc2hvbGRb TUFYX0VOR0lORVNdOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIGFyZyA9 IHsKPiArCQkucGFyYW0gPSBMT0NBTF9JOTE1X0NPTlRFWFRfUEFSQU1fV0FUQ0hET0csCj4gKwkJ LmN0eF9pZCA9IGN0eF9pZCwKPiArCQkuc2l6ZSA9IHNpemVvZihlbmdpbmVzX3RocmVzaG9sZCks Cj4gKwkJLnZhbHVlID0gKHVpbnQ2NF90KSZlbmdpbmVzX3RocmVzaG9sZAo+ICsJfTsKPiArCj4g KwltZW1zZXQoJmVuZ2luZXNfdGhyZXNob2xkLCAwLCBzaXplb2YoZW5naW5lc190aHJlc2hvbGQp KTsKPiArCj4gKwlzd2l0Y2ggKGVuZ2luZV9pZCAmIEk5MTVfRVhFQ19SSU5HX01BU0spIHsKPiAr CWNhc2UgSTkxNV9FWEVDX1JFTkRFUjoKPiArCQllbmdpbmVzX3RocmVzaG9sZFtSRU5ERVJfQ0xB U1NdLnRpbWVvdXRfdXMgPSB0aHJlc2hvbGQ7CgpMb29rcyBsaWtlIHVBUEkgaXMgaW4gc29tZSBp bnRlcmltIHN0YXRlPyBJIHdhcyBleHBlY3RpbmcgdG8gc2VlIGhlcmUgCnNvbWV0aGluZyBsaWtl OgoKCWVuZ2luZXNfdGhyZXNob2xkLmVuZ2luZV9jbGFzcyA9IFJFTkRFUl9DTEFTUzsKCWVuZ2lu ZXNfdGhyZXNob2xkLmVuZ2luZV9pbnN0YW5jZSA9IDA7CgllbmdpbmVzX3RocmVzaG9sZC50aW1l b3V0X3VzID0gdGhyZXNob2xkOwoKQnV0IHlvdSBzZWVtIHRvIGJlIHBhc3NpbmcgYW4gYXJyYXkg b2Ygc3RydWN0cyB3aGljaCBjYXJyeSAKY2xhc3MvaW5zdGFuY2UgZGF0YSwgZG9uJ3QgdXNlIGl0 IGJ1dCBpbnN0ZWFkIGluZmVyIHRoZSBjbGFzcyBmcm9tIHRoZSAKcG9zaXRpb24gaW4gdGhlIGFy cmF5LgoKPiArCQlicmVhazsKPiArCWNhc2UgSTkxNV9FWEVDX0JTRDoKPiArCQllbmdpbmVzX3Ro cmVzaG9sZFtWSURFT19ERUNPREVfQ0xBU1NdLnRpbWVvdXRfdXMgPSB0aHJlc2hvbGQ7Cj4gKwkJ YnJlYWs7Cj4gKwljYXNlIEk5MTVfRVhFQ19WRUJPWDoKPiArCQllbmdpbmVzX3RocmVzaG9sZFtW SURFT19FTkhBTkNFTUVOVF9DTEFTU10udGltZW91dF91cyA9IHRocmVzaG9sZDsKPiArCQlicmVh azsKPiArCWRlZmF1bHQ6Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJZ2VtX2NvbnRleHRfc2V0 X3BhcmFtKGZkLCAmYXJnKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgYmF0Y2hfYnVmZmVyX2Zh Y3RvcnkodWludDMyX3QgZmQsIHVpbnQzMl90IGN0eF9pZCwgdW5zaWduZWQgZXhlY19pZCwgdWlu dDMyX3QgdGFyZ2V0LCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90ICpoYW5kbGUsIHVpbnQ2NF90 IHRpbWVvdXQsIGludCAqZmVuY2UsIGludCBmZW5jZV9pbmRleCkKPiArewo+ICsgICAgc3RydWN0 IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqWzJdOwo+ICsgICAgc3RydWN0IGRybV9pOTE1 X2dlbV9yZWxvY2F0aW9uX2VudHJ5IHJlbG9jOwo+ICsgICAgc3RydWN0IGRybV9pOTE1X2dlbV9l eGVjYnVmZmVyMiBleGVjYnVmOwo+ICsgICAgaWd0X3NwaW5fdCAqc3BpbiA9IE5VTEw7Cj4gKyAg ICBjb25zdCB1aW50MzJfdCBiYmUgPSBNSV9CQVRDSF9CVUZGRVJfRU5EOwo+ICsgICAgaW50IGkg PSAwOwo+ICsKPiArICAgIGdlbV9xdWllc2NlbnRfZ3B1KGZkKTsKPiArCj4gKyAgICBtZW1zZXQo JmV4ZWNidWYsIDAsIHNpemVvZihleGVjYnVmKSk7Cj4gKyAgICBtZW1zZXQoJm9iaiwgMCwgc2l6 ZW9mKG9iaikpOwo+ICsgICAgbWVtc2V0KCZyZWxvYywgMCwgc2l6ZW9mKHJlbG9jKSk7Cj4gKwo+ ICsgICAgZXhlY2J1Zi5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcihvYmopOwo+ICsKPiAr ICAgIGV4ZWNidWYuYnVmZmVyX2NvdW50ID0gMjsKPiArICAgIGV4ZWNidWYuZmxhZ3MgPSBleGVj X2lkIHwgSTkxNV9FWEVDX0ZFTkNFX09VVCA7Cj4gKwo+ICsgICAgb2JqWzBdLmhhbmRsZSA9IHRh cmdldDsKPiArICAgIG9ialsxXS5oYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCA0MDk2KTsKPiArCj4g KyAgICBvYmpbMV0ucmVsb2NhdGlvbl9jb3VudCA9IDE7Cj4gKyAgICBvYmpbMV0ucmVsb2NzX3B0 ciA9IHRvX3VzZXJfcG9pbnRlcigmcmVsb2MpOwo+ICsKPiArICAgIHJlbG9jLnRhcmdldF9oYW5k bGUgPSBvYmpbMF0uaGFuZGxlOwo+ICsgICAgcmVsb2MucmVhZF9kb21haW5zID0gSTkxNV9HRU1f RE9NQUlOX0NPTU1BTkQ7Cj4gKyAgICByZWxvYy53cml0ZV9kb21haW4gPSBJOTE1X0dFTV9ET01B SU5fQ09NTUFORDsKPiArICAgIHJlbG9jLmRlbHRhID0gb2Zmc2V0ICogc2l6ZW9mKHVpbnQzMl90 KTsKPiArCj4gKyAgICByZWxvYy5vZmZzZXQgPSBpICogc2l6ZW9mKHVpbnQzMl90KTsKPiArICAg IGdlbV93cml0ZShmZCwgb2JqWzFdLmhhbmRsZSwgMCwgJmJiZSwgc2l6ZW9mKGJiZSkpOwo+ICsK PiArICAgIF9fc3luY19zeW5jaHJvbml6ZSgpOwo+ICsKPiArICAgIGlmIChoYW5kbGUpIHsKPiAr ICAgICAgICAqaGFuZGxlID0gb2JqWzFdLmhhbmRsZTsKPiArICAgICAgICByZXR1cm47CgpJcyB0 aGlzIHBhdGggdXNlZCBieSB0aGUgY2FsbGVycz8KCj4gKyAgICB9Cj4gKwo+ICsgICAgZ2VtX3N5 bmMoZmQsIG9ialsxXS5oYW5kbGUpOwo+ICsgICAgZXhlY2J1Zi5yc3ZkMSA9IGN0eF9pZDsKPiAr ICAgIGV4ZWNidWYucnN2ZDIgPSAtMTsKPiArCj4gKyAgICBzcGluID0gaWd0X3NwaW5fYmF0Y2hf bmV3KGZkLCAuZGVwZW5kZW5jeSA9IG9ialswXS5oYW5kbGUpOwo+ICsgICAgaWd0X3NwaW5fYmF0 Y2hfc2V0X3RpbWVvdXQoc3BpbiwgdGltZW91dCk7Cj4gKyAgICBpZ3RfYXNzZXJ0KGdlbV9ib19i dXN5KGZkLCBvYmpbMF0uaGFuZGxlKSk7Cj4gKwo+ICsgICAgZ2VtX2V4ZWNidWZfd3IoZmQsICZl eGVjYnVmKTsKPiArICAgIGlndF9zcGluX2JhdGNoX2ZyZWUoZmQsIHNwaW4pOwo+ICsKPiArICAg IGZlbmNlW2ZlbmNlX2luZGV4XSA9IGV4ZWNidWYucnN2ZDIgPj4gMzI7Cj4gKwo+ICsgICAgZ2Vt X2Nsb3NlKGZkLCBvYmpbMV0uaGFuZGxlKTsKPiArICAgIGdlbV9xdWllc2NlbnRfZ3B1KGZkKTsK PiArfQo+ICsKPiArc3RhdGljIHVpbnQzMl90IGNyZWF0ZV9jdHhfd2l0aF9wcmlvcml0eShpbnQg ZmQsIGludCBjdHhfcHJpbykKPiArewo+ICsJdWludDMyX3QgY3R4ID0gZ2VtX2NvbnRleHRfY3Jl YXRlKGZkKTsKPiArCj4gKwlzd2l0Y2ggKGN0eF9wcmlvKSB7Cj4gKwljYXNlIEhJR0g6Cj4gKwkJ Z2VtX2NvbnRleHRfc2V0X3ByaW9yaXR5KGZkLCBjdHgsIE1BWF9QUklPKTsKPiArCQlpZ3RfaW5m bygiU2V0dGluZyBNQVggcHJpb3JpdHkgJWRcbiIsIGN0eF9wcmlvKTsKPiArCQlicmVhazsKPiAr CWNhc2UgTE9XOgo+ICsJCWdlbV9jb250ZXh0X3NldF9wcmlvcml0eShmZCwgY3R4LCBNSU5fUFJJ Tyk7Cj4gKwkJaWd0X2luZm8oIlNldHRpbmcgTUlOIHByaW9yaXR5ICVkXG4iLCBjdHhfcHJpbyk7 Cj4gKwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCWlndF9pbmZvKCJJZ25vcmluZyBjb250ZXh0 IHByaW9yaXR5ICVkXG4iLCBjdHhfcHJpbyk7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJcmV0 dXJuIGN0eDsKCldoeSBkbyB5b3UgbmVlZCB0aGlzIGhlbHBlciB3aGljaCB0cmFuc2xhdGVzIGFu IGludGVnZXIgdG8gYW4gaW50ZWdlcj8gCkNvdWxkbid0IHlvdSBqdXN0IHBhc3MgaW4gdGhlIHJl YWwgcHJpb3JpdHkgdG8gc3RhcnQgd2l0aD8KCj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZ2VtX3Jl c2V0X3N0YXRzKGludCBmZCwgaW50IGN0eF9pZCwKPiArCQkJICAgc3RydWN0IGxvY2FsX2RybV9p OTE1X3Jlc2V0X3N0YXRzICpycykKPiArewo+ICsJbWVtc2V0KHJzLCAwLCBzaXplb2YoKnJzKSk7 Cj4gKwlycy0+Y3R4X2lkID0gY3R4X2lkOwo+ICsJcnMtPnJlc2V0X2NvdW50ID0gLTE7Cj4gKwo+ ICsJaWYgKGRybUlvY3RsKGZkLCBHRVRfUkVTRVRfU1RBVFNfSU9DVEwsIHJzKSkgewo+ICsJCXBy aW50ZigiZXJyb3I6JWRcbiIsLWVycm5vKTsKPiArCQlyZXR1cm4gLWVycm5vOwoKTWFrZSBpdCBh c3NlcnQgc3VjY2VzcyBoZXJlIHNpbmNlIGFsbCBjYWxsZXJzIGRvIHRoYXQgYW55d2F5IGFuZCBp dCAKbWF0Y2hlcyB0aGUgY29udmVudGlvbiBmb3IgZ2VtIHByZWZpeGVkIGlvY3RsIGhlbHBlcnM/ Cgo+ICsJfQo+ICsJaWd0X2Fzc2VydChycy0+cmVzZXRfY291bnQgIT0gLTEpOwo+ICsJcmV0dXJu IDA7Cj4gK30KPiArCj4gK3N0YXRpYyB1bnNpZ25lZCBpbmRleF90b19lbmdpbmVfaWQoaW50IGZk LCBpbnQgaW5kZXgpCj4gK3sKPiArCXVuc2lnbmVkIGVuZ2luZV9pZCA9IEk5MTVfRVhFQ19SRU5E RVI7Cj4gKwo+ICsJc3dpdGNoIChpbmRleCkgewo+ICsJY2FzZSAxOgo+ICsJCWVuZ2luZV9pZCA9 IEk5MTVfRVhFQ19SRU5ERVI7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDI6Cj4gKwkJaWYgKGdlbV9o YXNfYnNkMihmZCkpCj4gKwkJCWVuZ2luZV9pZCA9IEk5MTVfRVhFQ19CU0QgfCBJOTE1X0VYRUNf QlNEX1JJTkcxOwo+ICsJCWVsc2UKPiArCQkJZW5naW5lX2lkID0gSTkxNV9FWEVDX0JTRDsKPiAr CQlicmVhazsKPiArCWNhc2UgMzoKPiArCQlpZiAoZ2VtX2hhc19ic2QyKGZkKSkKPiArCQkJZW5n aW5lX2lkID0gSTkxNV9FWEVDX0JTRCB8IEk5MTVfRVhFQ19CU0RfUklORzI7Cj4gKwkJZWxzZQo+ ICsJCQllbmdpbmVfaWQgPSBJOTE1X0VYRUNfQlNEOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSA0Ogo+ ICsJCWVuZ2luZV9pZCA9IEk5MTVfRVhFQ19WRUJPWDsKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6 Cj4gKwkJYnJlYWs7Cj4gKwl9CgpJIGhvcGUgd2UgY2FuIGF2b2lkIHRoaXMgbWFpbnRlbmFuY2Ug YnVyZGVuLCB3aWxsIHNlZSBsYXRlciBpbiBwYXRjaCBob3cuCgo+ICsKPiArCXJldHVybiBlbmdp bmVfaWQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGluamVjdF9oYW5nKHVpbnQzMl90IGZkLCB1 bnNpZ25lZCBlbmdpbmVfaWQsIHVpbnQzMl90IGN0eF9pZCwgIHVuc2lnbmVkIGZsYWdzKQo+ICt7 Cj4gKwlpZ3RfaGFuZ190IGhhbmc7Cj4gKwloYW5nID0gaWd0X2hhbmdfY3R4KGZkLCBjdHhfaWQs IGVuZ2luZV9pZCwgZmxhZ3MpOwo+ICsJZ2VtX3N5bmMoZmQsIGhhbmcuc3Bpbi0+aGFuZGxlKTsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgZ3B1X3dhdGNoZG9nX2xvbmdfYmF0Y2hfMl9jb250ZXh0 cyhpbnQgZmQsIGludCBuZW5naW5lLCBpbnQgcHJpb19jdHgxLCBpbnQgcmVzZXRfY3R4MSwgaW50 IHByaW9fY3R4MiwgaW50IHJlc2V0X2N0eDIpCj4gK3sKPiArCXVpbnQzMl90IGN0eFs0OF07Cj4g Kwl1aW50MzJfdCBzY3JhdGNoWzQ4XTsKPiArCXVuc2lnbmVkIGZsYWdzID0gSEFOR19BTExPV19D QVBUVVJFOwo+ICsJY29uc3QgdWludDY0X3QgYmF0Y2hfdGltZW91dF9tcyA9IHRpbWVvdXRfMTAw bXMgKiAzOwoKbXMgc3VmZml4IHVzdWFsbHkgbWVhbnMgdGhlIHVuaXQgc3RvcmVkIGlzIG1zLiBX aGlsZSBoZXJlIGl0IHNlZW1zIHRvIGJlIApzb21ldGhpbmcgZWxzZS4KCmNvbnN0IHVuc2lnbmVk IGxvbmcgYmF0Y2hfdGltZW91dF9tcyA9IDMwMDsKY29uc3QgdW5zaWduZWQgbG9uZyBiYXRjaF90 aW1lb3V0X3VzID0gMzAwZTM7CmNvbnN0IHVuc2lnbmVkIGxvbmcgYmF0Y2hfdGltZW91dF9ucyA9 IDMwMGU2OwoKTm90IHN1cmUgd2hpY2ggb25lIHlvdSB3YW50LiBQcm9iYWJseSB1c2UgbXMgYW5k IHNjYWxlIHVwIGF0IHRoZSB1c2Ugc2l0ZS4KCj4gKwljb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0 aW9uX2VuZ2luZTIgKmU7Cj4gKwljb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIg KmUyOwo+ICsJaW50IGkgPSAwLCBpbmRleCA9IDAsIGVuZ2luZV9pZCA9IDAsIGN0eF9jbnQgPSAw Owo+ICsJaW50ICpmZW5jZSA9IDAsIGFjdGl2ZV9jb3VudCA9IDA7Cj4gKwlzdHJ1Y3QgbG9jYWxf ZHJtX2k5MTVfcmVzZXRfc3RhdHMgcnM7Cj4gKwo+ICsJaWd0X3JlcXVpcmUobmVuZ2luZSk7Cj4g Kwo+ICsJZmVuY2UgPSAoaW50ICopbWFsbG9jKHNpemVvZihpbnQpICogNDgpOwo+ICsKPiArCWlm ICghZmVuY2UpIHsKPiArCQlpZ3RfaW5mbygiT3V0IG9mIG1lbW9yeVxuIik7Cj4gKwkJZXhpdCgx KTsKPiArCX0KClJlcGxhY2Ugd2l0aCBpZ3RfYXNzZXJ0KGZlbmNlKS4KCj4gKwo+ICsJLyogSW50 aWFsaXplcyByYW5kb20gbnVtYmVyIGdlbmVyYXRvciAqLwo+ICsJc3JhbmQoKHVuc2lnbmVkKSB0 aW1lKE5VTEwpKTsKPiArCj4gKwkvKiBUaGUgb3V0ZXIgbG9vcGVyIGlzIGN0eDEgYW5kIHRoZSBp bm5lciBsb29wZXIgaXMgY3R4Mgo+ICsJICogQm90aCBjb250ZXh0cyBjYW4gc2V0IHRoZWlyIHBy aW9yaXR5LCBjcmVhdGUgd29yaywgYW5kIGNhbmNlbCB0aGVtc2VsdmVzCj4gKwkgKi8KPiArCWZv cl9lYWNoX2VuZ2luZV9jbGFzc19pbnN0YW5jZShmZCwgZSkgewo+ICsJCWlmICggc3RyY21wKGUt Pm5hbWUsICJiY3MwIikgPT0gMCApCj4gKwkJCWNvbnRpbnVlOwoKVXNlIC1FTk9ERVYgb3IgLUVJ TlZBTCBmcm9tIGNvbnRleHRfc2V0X3dhdGNoZG9nIHRvIHNraXAuCgo+ICsKPiArCQlzY3JhdGNo W2N0eF9jbnRdID0gZ2VtX2NyZWF0ZShmZCwgNDA5Nik7Cj4gKwkJaW5kZXggPSByYW5kKCkgJSA0 ICsgMTsKPiArCQllbmdpbmVfaWQgPSBpbmRleF90b19lbmdpbmVfaWQoZmQsIGluZGV4KTsKPiAr Cj4gKwkJLyogZ2V0IGN1cnJlbnQgYmF0Y2hfYWN0aXZlIGNvdW50ICovCj4gKwkJaWd0X2Fzc2Vy dF9lcShnZW1fcmVzZXRfc3RhdHMoZmQsIDAsICZycyksIDApOwo+ICsJCWFjdGl2ZV9jb3VudCA9 IHJzLmJhdGNoX2FjdGl2ZTsKPiArCQlpZ3RfYXNzZXJ0X2VxKHJzLmJhdGNoX2FjdGl2ZSwgYWN0 aXZlX2NvdW50KTsKPiArCj4gKwkJY3R4W2N0eF9jbnRdID0gY3JlYXRlX2N0eF93aXRoX3ByaW9y aXR5KGZkLCBwcmlvX2N0eDEpOwo+ICsJCWJhdGNoX2J1ZmZlcl9mYWN0b3J5KGZkLCBjdHhbY3R4 X2NudF0sIGVuZ2luZV9pZCwgc2NyYXRjaFtjdHhfY250XSwgMCwgTlVMTCwgYmF0Y2hfdGltZW91 dF9tcywgZmVuY2UsIGN0eF9jbnQpOwo+ICsJCWNvbnRleHRfc2V0X3dhdGNoZG9nKGZkLCBlbmdp bmVfaWQsIGN0eFtjdHhfY250XSwgV0FUQ0hET0dfVEhSRVNIT0xEKTsKPiArCQlzbGVlcCgxKTsK CldoYXQncyB0aGUgc2xlZXAgZm9yPyBJZiB1bmF2b2lkYWJsZSBhdCBsZWFzdCBuZWVkcyBhIGNv bW1lbnQuCgo+ICsKPiArCQlpZiAocmVzZXRfY3R4MSkgewo+ICsJCQljbGVhcl9lcnJvcl9zdGF0 ZShmZCk7Cj4gKwkJCWluamVjdF9oYW5nKGZkLCBlbmdpbmVfaWQsIGN0eFtjdHhfY250XSwgZmxh Z3MpOwo+ICsJCQlhY3RpdmVfY291bnQrKzsKPiArCQl9Cj4gKwo+ICsJCS8qIGNoZWNrIGJhdGNo X2FjdGl2ZSBjb3VudCBvbmNlIGFnYWluIGFmdGVyIHRoZSBoYW5nICovCj4gKwkJaWd0X2Fzc2Vy dF9lcShnZW1fcmVzZXRfc3RhdHMoZmQsIDAsICZycyksIDApOwo+ICsJCWlndF9hc3NlcnRfZXEo cnMuYmF0Y2hfYWN0aXZlLCBhY3RpdmVfY291bnQpOwo+ICsKPiArCQljdHhfY250Kys7Cj4gKwkJ aSA9IDE7Cj4gKwo+ICsJCWZvcl9lYWNoX2VuZ2luZV9jbGFzc19pbnN0YW5jZShmZCwgZTIpIHsK PiArCQkJaWYgKCBzdHJjbXAoZS0+bmFtZSwgImJjczAiKSA9PSAwICkKCmUyLCBidXQgcmVtb3Zl IGl0IGFsdG9nZXRoZXIgYXMgc2FpZCBhYm92ZS4KCkkgZG9uJ3QgZ2V0IHdoYXQgaXMgdGhlIHB1 cnBvc2Ugb2YgdHdvIGZvcl9lYWNoX2VuZ2luZV9jbGFzc19pbnN0YW5jZSAKbG9vcHMgd2hlbiBu ZWl0aGVyIGUgb3IgZTIgYXBwZWFyIHRvIGJlIHVzZWQ/CgpTaW5jZSBlaXRoZXIgSSBhbSBtaXNz aW5nIHNvbWV0aGluZyBjcml0aWNhbCBvciB0aGUgdGVzdCByZWFsbHkgaXMgdmVyeSAKY29uZnVz ZWQsIHVudGlsIGNsYXJpZmllZCwgSSBhbSBza2lwcGluZyBhIGJpdCBsb3dlciBkb3duLgoKPiAr CQkJCWNvbnRpbnVlOwo+ICsKPiArCQkJc2NyYXRjaFtjdHhfY250XSA9IGdlbV9jcmVhdGUoZmQs IDQwOTYpOwo+ICsJCQllbmdpbmVfaWQgPSBpbmRleF90b19lbmdpbmVfaWQoZmQsIGkpOwo+ICsK PiArCQkJLyogZ2V0IGN1cnJlbnQgYmF0Y2hfYWN0aXZlIGNvdW50ICovCj4gKwkJCWlndF9hc3Nl cnRfZXEoZ2VtX3Jlc2V0X3N0YXRzKGZkLCAwLCAmcnMpLCAwKTsKPiArCQkJYWN0aXZlX2NvdW50 ID0gcnMuYmF0Y2hfYWN0aXZlOwo+ICsJCQlpZ3RfYXNzZXJ0X2VxKHJzLmJhdGNoX2FjdGl2ZSwg YWN0aXZlX2NvdW50KTsKPiArCj4gKwkJCWN0eFtjdHhfY250XSA9IGNyZWF0ZV9jdHhfd2l0aF9w cmlvcml0eShmZCwgcHJpb19jdHgyKTsKPiArCQkJYmF0Y2hfYnVmZmVyX2ZhY3RvcnkoZmQsIGN0 eFtjdHhfY250XSwgZW5naW5lX2lkLCBzY3JhdGNoW2N0eF9jbnRdLCAwLCBOVUxMLCBiYXRjaF90 aW1lb3V0X21zLCBmZW5jZSwgY3R4X2NudCk7Cj4gKwkJCWNvbnRleHRfc2V0X3dhdGNoZG9nKGZk LCBlbmdpbmVfaWQsIGN0eFtjdHhfY250XSwgV0FUQ0hET0dfVEhSRVNIT0xEKTsKPiArCj4gKwkJ CWlmIChyZXNldF9jdHgyKSB7Cj4gKwkJCQljbGVhcl9lcnJvcl9zdGF0ZShmZCk7Cj4gKwkJCQlp bmplY3RfaGFuZyhmZCwgZW5naW5lX2lkLCBjdHhbY3R4X2NudF0sIGZsYWdzKTsKPiArCQkJCWFj dGl2ZV9jb3VudCsrOwo+ICsJCQl9Cj4gKwo+ICsJCQkvKiBjaGVjayBiYXRjaF9hY3RpdmUgY291 bnQgb25jZSBhZ2FpbiBhZnRlciB0aGUgaGFuZyAqLwo+ICsJCQlpZ3RfYXNzZXJ0X2VxKGdlbV9y ZXNldF9zdGF0cyhmZCwgMCwgJnJzKSwgMCk7Cj4gKwkJCWlndF9hc3NlcnRfZXEocnMuYmF0Y2hf YWN0aXZlLCBhY3RpdmVfY291bnQpOwo+ICsKPiArCQkJY3R4X2NudCsrOwo+ICsJCQlpKys7Cj4g KwkJfQo+ICsJfQo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBjdHhfY250OyBpKyspIHsKPiArCQlj bG9zZShmZW5jZVtpXSk7Cj4gKwkJZ2VtX2NvbnRleHRfZGVzdHJveShmZCwgY3R4W2ldKTsKPiAr CQlnZW1fY2xvc2UoZmQsIHNjcmF0Y2hbaV0pOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCBncHVfd2F0Y2hvZGdfaGFuZ19sb25nX2JhdGNoX3NpbmdsZV9lbmdpbmUoaW50IGZkLCBjb25z dCBjaGFyICpuYW1lKQo+ICt7Cj4gKwl1aW50MzJfdCBjdHhbMTZdOwo+ICsJdWludDMyX3Qgc2Ny YXRjaFsxNl07Cj4gKwlpbnQgKmZlbmNlOwo+ICsJY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlv bl9lbmdpbmUyICplOwo+ICsJdW5zaWduZWQgbmVuZ2luZSA9IDA7Cj4gKwl1bnNpZ25lZCBlbmdp bmVfaWQgPSAwOwo+ICsJaW50IGFjdGl2ZV9jb3VudCA9IDA7Cj4gKwlzdHJ1Y3QgbG9jYWxfZHJt X2k5MTVfcmVzZXRfc3RhdHMgcnM7Cj4gKwlpbnQgaTsKPiArCXVuc2lnbmVkIGZsYWdzID0gSEFO R19BTExPV19DQVBUVVJFOwo+ICsJY29uc3QgdWludDY0X3QgYmF0Y2hfdGltZW91dF9tcyA9IHRp bWVvdXRfMTAwbXMgKiA0Owo+ICsKPiArCWZlbmNlID0gKGludCAqKW1hbGxvYyhzaXplb2YoaW50 KSoxNik7Cj4gKwo+ICsJaWYgKCFmZW5jZSkgewo+ICsJCWlndF9pbmZvKCJPdXQgb2YgbWVtb3J5 XG4iKTsKPiArCQlleGl0KDEpOwo+ICsJfQo+ICsKPiArCWZvcl9lYWNoX2VuZ2luZV9jbGFzc19p bnN0YW5jZShmZCwgZSkgewo+ICsJCWlmICggc3RyY21wKGUtPm5hbWUsICJiY3MwIikgPT0gMCAp Cj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQllbmdpbmVfaWQgPSBlMnJpbmcoZmQsIGUpOwo+ICsK PiArCQlzY3JhdGNoW25lbmdpbmVdID0gZ2VtX2NyZWF0ZShmZCwgNDA5Nik7Cj4gKwkJY3R4W25l bmdpbmVdID0gY3JlYXRlX2N0eF93aXRoX3ByaW9yaXR5KGZkLCAtMSk7Cj4gKwo+ICsJCS8qIGdl dCBjdXJyZW50IGJhdGNoX2FjdGl2ZSBjb3VudCAqLwo+ICsJCWlndF9hc3NlcnRfZXEoZ2VtX3Jl c2V0X3N0YXRzKGZkLCAwLCAmcnMpLCAwKTsKPiArCQlhY3RpdmVfY291bnQgPSBycy5iYXRjaF9h Y3RpdmU7Cj4gKwkJaWd0X2Fzc2VydF9lcShycy5iYXRjaF9hY3RpdmUsIGFjdGl2ZV9jb3VudCk7 Cj4gKwo+ICsJCS8qIGNyZWF0ZSBzb21lIHdvcmsgb24gdGhpcyBlbmdpbmUgdXNpbmcgdGhlIGFi b3ZlIGN0eCovCj4gKwkJYmF0Y2hfYnVmZmVyX2ZhY3RvcnkoZmQsIGN0eFtuZW5naW5lXSwgZW5n aW5lX2lkLCBzY3JhdGNoW25lbmdpbmVdLCAwLCBOVUxMLCBiYXRjaF90aW1lb3V0X21zLCBmZW5j ZSwgbmVuZ2luZSk7Cj4gKwo+ICsJCS8qIHNldCB0aGUgZ3B1IHdhdGNoZG9nIHRpbWVvdXQgKi8K PiArCQljb250ZXh0X3NldF93YXRjaGRvZyhmZCwgZW5naW5lX2lkLCBjdHhbbmVuZ2luZV0sIFdB VENIRE9HX1RIUkVTSE9MRCk7Cj4gKwkJY2xlYXJfZXJyb3Jfc3RhdGUoZmQpOwo+ICsKPiArCQkv Kgo+ICsJCSAqIGdpdmUgZW5vdWdoIHRpbWUgZm9yIHRoZSBiYXRjaCBidWZmZXIgdG8gcnVuCj4g KwkJICovCj4gKwkJbmFub3NsZWVwKCYoc3RydWN0IHRpbWVzcGVjKXsgLnR2X3NlYyA9IDAsCj4g KwkJCQkJICAgICAgLnR2X25zZWMgPSBiYXRjaF90aW1lb3V0X21zICogMiB9LCBOVUxMKTsKPiAr Cj4gKwkJLyogY3JlYXRlIHNvbWUgd29yayBvbiB0aGlzIGVuZ2luZSB1c2luZyB0aGUgYWJvdmUg Y3R4Ki8KPiArCQliYXRjaF9idWZmZXJfZmFjdG9yeShmZCwgY3R4W25lbmdpbmVdLCBlbmdpbmVf aWQsIHNjcmF0Y2hbbmVuZ2luZV0sIDAsIE5VTEwsIGJhdGNoX3RpbWVvdXRfbXMsIGZlbmNlLCBu ZW5naW5lKTsKPiArCQljb250ZXh0X3NldF93YXRjaGRvZyhmZCwgZW5naW5lX2lkLCBjdHhbbmVu Z2luZV0sIFdBVENIRE9HX1RIUkVTSE9MRCk7Cj4gKwkJY2xlYXJfZXJyb3Jfc3RhdGUoZmQpOwo+ ICsKPiArCQkvKiBjYW5jZWwgb25seSB0aGUgYmF0Y2ggcmVxdWVzdGVkICovCj4gKwkJaWYgKCBz dHJjbXAoZS0+bmFtZSwgbmFtZSkgPT0gMCApIHsKPiArCQkJaW5qZWN0X2hhbmcoZmQsIGVuZ2lu ZV9pZCwgY3R4W25lbmdpbmVdLCBmbGFncyk7Cj4gKwkJCWFjdGl2ZV9jb3VudCsrOwo+ICsJCX0K PiArCj4gKwkJLyogY2hlY2sgYmF0Y2hfYWN0aXZlIGNvdW50IG9uY2UgYWdhaW4gYWZ0ZXIgdGhl IGhhbmcgKi8KPiArCQlpZ3RfYXNzZXJ0X2VxKGdlbV9yZXNldF9zdGF0cyhmZCwgMCwgJnJzKSwg MCk7Cj4gKwkJYWN0aXZlX2NvdW50ID0gcnMuYmF0Y2hfYWN0aXZlOwo+ICsJCWlndF9hc3NlcnRf ZXEocnMuYmF0Y2hfYWN0aXZlLCBhY3RpdmVfY291bnQpOwo+ICsKPiArCQluZW5naW5lKys7Cj4g Kwl9Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IG5lbmdpbmU7IGkrKykgewo+ICsJCWNsb3NlKGZl bmNlW2ldKTsKPiArCQlnZW1fY29udGV4dF9kZXN0cm95KGZkLCBjdHhbaV0pOwo+ICsJCWdlbV9j bG9zZShmZCwgc2NyYXRjaFtpXSk7Cj4gKwl9Cj4gK30KPiArCj4gK2lndF9tYWluCj4gK3sKPiAr CWludCBmZDsKPiArCXVuc2lnbmVkIGludCBuZW5naW5lID0gMDsKPiArCXVuc2lnbmVkIGludCBl bmdpbmU7Cj4gKwljb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmU7Cj4gKwo+ ICsJaWd0X3NraXBfb25fc2ltdWxhdGlvbigpOwo+ICsKPiArCWlndF9maXh0dXJlIHsKPiArCQlm ZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfSU5URUwpOwo+ICsJCWlndF9yZXF1aXJlX2dlbShm ZCk7Cj4gKwo+ICsJCWZvcl9lYWNoX3BoeXNpY2FsX2VuZ2luZShmZCwgZW5naW5lKQo+ICsJCQlu ZW5naW5lKys7Cj4gKwkJaWd0X3JlcXVpcmUobmVuZ2luZSk7CgpEbyB3ZSBoYXZlIEdQVXMgd2l0 aCBubyBlbmdpbmVzPwoKPiArCX0KPiArCj4gKwlpZ3Rfc3VidGVzdF9ncm91cCB7Cj4gKwo+ICsJ CWlndF9zdWJ0ZXN0X2YoImdwdS13YXRjaGRvZy1sb25nLWJhdGNoLWxvdy1wcmlvLWN0eDEtcmVz ZXQtY3R4Mi1oaWdoLXByaW8tZXhlY3V0ZSIpIHsKPiArCQkJaW50IHByaW9fY3R4MSA9IExPVzsK PiArCQkJaW50IHByaW9fY3R4MiA9IEhJR0g7Cj4gKwkJCWludCByZXNldF9jdHgxID0gVFJVRTsK PiArCQkJaW50IHJlc2V0X2N0eDIgPSBGQUxTRTsKPiArCQkJZ3B1X3dhdGNoZG9nX2xvbmdfYmF0 Y2hfMl9jb250ZXh0cyhmZCwgbmVuZ2luZSwgcHJpb19jdHgxLCByZXNldF9jdHgxLCBwcmlvX2N0 eDIsIHJlc2V0X2N0eDIpOwo+ICsJCX0KClRoaXMgaXMga2luZCBvZiB2ZXJib3NlLiBJIHJlY29t bWVuZCBvdXQgdXN1YWwgcGF0dGVybiBhbG9uZyB0aGUgbGluZXMgb2Y6CgpzdHJ1Y3QgewoJY2hh ciAqbmFtZTsKCWludCBwcmlvWzJdOwoJYm9vbCByZXNldFsyXTsKfSB0ZXN0c1tdID0gewoJeyAi Y2hhbmdlIG1lIiwgezAsIDB9LCB7ZmFsc2UsIGZhbHNlfSB9LAoJeyAiY2hhbmdlIG1lIiwgey0x LCAwfSwge3RydWUsIGZhbHNlfSB9LAoJLi4uCn07Cgpmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0la RSh0ZXN0cyk7IGkrKykgewoJaWd0X3N1YnRlc3RfZigibG9uZy1iYXRjaC0lcyIsIHRlc3RzW2ld LT5uYW1lKQoJCWxvbmdfYmF0Y2goZmQsIHRlc3RzW2ldLnByaW9bMF0sIHRlc3RzW2ldLmN0eFsw XSwgLi4uKTsKfQoKU28geW91IHJ1biBhbGwgc3VidGVzdHMgZnJvbSBhIHNpbmdsZSBsb29wLgoK UmVnYXJkcywKClR2cnRrbwoKPiArCj4gKwkJaWd0X3N1YnRlc3RfZigiZ3B1LXdhdGNoZG9nLWxv bmctYmF0Y2gtaGlnaC1wcmlvLWN0eDEtcmVzZXQtY3R4Mi1sb3ctcHJpby1leGVjdXRlIikgewo+ ICsJCQlpbnQgcHJpb19jdHgxID0gSElHSDsKPiArCQkJaW50IHByaW9fY3R4MiA9IExPVzsKPiAr CQkJaW50IHJlc2V0X2N0eDEgPSBUUlVFOwo+ICsJCQlpbnQgcmVzZXRfY3R4MiA9IEZBTFNFOwo+ ICsJCQlncHVfd2F0Y2hkb2dfbG9uZ19iYXRjaF8yX2NvbnRleHRzKGZkLCBuZW5naW5lLCBwcmlv X2N0eDEsIHJlc2V0X2N0eDEsIHByaW9fY3R4MiwgcmVzZXRfY3R4Mik7Cj4gKwkJfQo+ICsKPiAr CQlpZ3Rfc3VidGVzdF9mKCJncHUtd2F0Y2hkb2ctbG9uZy1iYXRjaC1jdHgxLXJlc2V0LWN0eDIt ZXhlY3V0ZSIpIHsKPiArCQkJaW50IHByaW9fY3R4MSA9IC0xOwo+ICsJCQlpbnQgcHJpb19jdHgy ID0gLTE7Cj4gKwkJCWludCByZXNldF9jdHgxID0gVFJVRTsKPiArCQkJaW50IHJlc2V0X2N0eDIg PSBGQUxTRTsKPiArCQkJZ3B1X3dhdGNoZG9nX2xvbmdfYmF0Y2hfMl9jb250ZXh0cyhmZCwgbmVu Z2luZSwgcHJpb19jdHgxLCByZXNldF9jdHgxLCBwcmlvX2N0eDIsIHJlc2V0X2N0eDIpOwo+ICsJ CX0KPiArCj4gKwkJaWd0X3N1YnRlc3RfZigiZ3B1LXdhdGNoZG9nLWxvbmctYmF0Y2gtY3R4MS1l eGVjdXRlLWN0eDItcmVzZXQiKSB7Cj4gKwkJCWludCBwcmlvX2N0eDEgPSAtMTsKPiArCQkJaW50 IHByaW9fY3R4MiA9IC0xOwo+ICsJCQlpbnQgcmVzZXRfY3R4MSA9IEZBTFNFOwo+ICsJCQlpbnQg cmVzZXRfY3R4MiA9IFRSVUU7Cj4gKwkJCWdwdV93YXRjaGRvZ19sb25nX2JhdGNoXzJfY29udGV4 dHMoZmQsIG5lbmdpbmUsIHByaW9fY3R4MSwgcmVzZXRfY3R4MSwgcHJpb19jdHgyLCByZXNldF9j dHgyKTsKPiArCQl9Cj4gKwo+ICsJCWlndF9zdWJ0ZXN0X2YoImdwdS13YXRjaGRvZy1sb25nLWJh dGNoLWN0eDEtZXhlY3V0ZS1jdHgyLWV4ZWN1dGUiKSB7Cj4gKwkJCWludCBwcmlvX2N0eDEgPSAt MTsKPiArCQkJaW50IHByaW9fY3R4MiA9IC0xOwo+ICsJCQlpbnQgcmVzZXRfY3R4MSA9IEZBTFNF Owo+ICsJCQlpbnQgcmVzZXRfY3R4MiA9IEZBTFNFOwo+ICsJCQlncHVfd2F0Y2hkb2dfbG9uZ19i YXRjaF8yX2NvbnRleHRzKGZkLCBuZW5naW5lLCBwcmlvX2N0eDEsIHJlc2V0X2N0eDEsIHByaW9f Y3R4MiwgcmVzZXRfY3R4Mik7Cj4gKwkJfQo+ICsKPiArCSAgICAgICBfX2Zvcl9lYWNoX2VuZ2lu ZV9jbGFzc19pbnN0YW5jZShlKSB7Cj4gKwkJCWlndF9zdWJ0ZXN0X2dyb3VwIHsKPiArCQkJCWln dF9maXh0dXJlIHsKPiArCQkJCWdlbV9yZXF1aXJlX2VuZ2luZShmZCwKPiArCQkJCQllLT5jbGFz cywKPiArCQkJCQllLT5pbnN0YW5jZSk7Cj4gKwkJCQl9Cj4gKwkJCS8qIG5vIHN1cHBvcnQgZm9y IGdwdSB3YXRjaGRvZyBvbiBiY3MwICovCj4gKwkJCWlmIChzdHJjbXAoZS0+bmFtZSwgImJjczAi KSA9PSAwKQo+ICsJCQkJY29udGludWU7CgpTb2Z0d2FyZSBpbXBsZW1lbnRhdGlvbiBjYW4gc3Vw cG9ydCBpdC4gU28gZG9uJ3Qgc2tpcCBoZXJlIGJ1dCBza2lwIGluIAp0aGUgc3VidGVzdCBpZiB5 b3UgZ2V0IC1FTk9ERVYgd2hlbiB5b3UgdHJ5IHRvIGNvbmZpZ3VyZSBpdC4KCj4gKwo+ICsJCSAg ICAgICAgICAgIGlndF9zdWJ0ZXN0X2YoImdwdS13YXRjaGRvZy1sb25nLWJhdGNoLXNpbmdsZS1l bmdpbmUtcmVzZXQtJXMiLCBlLT5uYW1lKQoKRG9uJ3QgcHJlZml4IGFsbCB0ZXN0cyB3aXRoIGdw dS13YXRjaGRvZywgaXQgaXMgdmVyeSB2ZXJib3NlIHRvIHJlYWQgYW5kIAp0aGUgdGVzdCBpdHNl bGYgaXMgY2FsbGVkIGdlbV93YXRjaGRvZyBhbHJlYWR5LgoKPiArCQkgICAgICAgICAgICAgICAg Z3B1X3dhdGNob2RnX2hhbmdfbG9uZ19iYXRjaF9zaW5nbGVfZW5naW5lKGZkLCBlLT5uYW1lKTsK PiArCQkJfQo+ICsJCX0KPiArCX0KPiArCj4gKyAgICBpZ3RfZml4dHVyZSB7Cj4gKwljbG9zZShm ZCk7Cj4gKyAgICB9Cj4gK30KPiBkaWZmIC0tZ2l0IGEvdGVzdHMvbWVzb24uYnVpbGQgYi90ZXN0 cy9tZXNvbi5idWlsZAo+IGluZGV4IDUxNjdhNmMuLmIyODFiNzUgMTAwNjQ0Cj4gLS0tIGEvdGVz dHMvbWVzb24uYnVpbGQKPiArKysgYi90ZXN0cy9tZXNvbi5idWlsZAo+IEBAIC0yMTAsNiArMjEw LDcgQEAgaTkxNV9wcm9ncyA9IFsKPiAgIAknZ2VtX3VucmVmX2FjdGl2ZV9idWZmZXJzJywKPiAg IAknZ2VtX3VzZXJwdHJfYmxpdHMnLAo+ICAgCSdnZW1fd2FpdCcsCj4gKyAgICAgICAgJ2dlbV93 YXRjaGRvZycsCj4gICAJJ2dlbV93b3JrYXJvdW5kcycsCj4gICAJJ2dlbV93cml0ZV9yZWFkX3Jp bmdfc3dpdGNoJywKPiAgIAknaTkxNV9mYl90aWxpbmcnLAo+IApfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2lndC1kZXY=