From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id 01FF289169 for ; Wed, 24 Apr 2019 08:21:04 +0000 (UTC) References: <20190423000554.32274-1-carlos.santa@intel.com> From: Tvrtko Ursulin Message-ID: <91da7d53-8866-cfae-e293-6a7b5bc1945a@linux.intel.com> Date: Wed, 24 Apr 2019 09:21:02 +0100 MIME-Version: 1.0 In-Reply-To: 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: Ck9uIDI0LzA0LzIwMTkgMDM6MzEsIENhcmxvcyBTYW50YSB3cm90ZToKPiBPbiBUdWUsIDIwMTkt MDQtMjMgYXQgMTc6MjUgKzAxMDAsIFR2cnRrbyBVcnN1bGluIHdyb3RlOgo+PiBIaSwKPj4KPj4g SG93IGlzIHRoZSB0ZXN0IGRvaW5nIGFnYWluc3QgdGhlIGNvZGUgaW4gcHJvZ3Jlc3M/IEFueSBp c3N1ZXMKPj4gZGlzY292ZXJlZCBldGM/Cj4gCj4gVGVzdAkJCQkJUmVzdWx0Cj4gCj4gc2luZ2xl LWVuZ2luZS1yZXNldC1yY3MwCQlQQVNTCj4gc2luZ2xlLWVuZ2luZS1yZXNldC12Y3MwCQlQQVNT Cj4gc2luZ2xlLWVuZ2luZS1yZXNldC12Y3MxCQlQQVNTCj4gc2luZ2xlLWVuZ2luZS1yZXNldC12 ZWNzMAkJUEFTUwo+IGN0eDEtZXhlY3V0ZS1jdHgyLWV4ZWN1dGUJCVBBU1MKPiBjdHgxLWV4ZWN1 dGUtY3R4Mi1yZXNldAkJCVBBU1MKPiBjdHgxLXJlc2V0LWN0eDItcmVzZXQJCQlQQVNTCj4gY3R4 Mi1oaWdoLXByaW8tcmVzZXQtY3R4Mi1sb3ctZXhlY3V0ZQlQQVNTCj4gY3R4Mi1sb3ctcHJpby1y ZXNldC1jdHgyLWhpZ2gtZXhlY3V0ZSAgIEZBSUwKPiAKPiBUaGVyZSBzZWVtcyB0byBiZSBhIHBy b2JsZW0gd2l0aCBwcmVlbXB0aW9uIGFzIGV4cGVjdGVkLCB0aGUgdGVzdAo+IHNpbXBsZSBnZXRz IHN0dWNrLCBhbmQgdGhlIGRlZmF1bHQgcmVzZXQgdGhlbiBraWNrcyBpbi4gSSBhbHNvIHJlbW92 ZWQKPiB0aGUgZHVtbXkgc2xlZXAoMSkgYXMgeW91IHN1Z2dlc3RlZCwgdGhpcyBzdGlsbCB3b3Jr cyBhcyB0aGUgb3V0cHV0CgpJIG9ubHkgYXNrZWQgd2h5IHRoZSBzbGVlcCBpcyB0aGVyZSBhbmQg dG8gZG9jdW1lbnQgaXQuIElmIGl0IHdhc24ndCAKbmVlZGVkIGV2ZW4gYmV0dGVyLgoKPiBhYm92 ZS4KCklzIHRoaXMgd2l0aCB0aGUgaGFyZHdhcmUgd2F0Y2hkb2cgaW1wbGVtZW50YXRpb24/Cgo+ IEFib3V0IHRoZSB0ZXN0cwo+IAo+IDEuIFRoZSAic2luZ2xlLWVuZ2luZSIgdGVzdHMgYmFzaWNh bGx5IHJlc2V0cyBvbmUgZW5naW5lLCBJIHVzZQo+IHRoZSAiZm9yX2VhY2hfZW5naW5lX2NsYXNz X2luc3RhbmNlIiBsb29wZXIgdG8gc2ltcGxlIGl0ZXJhdGUgb3ZlciB0aGUKPiBkaWZmZXJlbnQg ZW5naW5lcy4gR2l2ZW4gdGhlIG9wdGlvbiB0byBzcGVjaWZ5IHdoaWNoIGVuZ2luZSB0byByZXNl dCBpcwo+IG5vdCBhIGhhcmQgcmVxdWlyZW1lbnQsIEkgY291bGQgc2ltcGx5IGxvb3AgdGhyb3Vn aCBhbGwgb2YgdGhlbSBhdAo+IG9uY2UuCj4gCj4gQWxzbywgb24gdGhpcyB0ZXN0IEkgdG9vayBB bnRvbmlvJ3Mgc3VnZ2VzdGlvbiB3aGVyZToKPiAKPiAgICAgICAgICAtIFN1Ym1pdCB3b3JrIGZy b20gY29udGV4dCBBCj4gICAgICAgICAgLSBTZXQgYSBub24gMCB0aHJlc2hvbGQgb24gY29udGV4 dCBBCj4gICAgICAgICAgLSBTdWJtaXQgbW9yZSB3b3JrIG9uIGNvbnRleHQgQQo+IAo+IEFuZCBl eHBlY3QgdGhlIHdvcmsgYmVmb3JlIHlvdSBzZXQgdGhlIHRocmVzaG9sZCBpcyBub3QgcmVzZXQg YW5kIHdoYXQKPiB3YXMgc2VudCBhZnRlciBpcy4KPiAKPiBUaGVuIEkgYXNzZXJ0IGlmIHRoZSAi YmF0Y2hfYWN0aXZlIiBkb2Vzbid0IG1hdGNoIG15IG93biBjb3VudGVyIGFmdGVyCj4gZWFjaCBy ZXNldDoKPiAKPiAJaWd0X2Fzc2VydF9lcShycy5iYXRjaF9hY3RpdmUsIGFjdGl2ZV9jb3VudCk7 CgpXaGF0IGhhcHBlbmVkIHRvIHRlc3RpbmcgdGhlIG91dHB1dCBmZW5jZSBzdGF0dXM/Cgo+IAo+ IDIuIEFib3V0IHRoZSAibG9uZ19iYXRjaF8yX2NvbnRleHRzIiB0ZXN0IGNhc2UuIFRoZSBpZGVh IGhlcmUgaXMgdGhhdAo+IHRoZSBvdXRlciBsb29wZXIgaXMgImN0eDEiIGFuZCB0aGUgaW5uZXIg bG9vcGVyIGlzICJjdHgyIi4gVGhlIG91dGVyCj4gbG9vcCByYW5kb21ubHkgZ2VuZXJhdGVzIGVu Z2luZSBpZCBhbmQgdGhlIGlubmVyIGxvb3Agc2ltcGx5IGluY3JlbWVudHMKPiBlbmdpbmVzIDEg dGhyb3VnaCA0LCB0aGVuIGJhc2VkIG9uIHRoZSBpbnB1dCBwYXJhbWV0ZXJzIHdlIGNhbiBsZXQg aXQKPiBleGVjdXRlLCBjYW5jZWwsIGFuZCBzZXQgdGhlIHByaW9yaXR5Lgo+IAo+IEZvciBleGFt cGxlIGlmIHRoZSB0ZXN0IHNheXMgImN0eDEtZXhlY3V0ZS1jdHgyLWNhbmNlbCIgdGhlbiB0aGlz IG1lYW5zCj4gdGhlIG91dGVyIGxvb3Agc2V0IHRoZSB3YXRjaGRvZyBhbmQgZXhlY3V0ZXMgd2hp bGUgdGhlIGlubmVyIGxvb3Agc2V0cwo+IHRoZSB3YXRjaGRvZyBhbmQgY2FuY2VscyB0aGUgZXhl Y3V0aW9uLCBidXQgc2luY2UgSSBhbSBsb29waW5nIHRocm91Z2gKPiBhbGwgb2YgdGhlIGVuZ2lu ZXMsIHRoZW4gaXQgd2lsbCBkbyB0aGF0IGZvciBhbGwgb2YgdGhlbToKCkhvdyBhcmUgeW91IGxv b3BpbmcgdGhyb3VnaCBlbmdpbmVzIHdoZW4gZWl0aGVyIG9mIHRoZSBpdGVyYXRvcnMgd2Fzbid0 IAp1c2VkPwoKQW55d2F5cywgZG8geW91IGhhdmUgdGhhdCByZXBseSB3aGVyZSBJIG91dGxpbmVk IHNvbWUgaWRlYXMgZm9yIHRoaW5ncyAKdG8gdGVzdD8gV2hlcmUgZG8geW91IHRoaW5rIHRoZSBj dXJyZW50IHZlcnNpb24gc3RhbmRzIGFnYWluc3QgdGhhdD8KCldpbGwgeW91IHdvcmsgb24gdGlk eWluZyB0aGUgY29kZSBhIGJpdCBzbyBpdCBpcyBlYXNpZXIgdG8gcmV2aWV3IHRoZSAKaGlnaCBs ZXZlbD8KClJlZ2FyZHMsCgpUdnJ0a28KCj4gCj4gZW5naW5lMSAtIGV4ZWN1dGVzCj4gCWVuZ2lu ZTEgLSBjYW5jZWwKPiAJZW5naW5lMiAtIGNhbmNlbAo+IAllbmdpbmUzIC0gY2FuY2VsCj4gCWVu Z2luZTQgLSBjYW5jZWwKPiBlbmdpbmU0IC0gZXhlY3V0ZXMKPiAJZW5naW5lMSAtIGNhbmNlbAo+ IAllbmdpbmUyIC0gY2FuY2VsCj4gCS4uLgo+IAo+IHYyIG9mIHRoZSBzZXJpZXMgd2FzIGhhcmRj b2RpbmcgdGhlIGVuZ2luZXMgdG8gc2F5IHZlY3MwIGFuZCByY3MwIGJ1dAo+IEFudG9uaW8gc3Vn Z2VzdGVkIHRoYXQgd2UgY291bGQgaXRlcmF0ZSB0aHJvdWdoIHRoZSBkaWZmZXJlbnQgZW5naW5l cy4KPiAKPiBSZWdhcmRzLAo+IENhcmxvcwo+IAo+IAo+Pgo+PiBJbiBnZW5lcmFsIGl0IGxvb2tz IGEgYml0IHVudGlkeS4gQ29kaW5nIHN0eWxlIGlzIG9mZiwgYWxpZ25tZW50IGlzCj4+IHJhbmRv bSBldGMuLiBzbyBhIGJpdCBkaWZmaWN1bHQgdG8gcmVhZC4gQnV0IEknbGwgbWFrZSBhIHBhc3Mg YW5kIHNlZQo+PiBpZgo+PiBJIGNhbiBtYWtlIHNlbnNlIG9mIGl0LiBJIHdvbid0IGxlYXZlIGNv bW1lbnRzIG9uIGNvZGluZyBzdHlsZSBhbmQKPj4gZm9ybWF0dGluZyBzaW5jZSB0aGVyZSBhcmUg dG9vIG1hbnkuIEJ1dCBwbGVhc2UgZG8gZml4IHRoYXQgYmVmb3JlCj4+IHJlLXBvc3RpbmcuCj4+ Cj4+IE9uIDIzLzA0LzIwMTkgMDE6MDUsIENhcmxvcyBTYW50YSB3cm90ZToKPj4+IFRoaXMgdGVz dCBhZGRzIGJhc2ljIHNldCBvZiB0ZXN0cyB0byByZXNldCB0aGUgZGlmZmVyZW50Cj4+PiBHUFUg ZW5naW5lcyB0aHJvdWdoIHRoZSBncHUgd2F0Y2hkb2cgdGltZXIuCj4+Pgo+Pj4gQ3JlZGl0cyB0 byBBbnRvbmlvIGZvciB0aGUgb3JpZ2luYWwgY29kZWJhc2UgdGhpcyBpcyBiYXNlZCBvbi4KPj4+ Cj4+PiB2MjogcmVtb3ZlIGdlbV9jb250ZXh0X2dldF9wYXJhbSgpIGR1cmluZyBzZXQgKEFudG9u aW8pCj4+PiAgICAgICByZW1vdmUgY2xlYXJpbmcgb2YgdGhlIGVuZ2luZXNfdGhyZXNob2xkW10g aW4gdGhlIGRlZmF1bHQgY2FzZQo+Pj4gICAgICAgaW5zaWRlIGNvbnRleHRfc2V0X3dhdGNoZG9n KCkuIChBbnRvbmlvKQo+Pj4gICAgICAgZml4IGluZGV4aW5nIHdoZW4gY3JlYXRpbmcgbG93L2hp Z2ggcHJpb3JpdHkgY29udGV4dHMKPj4+ICAgICAgIGdldCByaWQgb2YgMiB0aHJlYWRzIGlkZWEg KEFudG9uaW8pCj4+PiAgICAgICBmaXggY29udGV4dCBwcmlvIGJ1ZyBkdWUgdG8gd3JvbmcgaW5k ZXhpbmcgKEFudG9uaW8pCj4+PiB2Mzogbm8gbmVlZCB0byBmb3JjZSBjbGVhciBkcm1faTkxNV9n ZW1fd2F0Y2hkb2dfdGltZW91dCBzdHJ1Y3QKPj4+ICAgICAgIHdoZW4gc2V0dGluZyB0aGUgd2F0 Y2hkb2cgdGltZW91dHMgKEFudG9uaW8pCj4+PiAgICAgICAtdXNlIGdlbV9jb250ZXh0X3NldF9w cmlvcml0eSgpIGluc3RlYWQgdG8gdXNlIGVycm9yIGNoZWNraW5nCj4+PiAgICAgICAtYWx3YXlz IHVzZSBhIGxvb3BlciB0byB0ZXN0IGFsbCBlbmdpbmVzIChBbnRvbmlvKQo+Pj4gICAgICAgLW1v ZGlmeSB0ZXN0IGdwdV93YXRjaG9kZ19oYW5nX2xvbmdfYmF0Y2hfc2luZ2xlX2VuZ2luZSgpCj4+ PiAgICAgICB0byB1c2UgYSBjb3VwbGUgb2YgYmF0Y2hlcyBhbmQgc2V0IHRoZSB0aW1lb3V0IGlu IGJldHdlZW4gdGhlbQo+Pj4gKEFudG9uaW8pCj4+PiAgICAgICAtbWFrZSB1c2Ugb2YgZm9yX2Vh Y2hfZW5naW5lX2NsYXNzX2luc3RhbmNlKCkgKEFudG9uaW8pCj4+Pgo+Pj4gQ2M6IFVyc3VsaW4g VHZydGtvIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+Cj4+PiBDYzogQW50b25pbyBBcmdlbnpp YW5vIDxhbnRvbmlvLmFyZ2Vuemlhbm9AaW50ZWwuY29tPgo+Pj4gQ2M6IENocmlzIFdpbHNvbiA8 Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+Pj4gU2lnbmVkLW9mZi1ieTogQ2FybG9zIFNhbnRh IDxjYXJsb3Muc2FudGFAaW50ZWwuY29tPgo+Pj4gLS0tCj4+PiAgICB0ZXN0cy9NYWtlZmlsZS5z b3VyY2VzICAgIHwgICAzICsKPj4+ICAgIHRlc3RzL2k5MTUvZ2VtX3dhdGNoZG9nLmMgfCA1MTcK Pj4+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4+ICAg IHRlc3RzL21lc29uLmJ1aWxkICAgICAgICAgfCAgIDEgKwo+Pj4gICAgMyBmaWxlcyBjaGFuZ2Vk LCA1MjEgaW5zZXJ0aW9ucygrKQo+Pj4gICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2k5MTUv Z2VtX3dhdGNoZG9nLmMKPj4+Cj4+PiBkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuc291cmNl cyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPj4+IGluZGV4IDIxNDY5OGQuLjdmMTdmMjAgMTAw NjQ0Cj4+PiAtLS0gYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4+PiArKysgYi90ZXN0cy9NYWtl ZmlsZS5zb3VyY2VzCj4+PiBAQCAtNDQ0LDYgKzQ0NCw5IEBAIGdlbV91c2VycHRyX2JsaXRzX1NP VVJDRVMgPQo+Pj4gaTkxNS9nZW1fdXNlcnB0cl9ibGl0cy5jCj4+PiAgICBURVNUU19wcm9ncyAr PSBnZW1fd2FpdAo+Pj4gICAgZ2VtX3dhaXRfU09VUkNFUyA9IGk5MTUvZ2VtX3dhaXQuYwo+Pj4g ICAgCj4+PiArVEVTVFNfcHJvZ3MgKz0gZ2VtX3dhdGNoZG9nCj4+PiArZ2VtX3dhdGNoZG9nX1NP VVJDRVMgPSBpOTE1L2dlbV93YXRjaGRvZy5jCj4+PiArCj4+PiAgICBURVNUU19wcm9ncyArPSBn ZW1fd29ya2Fyb3VuZHMKPj4+ICAgIGdlbV93b3JrYXJvdW5kc19TT1VSQ0VTID0gaTkxNS9nZW1f d29ya2Fyb3VuZHMuYwo+Pj4gICAgCj4+PiBkaWZmIC0tZ2l0IGEvdGVzdHMvaTkxNS9nZW1fd2F0 Y2hkb2cuYyBiL3Rlc3RzL2k5MTUvZ2VtX3dhdGNoZG9nLmMKPj4+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj4+PiBpbmRleCAwMDAwMDAwLi44Zjc4OWFiCj4+PiAtLS0gL2Rldi9udWxsCj4+PiArKysg Yi90ZXN0cy9pOTE1L2dlbV93YXRjaGRvZy5jCj4+PiBAQCAtMCwwICsxLDUxNyBAQAo+Pj4gKy8q Cj4+PiArICogQ29weXJpZ2h0IMKpIDIwMTYgSW50ZWwgQ29ycG9yYXRpb24KPj4+ICsgKgo+Pj4g KyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkg cGVyc29uCj4+PiBvYnRhaW5pbmcgYQo+Pj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQg YXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKPj4+ICJTb2Z0d2FyZSIpLAo+Pj4g KyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGlu ZyB3aXRob3V0Cj4+PiBsaW1pdGF0aW9uCj4+PiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHks IG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsCj4+PiBzdWJsaWNlbnNlLAo+Pj4g KyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVy c29ucyB0bwo+Pj4gd2hvbSB0aGUKPj4+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8g c28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZwo+Pj4gY29uZGl0aW9uczoKPj4+ICsgKgo+Pj4g KyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl Cj4+PiAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4+PiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNs dWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsCj4+PiBwb3J0aW9ucyBvZiB0aGUKPj4+ ICsgKiBTb2Z0d2FyZS4KPj4+ICsgKgo+Pj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAi QVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAo+Pj4gRVhQUkVTUyBPUgo+Pj4g KyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMg T0YKPj4+IE1FUkNIQU5UQUJJTElUWSwKPj4+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8KPj4+IEVWRU5UIFNIQUxMCj4+PiAr ICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xB SU0sCj4+PiBEQU1BR0VTIE9SIE9USEVSCj4+PiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFO IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCj4+PiBBUklTSU5HCj4+PiAr ICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhF IFVTRSBPUgo+Pj4gT1RIRVIgREVBTElOR1MKPj4+ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4+PiAr ICovCj4+PiArI2luY2x1ZGUgImlndC5oIgo+Pj4gKyNpbmNsdWRlICJpZ3Rfc3lzZnMuaCIKPj4+ ICsjaW5jbHVkZSAic3dfc3luYy5oIgo+Pj4gKwo+Pj4gKyNpbmNsdWRlIDxwdGhyZWFkLmg+Cj4+ PiArI2luY2x1ZGUgPGZjbnRsLmg+Cj4+PiArCj4+PiArI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgo+ Pj4gKyNpbmNsdWRlIDxzeXMvcG9sbC5oPgo+Pj4gKyNpbmNsdWRlIDxzeXMvc2lnbmFsLmg+Cj4+ PiArI2luY2x1ZGUgImk5MTUvZ2VtX3JpbmcuaCIKPj4+ICsKPj4+ICsjZGVmaW5lIExPQ0FMX0k5 MTVfRVhFQ19CU0RfU0hJRlQJKDEzKQo+Pj4gKyNkZWZpbmUgTE9DQUxfSTkxNV9FWEVDX0JTRF9S SU5HMSAJKDEgPDwKPj4+IExPQ0FMX0k5MTVfRVhFQ19CU0RfU0hJRlQpCj4+PiArI2RlZmluZSBM T0NBTF9JOTE1X0VYRUNfQlNEX1JJTkcyIAkoMiA8PAo+Pj4gTE9DQUxfSTkxNV9FWEVDX0JTRF9T SElGVCkKPj4KPj4gVGhlc2UgYXJlIGluIG9sZCBzbyBubyBuZWVkIGZvciBsb2NhbCBkZWZpbml0 aW9ucy4KPj4KPj4+ICsKPj4+ICsjZGVmaW5lIE1BWF9QUklPIExPQ0FMX0k5MTVfQ09OVEVYVF9N QVhfVVNFUl9QUklPUklUWQo+Pj4gKyNkZWZpbmUgTUlOX1BSSU8gTE9DQUxfSTkxNV9DT05URVhU X01JTl9VU0VSX1BSSU9SSVRZCj4+PiArI2RlZmluZSBISUdIIDEKPj4+ICsjZGVmaW5lIExPVyAw Cj4+PiArI2RlZmluZSBUUlVFIDEKPj4+ICsjZGVmaW5lIEZBTFNFIDAKPj4KPj4gdHJ1ZSBhbmQg ZmFsc2UgYXJlIGZhaXIgZ2FtZSBpbiBpZ3QuCj4+Cj4+PiArI2RlZmluZSBXQVRDSERPR19USFJF U0hPTEQgKDEwMCkKPj4+ICsjZGVmaW5lIE1BWF9FTkdJTkVTIDUKPj4+ICsjZGVmaW5lIFJFTkRF Ul9DTEFTUyAwCj4+PiArI2RlZmluZSBWSURFT19ERUNPREVfQ0xBU1MgMQo+Pj4gKyNkZWZpbmUg VklERU9fRU5IQU5DRU1FTlRfQ0xBU1MgMgo+Pj4gKyNkZWZpbmUgQ09QWV9FTkdJTkVfQ0xBU1Mg Mwo+Pgo+PiBDbGFzc2VzIGFyZSBpbiBpOTE1X2RybS5oIGFzIHdlbGwuCj4+Cj4+PiArI2RlZmlu ZSBMT0NBTF9JOTE1X0NPTlRFWFRfUEFSQU1fV0FUQ0hET0cgMHgxMAo+Pj4gKwo+Pj4gKyNkZWZp bmUgUlNfTk9fRVJST1IgICAgICAwCj4+PiArI2RlZmluZSBSU19CQVRDSF9BQ1RJVkUgICgxIDw8 IDApCj4+PiArI2RlZmluZSBSU19CQVRDSF9QRU5ESU5HICgxIDw8IDEpCj4+PiArI2RlZmluZSBS U19VTktOT1dOICAgICAgICgxIDw8IDIpCj4+Cj4+IFdoYXQgYXJlIHRoZXNlPyBMb29rIHVudXNl ZCBpbiBjb2RlLgo+Pgo+Pj4gKwo+Pj4gKyNkZWZpbmUgR0VUX1JFU0VUX1NUQVRTX0lPQ1RMIERS TV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyAweDMyLAo+Pj4gc3RydWN0IGxvY2FsX2RybV9pOTE1 X3Jlc2V0X3N0YXRzKQo+Pj4gK3N0cnVjdCBsb2NhbF9kcm1faTkxNV9yZXNldF9zdGF0cyB7Cj4+ PiArCV9fdTMyIGN0eF9pZDsKPj4+ICsJX191MzIgZmxhZ3M7Cj4+PiArCV9fdTMyIHJlc2V0X2Nv dW50Owo+Pj4gKwlfX3UzMiBiYXRjaF9hY3RpdmU7Cj4+PiArCV9fdTMyIGJhdGNoX3BlbmRpbmc7 Cj4+PiArCV9fdTMyIHBhZDsKPj4+ICt9Owo+Pj4gKwo+Pj4gK2NvbnN0IHVpbnQ2NF90IHRpbWVv dXRfMTAwbXMgPSAxMDAwMDAwMDBMTDsKPj4+ICtpbnQgbnVtOwo+Pj4gKwo+Pj4gK3N0cnVjdCBk cm1faTkxNV9nZW1fd2F0Y2hkb2dfdGltZW91dCB7Cj4+PiArCXVuaW9uIHsKPj4+ICsJCXN0cnVj dCB7Cj4+PiArCQkJLyoKPj4+ICsJCQkgKiBFbmdpbmUgY2xhc3MgJiBpbnN0YW5jZSB0byBiZSBj b25maWd1cmVkIG9yCj4+PiBxdWVyaWVkLgo+Pj4gKwkJCSAqLwo+Pj4gKwkJCV9fdTE2IGVuZ2lu ZV9jbGFzczsKPj4+ICsJCQlfX3UxNiBlbmdpbmVfaW5zdGFuY2U7Cj4+PiArCQl9Owo+Pj4gKwkJ LyogSW5kZXggYmFzZWQgYWRkcmVzc2luZyBtb2RlICovCj4+PiArCQlfX3UzMiBpbmRleDsKPj4+ ICsJfTsKPj4+ICsJLyogR1BVIEVuZ2luZSB3YXRjaGRvZyByZXNldHMgdGltZW91dCBpbiB1cyAq Lwo+Pj4gKwlfX3UzMiB0aW1lb3V0X3VzOwo+Pj4gK307Cj4+PiArCj4+PiArc3RhdGljIHZvaWQg Y2xlYXJfZXJyb3Jfc3RhdGUoaW50IGZkKQo+Pj4gK3sKPj4+ICsJaW50IGRpcjsKPj4+ICsKPj4+ ICsJZGlyID0gaWd0X3N5c2ZzX29wZW4oZmQpOwo+Pj4gKwo+Pj4gKwlpZiAoZGlyIDwgMCkKPj4+ ICsJCXJldHVybjsKPj4KPj4gaWd0X3JlcXVpcmUoZGlyID49IDApIGlmIHRlc3QgcmVsaWVzIG9u IHRoaXMgYmVpbmcgcHJlc2VudD8KPj4KPj4+ICsKPj4+ICsJLyogQW55IHdyaXRlIHRvIHRoZSBl cnJvciBzdGF0ZSBjbGVhcnMgaXQgKi8KPj4+ICsJaWd0X3N5c2ZzX3NldChkaXIsICJlcnJvciIs ICIiKTsKPj4+ICsJY2xvc2UoZGlyKTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHVuc2lnbmVk IGludCBlMnJpbmcoaW50IGZkLCBjb25zdCBzdHJ1Y3QKPj4+IGludGVsX2V4ZWN1dGlvbl9lbmdp bmUyICplKQo+Pj4gK3sKPj4+ICsgICAgcmV0dXJuIGdlbV9jbGFzc19pbnN0YW5jZV90b19lYl9m bGFncyhmZCwgZS0+Y2xhc3MsIGUtCj4+Pj4gaW5zdGFuY2UpOwo+Pj4gK30KPj4+ICsKPj4+ICtz dGF0aWMgdm9pZCBjb250ZXh0X3NldF93YXRjaGRvZyhpbnQgZmQsIHVuc2lnbmVkIGVuZ2luZV9p ZCwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjdHhfaWQs IHVuc2lnbmVkCj4+PiB0aHJlc2hvbGQpCj4+PiArewo+Pj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X3dhdGNoZG9nX3RpbWVvdXQKPj4+IGVuZ2luZXNfdGhyZXNob2xkW01BWF9FTkdJTkVTXTsKPj4+ ICsJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIGFyZyA9IHsKPj4+ICsJCS5wYXJh bSA9IExPQ0FMX0k5MTVfQ09OVEVYVF9QQVJBTV9XQVRDSERPRywKPj4+ICsJCS5jdHhfaWQgPSBj dHhfaWQsCj4+PiArCQkuc2l6ZSA9IHNpemVvZihlbmdpbmVzX3RocmVzaG9sZCksCj4+PiArCQku dmFsdWUgPSAodWludDY0X3QpJmVuZ2luZXNfdGhyZXNob2xkCj4+PiArCX07Cj4+PiArCj4+PiAr CW1lbXNldCgmZW5naW5lc190aHJlc2hvbGQsIDAsIHNpemVvZihlbmdpbmVzX3RocmVzaG9sZCkp Owo+Pj4gKwo+Pj4gKwlzd2l0Y2ggKGVuZ2luZV9pZCAmIEk5MTVfRVhFQ19SSU5HX01BU0spIHsK Pj4+ICsJY2FzZSBJOTE1X0VYRUNfUkVOREVSOgo+Pj4gKwkJZW5naW5lc190aHJlc2hvbGRbUkVO REVSX0NMQVNTXS50aW1lb3V0X3VzID0gdGhyZXNob2xkOwo+Pgo+PiBMb29rcyBsaWtlIHVBUEkg aXMgaW4gc29tZSBpbnRlcmltIHN0YXRlPyBJIHdhcyBleHBlY3RpbmcgdG8gc2VlCj4+IGhlcmUK Pj4gc29tZXRoaW5nIGxpa2U6Cj4+Cj4+IAllbmdpbmVzX3RocmVzaG9sZC5lbmdpbmVfY2xhc3Mg PSBSRU5ERVJfQ0xBU1M7Cj4+IAllbmdpbmVzX3RocmVzaG9sZC5lbmdpbmVfaW5zdGFuY2UgPSAw Owo+PiAJZW5naW5lc190aHJlc2hvbGQudGltZW91dF91cyA9IHRocmVzaG9sZDsKPj4KPj4gQnV0 IHlvdSBzZWVtIHRvIGJlIHBhc3NpbmcgYW4gYXJyYXkgb2Ygc3RydWN0cyB3aGljaCBjYXJyeQo+ PiBjbGFzcy9pbnN0YW5jZSBkYXRhLCBkb24ndCB1c2UgaXQgYnV0IGluc3RlYWQgaW5mZXIgdGhl IGNsYXNzIGZyb20KPj4gdGhlCj4+IHBvc2l0aW9uIGluIHRoZSBhcnJheS4KPj4KPj4+ICsJCWJy ZWFrOwo+Pj4gKwljYXNlIEk5MTVfRVhFQ19CU0Q6Cj4+PiArCQllbmdpbmVzX3RocmVzaG9sZFtW SURFT19ERUNPREVfQ0xBU1NdLnRpbWVvdXRfdXMgPQo+Pj4gdGhyZXNob2xkOwo+Pj4gKwkJYnJl YWs7Cj4+PiArCWNhc2UgSTkxNV9FWEVDX1ZFQk9YOgo+Pj4gKwkJZW5naW5lc190aHJlc2hvbGRb VklERU9fRU5IQU5DRU1FTlRfQ0xBU1NdLnRpbWVvdXRfdXMgPQo+Pj4gdGhyZXNob2xkOwo+Pj4g KwkJYnJlYWs7Cj4+PiArCWRlZmF1bHQ6Cj4+PiArCQlicmVhazsKPj4+ICsJfQo+Pj4gKwo+Pj4g KwlnZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0 aWMgdm9pZCBiYXRjaF9idWZmZXJfZmFjdG9yeSh1aW50MzJfdCBmZCwgdWludDMyX3QgY3R4X2lk LAo+Pj4gdW5zaWduZWQgZXhlY19pZCwgdWludDMyX3QgdGFyZ2V0LCB1aW50MzJfdCBvZmZzZXQs IHVpbnQzMl90Cj4+PiAqaGFuZGxlLCB1aW50NjRfdCB0aW1lb3V0LCBpbnQgKmZlbmNlLCBpbnQg ZmVuY2VfaW5kZXgpCj4+PiArewo+Pj4gKyAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2Jq ZWN0MiBvYmpbMl07Cj4+PiArICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRy eSByZWxvYzsKPj4+ICsgICAgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVm Owo+Pj4gKyAgICBpZ3Rfc3Bpbl90ICpzcGluID0gTlVMTDsKPj4+ICsgICAgY29uc3QgdWludDMy X3QgYmJlID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsKPj4+ICsgICAgaW50IGkgPSAwOwo+Pj4gKwo+ Pj4gKyAgICBnZW1fcXVpZXNjZW50X2dwdShmZCk7Cj4+PiArCj4+PiArICAgIG1lbXNldCgmZXhl Y2J1ZiwgMCwgc2l6ZW9mKGV4ZWNidWYpKTsKPj4+ICsgICAgbWVtc2V0KCZvYmosIDAsIHNpemVv ZihvYmopKTsKPj4+ICsgICAgbWVtc2V0KCZyZWxvYywgMCwgc2l6ZW9mKHJlbG9jKSk7Cj4+PiAr Cj4+PiArICAgIGV4ZWNidWYuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIob2JqKTsKPj4+ ICsKPj4+ICsgICAgZXhlY2J1Zi5idWZmZXJfY291bnQgPSAyOwo+Pj4gKyAgICBleGVjYnVmLmZs YWdzID0gZXhlY19pZCB8IEk5MTVfRVhFQ19GRU5DRV9PVVQgOwo+Pj4gKwo+Pj4gKyAgICBvYmpb MF0uaGFuZGxlID0gdGFyZ2V0Owo+Pj4gKyAgICBvYmpbMV0uaGFuZGxlID0gZ2VtX2NyZWF0ZShm ZCwgNDA5Nik7Cj4+PiArCj4+PiArICAgIG9ialsxXS5yZWxvY2F0aW9uX2NvdW50ID0gMTsKPj4+ ICsgICAgb2JqWzFdLnJlbG9jc19wdHIgPSB0b191c2VyX3BvaW50ZXIoJnJlbG9jKTsKPj4+ICsK Pj4+ICsgICAgcmVsb2MudGFyZ2V0X2hhbmRsZSA9IG9ialswXS5oYW5kbGU7Cj4+PiArICAgIHJl bG9jLnJlYWRfZG9tYWlucyA9IEk5MTVfR0VNX0RPTUFJTl9DT01NQU5EOwo+Pj4gKyAgICByZWxv Yy53cml0ZV9kb21haW4gPSBJOTE1X0dFTV9ET01BSU5fQ09NTUFORDsKPj4+ICsgICAgcmVsb2Mu ZGVsdGEgPSBvZmZzZXQgKiBzaXplb2YodWludDMyX3QpOwo+Pj4gKwo+Pj4gKyAgICByZWxvYy5v ZmZzZXQgPSBpICogc2l6ZW9mKHVpbnQzMl90KTsKPj4+ICsgICAgZ2VtX3dyaXRlKGZkLCBvYmpb MV0uaGFuZGxlLCAwLCAmYmJlLCBzaXplb2YoYmJlKSk7Cj4+PiArCj4+PiArICAgIF9fc3luY19z eW5jaHJvbml6ZSgpOwo+Pj4gKwo+Pj4gKyAgICBpZiAoaGFuZGxlKSB7Cj4+PiArICAgICAgICAq aGFuZGxlID0gb2JqWzFdLmhhbmRsZTsKPj4+ICsgICAgICAgIHJldHVybjsKPj4KPj4gSXMgdGhp cyBwYXRoIHVzZWQgYnkgdGhlIGNhbGxlcnM/Cj4+Cj4+PiArICAgIH0KPj4+ICsKPj4+ICsgICAg Z2VtX3N5bmMoZmQsIG9ialsxXS5oYW5kbGUpOwo+Pj4gKyAgICBleGVjYnVmLnJzdmQxID0gY3R4 X2lkOwo+Pj4gKyAgICBleGVjYnVmLnJzdmQyID0gLTE7Cj4+PiArCj4+PiArICAgIHNwaW4gPSBp Z3Rfc3Bpbl9iYXRjaF9uZXcoZmQsIC5kZXBlbmRlbmN5ID0gb2JqWzBdLmhhbmRsZSk7Cj4+PiAr ICAgIGlndF9zcGluX2JhdGNoX3NldF90aW1lb3V0KHNwaW4sIHRpbWVvdXQpOwo+Pj4gKyAgICBp Z3RfYXNzZXJ0KGdlbV9ib19idXN5KGZkLCBvYmpbMF0uaGFuZGxlKSk7Cj4+PiArCj4+PiArICAg IGdlbV9leGVjYnVmX3dyKGZkLCAmZXhlY2J1Zik7Cj4+PiArICAgIGlndF9zcGluX2JhdGNoX2Zy ZWUoZmQsIHNwaW4pOwo+Pj4gKwo+Pj4gKyAgICBmZW5jZVtmZW5jZV9pbmRleF0gPSBleGVjYnVm LnJzdmQyID4+IDMyOwo+Pj4gKwo+Pj4gKyAgICBnZW1fY2xvc2UoZmQsIG9ialsxXS5oYW5kbGUp Owo+Pj4gKyAgICBnZW1fcXVpZXNjZW50X2dwdShmZCk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRp YyB1aW50MzJfdCBjcmVhdGVfY3R4X3dpdGhfcHJpb3JpdHkoaW50IGZkLCBpbnQgY3R4X3ByaW8p Cj4+PiArewo+Pj4gKwl1aW50MzJfdCBjdHggPSBnZW1fY29udGV4dF9jcmVhdGUoZmQpOwo+Pj4g Kwo+Pj4gKwlzd2l0Y2ggKGN0eF9wcmlvKSB7Cj4+PiArCWNhc2UgSElHSDoKPj4+ICsJCWdlbV9j b250ZXh0X3NldF9wcmlvcml0eShmZCwgY3R4LCBNQVhfUFJJTyk7Cj4+PiArCQlpZ3RfaW5mbygi U2V0dGluZyBNQVggcHJpb3JpdHkgJWRcbiIsIGN0eF9wcmlvKTsKPj4+ICsJCWJyZWFrOwo+Pj4g KwljYXNlIExPVzoKPj4+ICsJCWdlbV9jb250ZXh0X3NldF9wcmlvcml0eShmZCwgY3R4LCBNSU5f UFJJTyk7Cj4+PiArCQlpZ3RfaW5mbygiU2V0dGluZyBNSU4gcHJpb3JpdHkgJWRcbiIsIGN0eF9w cmlvKTsKPj4+ICsJCWJyZWFrOwo+Pj4gKwlkZWZhdWx0Ogo+Pj4gKwkJaWd0X2luZm8oIklnbm9y aW5nIGNvbnRleHQgcHJpb3JpdHkgJWRcbiIsIGN0eF9wcmlvKTsKPj4+ICsJCWJyZWFrOwo+Pj4g Kwl9Cj4+PiArCj4+PiArCXJldHVybiBjdHg7Cj4+Cj4+IFdoeSBkbyB5b3UgbmVlZCB0aGlzIGhl bHBlciB3aGljaCB0cmFuc2xhdGVzIGFuIGludGVnZXIgdG8gYW4KPj4gaW50ZWdlcj8KPj4gQ291 bGRuJ3QgeW91IGp1c3QgcGFzcyBpbiB0aGUgcmVhbCBwcmlvcml0eSB0byBzdGFydCB3aXRoPwo+ Pgo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW50IGdlbV9yZXNldF9zdGF0cyhpbnQgZmQsIGlu dCBjdHhfaWQsCj4+PiArCQkJICAgc3RydWN0IGxvY2FsX2RybV9pOTE1X3Jlc2V0X3N0YXRzICpy cykKPj4+ICt7Cj4+PiArCW1lbXNldChycywgMCwgc2l6ZW9mKCpycykpOwo+Pj4gKwlycy0+Y3R4 X2lkID0gY3R4X2lkOwo+Pj4gKwlycy0+cmVzZXRfY291bnQgPSAtMTsKPj4+ICsKPj4+ICsJaWYg KGRybUlvY3RsKGZkLCBHRVRfUkVTRVRfU1RBVFNfSU9DVEwsIHJzKSkgewo+Pj4gKwkJcHJpbnRm KCJlcnJvcjolZFxuIiwtZXJybm8pOwo+Pj4gKwkJcmV0dXJuIC1lcnJubzsKPj4KPj4gTWFrZSBp dCBhc3NlcnQgc3VjY2VzcyBoZXJlIHNpbmNlIGFsbCBjYWxsZXJzIGRvIHRoYXQgYW55d2F5IGFu ZCBpdAo+PiBtYXRjaGVzIHRoZSBjb252ZW50aW9uIGZvciBnZW0gcHJlZml4ZWQgaW9jdGwgaGVs cGVycz8KPj4KPj4+ICsJfQo+Pj4gKwlpZ3RfYXNzZXJ0KHJzLT5yZXNldF9jb3VudCAhPSAtMSk7 Cj4+PiArCXJldHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdW5zaWduZWQgaW5kZXhf dG9fZW5naW5lX2lkKGludCBmZCwgaW50IGluZGV4KQo+Pj4gK3sKPj4+ICsJdW5zaWduZWQgZW5n aW5lX2lkID0gSTkxNV9FWEVDX1JFTkRFUjsKPj4+ICsKPj4+ICsJc3dpdGNoIChpbmRleCkgewo+ Pj4gKwljYXNlIDE6Cj4+PiArCQllbmdpbmVfaWQgPSBJOTE1X0VYRUNfUkVOREVSOwo+Pj4gKwkJ YnJlYWs7Cj4+PiArCWNhc2UgMjoKPj4+ICsJCWlmIChnZW1faGFzX2JzZDIoZmQpKQo+Pj4gKwkJ CWVuZ2luZV9pZCA9IEk5MTVfRVhFQ19CU0QgfAo+Pj4gSTkxNV9FWEVDX0JTRF9SSU5HMTsKPj4+ ICsJCWVsc2UKPj4+ICsJCQllbmdpbmVfaWQgPSBJOTE1X0VYRUNfQlNEOwo+Pj4gKwkJYnJlYWs7 Cj4+PiArCWNhc2UgMzoKPj4+ICsJCWlmIChnZW1faGFzX2JzZDIoZmQpKQo+Pj4gKwkJCWVuZ2lu ZV9pZCA9IEk5MTVfRVhFQ19CU0QgfAo+Pj4gSTkxNV9FWEVDX0JTRF9SSU5HMjsKPj4+ICsJCWVs c2UKPj4+ICsJCQllbmdpbmVfaWQgPSBJOTE1X0VYRUNfQlNEOwo+Pj4gKwkJYnJlYWs7Cj4+PiAr CWNhc2UgNDoKPj4+ICsJCWVuZ2luZV9pZCA9IEk5MTVfRVhFQ19WRUJPWDsKPj4+ICsJCWJyZWFr Owo+Pj4gKwlkZWZhdWx0Ogo+Pj4gKwkJYnJlYWs7Cj4+PiArCX0KPj4KPj4gSSBob3BlIHdlIGNh biBhdm9pZCB0aGlzIG1haW50ZW5hbmNlIGJ1cmRlbiwgd2lsbCBzZWUgbGF0ZXIgaW4gcGF0Y2gK Pj4gaG93Lgo+Pgo+Pj4gKwo+Pj4gKwlyZXR1cm4gZW5naW5lX2lkOwo+Pj4gK30KPj4+ICsKPj4+ ICtzdGF0aWMgdm9pZCBpbmplY3RfaGFuZyh1aW50MzJfdCBmZCwgdW5zaWduZWQgZW5naW5lX2lk LCB1aW50MzJfdAo+Pj4gY3R4X2lkLCAgdW5zaWduZWQgZmxhZ3MpCj4+PiArewo+Pj4gKwlpZ3Rf aGFuZ190IGhhbmc7Cj4+PiArCWhhbmcgPSBpZ3RfaGFuZ19jdHgoZmQsIGN0eF9pZCwgZW5naW5l X2lkLCBmbGFncyk7Cj4+PiArCWdlbV9zeW5jKGZkLCBoYW5nLnNwaW4tPmhhbmRsZSk7Cj4+PiAr fQo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIGdwdV93YXRjaGRvZ19sb25nX2JhdGNoXzJfY29udGV4 dHMoaW50IGZkLCBpbnQKPj4+IG5lbmdpbmUsIGludCBwcmlvX2N0eDEsIGludCByZXNldF9jdHgx LCBpbnQgcHJpb19jdHgyLCBpbnQKPj4+IHJlc2V0X2N0eDIpCj4+PiArewo+Pj4gKwl1aW50MzJf dCBjdHhbNDhdOwo+Pj4gKwl1aW50MzJfdCBzY3JhdGNoWzQ4XTsKPj4+ICsJdW5zaWduZWQgZmxh Z3MgPSBIQU5HX0FMTE9XX0NBUFRVUkU7Cj4+PiArCWNvbnN0IHVpbnQ2NF90IGJhdGNoX3RpbWVv dXRfbXMgPSB0aW1lb3V0XzEwMG1zICogMzsKPj4KPj4gbXMgc3VmZml4IHVzdWFsbHkgbWVhbnMg dGhlIHVuaXQgc3RvcmVkIGlzIG1zLiBXaGlsZSBoZXJlIGl0IHNlZW1zIHRvCj4+IGJlCj4+IHNv bWV0aGluZyBlbHNlLgo+Pgo+PiBjb25zdCB1bnNpZ25lZCBsb25nIGJhdGNoX3RpbWVvdXRfbXMg PSAzMDA7Cj4+IGNvbnN0IHVuc2lnbmVkIGxvbmcgYmF0Y2hfdGltZW91dF91cyA9IDMwMGUzOwo+ PiBjb25zdCB1bnNpZ25lZCBsb25nIGJhdGNoX3RpbWVvdXRfbnMgPSAzMDBlNjsKPj4KPj4gTm90 IHN1cmUgd2hpY2ggb25lIHlvdSB3YW50LiBQcm9iYWJseSB1c2UgbXMgYW5kIHNjYWxlIHVwIGF0 IHRoZSB1c2UKPj4gc2l0ZS4KPj4KPj4+ICsJY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9l bmdpbmUyICplOwo+Pj4gKwljb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUy Owo+Pj4gKwlpbnQgaSA9IDAsIGluZGV4ID0gMCwgZW5naW5lX2lkID0gMCwgY3R4X2NudCA9IDA7 Cj4+PiArCWludCAqZmVuY2UgPSAwLCBhY3RpdmVfY291bnQgPSAwOwo+Pj4gKwlzdHJ1Y3QgbG9j YWxfZHJtX2k5MTVfcmVzZXRfc3RhdHMgcnM7Cj4+PiArCj4+PiArCWlndF9yZXF1aXJlKG5lbmdp bmUpOwo+Pj4gKwo+Pj4gKwlmZW5jZSA9IChpbnQgKiltYWxsb2Moc2l6ZW9mKGludCkgKiA0OCk7 Cj4+PiArCj4+PiArCWlmICghZmVuY2UpIHsKPj4+ICsJCWlndF9pbmZvKCJPdXQgb2YgbWVtb3J5 XG4iKTsKPj4+ICsJCWV4aXQoMSk7Cj4+PiArCX0KPj4KPj4gUmVwbGFjZSB3aXRoIGlndF9hc3Nl cnQoZmVuY2UpLgo+Pgo+Pj4gKwo+Pj4gKwkvKiBJbnRpYWxpemVzIHJhbmRvbSBudW1iZXIgZ2Vu ZXJhdG9yICovCj4+PiArCXNyYW5kKCh1bnNpZ25lZCkgdGltZShOVUxMKSk7Cj4+PiArCj4+PiAr CS8qIFRoZSBvdXRlciBsb29wZXIgaXMgY3R4MSBhbmQgdGhlIGlubmVyIGxvb3BlciBpcyBjdHgy Cj4+PiArCSAqIEJvdGggY29udGV4dHMgY2FuIHNldCB0aGVpciBwcmlvcml0eSwgY3JlYXRlIHdv cmssIGFuZAo+Pj4gY2FuY2VsIHRoZW1zZWx2ZXMKPj4+ICsJICovCj4+PiArCWZvcl9lYWNoX2Vu Z2luZV9jbGFzc19pbnN0YW5jZShmZCwgZSkgewo+Pj4gKwkJaWYgKCBzdHJjbXAoZS0+bmFtZSwg ImJjczAiKSA9PSAwICkKPj4+ICsJCQljb250aW51ZTsKPj4KPj4gVXNlIC1FTk9ERVYgb3IgLUVJ TlZBTCBmcm9tIGNvbnRleHRfc2V0X3dhdGNoZG9nIHRvIHNraXAuCj4+Cj4+PiArCj4+PiArCQlz Y3JhdGNoW2N0eF9jbnRdID0gZ2VtX2NyZWF0ZShmZCwgNDA5Nik7Cj4+PiArCQlpbmRleCA9IHJh bmQoKSAlIDQgKyAxOwo+Pj4gKwkJZW5naW5lX2lkID0gaW5kZXhfdG9fZW5naW5lX2lkKGZkLCBp bmRleCk7Cj4+PiArCj4+PiArCQkvKiBnZXQgY3VycmVudCBiYXRjaF9hY3RpdmUgY291bnQgKi8K Pj4+ICsJCWlndF9hc3NlcnRfZXEoZ2VtX3Jlc2V0X3N0YXRzKGZkLCAwLCAmcnMpLCAwKTsKPj4+ ICsJCWFjdGl2ZV9jb3VudCA9IHJzLmJhdGNoX2FjdGl2ZTsKPj4+ICsJCWlndF9hc3NlcnRfZXEo cnMuYmF0Y2hfYWN0aXZlLCBhY3RpdmVfY291bnQpOwo+Pj4gKwo+Pj4gKwkJY3R4W2N0eF9jbnRd ID0gY3JlYXRlX2N0eF93aXRoX3ByaW9yaXR5KGZkLCBwcmlvX2N0eDEpOwo+Pj4gKwkJYmF0Y2hf YnVmZmVyX2ZhY3RvcnkoZmQsIGN0eFtjdHhfY250XSwgZW5naW5lX2lkLAo+Pj4gc2NyYXRjaFtj dHhfY250XSwgMCwgTlVMTCwgYmF0Y2hfdGltZW91dF9tcywgZmVuY2UsIGN0eF9jbnQpOwo+Pj4g KwkJY29udGV4dF9zZXRfd2F0Y2hkb2coZmQsIGVuZ2luZV9pZCwgY3R4W2N0eF9jbnRdLAo+Pj4g V0FUQ0hET0dfVEhSRVNIT0xEKTsKPj4+ICsJCXNsZWVwKDEpOwo+Pgo+PiBXaGF0J3MgdGhlIHNs ZWVwIGZvcj8gSWYgdW5hdm9pZGFibGUgYXQgbGVhc3QgbmVlZHMgYSBjb21tZW50Lgo+Pgo+Pj4g Kwo+Pj4gKwkJaWYgKHJlc2V0X2N0eDEpIHsKPj4+ICsJCQljbGVhcl9lcnJvcl9zdGF0ZShmZCk7 Cj4+PiArCQkJaW5qZWN0X2hhbmcoZmQsIGVuZ2luZV9pZCwgY3R4W2N0eF9jbnRdLAo+Pj4gZmxh Z3MpOwo+Pj4gKwkJCWFjdGl2ZV9jb3VudCsrOwo+Pj4gKwkJfQo+Pj4gKwo+Pj4gKwkJLyogY2hl Y2sgYmF0Y2hfYWN0aXZlIGNvdW50IG9uY2UgYWdhaW4gYWZ0ZXIgdGhlIGhhbmcKPj4+ICovCj4+ PiArCQlpZ3RfYXNzZXJ0X2VxKGdlbV9yZXNldF9zdGF0cyhmZCwgMCwgJnJzKSwgMCk7Cj4+PiAr CQlpZ3RfYXNzZXJ0X2VxKHJzLmJhdGNoX2FjdGl2ZSwgYWN0aXZlX2NvdW50KTsKPj4+ICsKPj4+ ICsJCWN0eF9jbnQrKzsKPj4+ICsJCWkgPSAxOwo+Pj4gKwo+Pj4gKwkJZm9yX2VhY2hfZW5naW5l X2NsYXNzX2luc3RhbmNlKGZkLCBlMikgewo+Pj4gKwkJCWlmICggc3RyY21wKGUtPm5hbWUsICJi Y3MwIikgPT0gMCApCj4+Cj4+IGUyLCBidXQgcmVtb3ZlIGl0IGFsdG9nZXRoZXIgYXMgc2FpZCBh Ym92ZS4KPj4KPj4gSSBkb24ndCBnZXQgd2hhdCBpcyB0aGUgcHVycG9zZSBvZiB0d28KPj4gZm9y X2VhY2hfZW5naW5lX2NsYXNzX2luc3RhbmNlCj4+IGxvb3BzIHdoZW4gbmVpdGhlciBlIG9yIGUy IGFwcGVhciB0byBiZSB1c2VkPwo+Pgo+PiBTaW5jZSBlaXRoZXIgSSBhbSBtaXNzaW5nIHNvbWV0 aGluZyBjcml0aWNhbCBvciB0aGUgdGVzdCByZWFsbHkgaXMKPj4gdmVyeQo+PiBjb25mdXNlZCwg dW50aWwgY2xhcmlmaWVkLCBJIGFtIHNraXBwaW5nIGEgYml0IGxvd2VyIGRvd24uCj4+Cj4+PiAr CQkJCWNvbnRpbnVlOwo+Pj4gKwo+Pj4gKwkJCXNjcmF0Y2hbY3R4X2NudF0gPSBnZW1fY3JlYXRl KGZkLCA0MDk2KTsKPj4+ICsJCQllbmdpbmVfaWQgPSBpbmRleF90b19lbmdpbmVfaWQoZmQsIGkp Owo+Pj4gKwo+Pj4gKwkJCS8qIGdldCBjdXJyZW50IGJhdGNoX2FjdGl2ZSBjb3VudCAqLwo+Pj4g KwkJCWlndF9hc3NlcnRfZXEoZ2VtX3Jlc2V0X3N0YXRzKGZkLCAwLCAmcnMpLCAwKTsKPj4+ICsJ CQlhY3RpdmVfY291bnQgPSBycy5iYXRjaF9hY3RpdmU7Cj4+PiArCQkJaWd0X2Fzc2VydF9lcShy cy5iYXRjaF9hY3RpdmUsIGFjdGl2ZV9jb3VudCk7Cj4+PiArCj4+PiArCQkJY3R4W2N0eF9jbnRd ID0gY3JlYXRlX2N0eF93aXRoX3ByaW9yaXR5KGZkLAo+Pj4gcHJpb19jdHgyKTsKPj4+ICsJCQli YXRjaF9idWZmZXJfZmFjdG9yeShmZCwgY3R4W2N0eF9jbnRdLAo+Pj4gZW5naW5lX2lkLCBzY3Jh dGNoW2N0eF9jbnRdLCAwLCBOVUxMLCBiYXRjaF90aW1lb3V0X21zLCBmZW5jZSwKPj4+IGN0eF9j bnQpOwo+Pj4gKwkJCWNvbnRleHRfc2V0X3dhdGNoZG9nKGZkLCBlbmdpbmVfaWQsCj4+PiBjdHhb Y3R4X2NudF0sIFdBVENIRE9HX1RIUkVTSE9MRCk7Cj4+PiArCj4+PiArCQkJaWYgKHJlc2V0X2N0 eDIpIHsKPj4+ICsJCQkJY2xlYXJfZXJyb3Jfc3RhdGUoZmQpOwo+Pj4gKwkJCQlpbmplY3RfaGFu ZyhmZCwgZW5naW5lX2lkLAo+Pj4gY3R4W2N0eF9jbnRdLCBmbGFncyk7Cj4+PiArCQkJCWFjdGl2 ZV9jb3VudCsrOwo+Pj4gKwkJCX0KPj4+ICsKPj4+ICsJCQkvKiBjaGVjayBiYXRjaF9hY3RpdmUg Y291bnQgb25jZSBhZ2FpbiBhZnRlcgo+Pj4gdGhlIGhhbmcgKi8KPj4+ICsJCQlpZ3RfYXNzZXJ0 X2VxKGdlbV9yZXNldF9zdGF0cyhmZCwgMCwgJnJzKSwgMCk7Cj4+PiArCQkJaWd0X2Fzc2VydF9l cShycy5iYXRjaF9hY3RpdmUsIGFjdGl2ZV9jb3VudCk7Cj4+PiArCj4+PiArCQkJY3R4X2NudCsr Owo+Pj4gKwkJCWkrKzsKPj4+ICsJCX0KPj4+ICsJfQo+Pj4gKwo+Pj4gKwlmb3IgKGkgPSAwOyBp IDwgY3R4X2NudDsgaSsrKSB7Cj4+PiArCQljbG9zZShmZW5jZVtpXSk7Cj4+PiArCQlnZW1fY29u dGV4dF9kZXN0cm95KGZkLCBjdHhbaV0pOwo+Pj4gKwkJZ2VtX2Nsb3NlKGZkLCBzY3JhdGNoW2ld KTsKPj4+ICsJfQo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9pZCBncHVfd2F0Y2hvZGdfaGFu Z19sb25nX2JhdGNoX3NpbmdsZV9lbmdpbmUoaW50IGZkLAo+Pj4gY29uc3QgY2hhciAqbmFtZSkK Pj4+ICt7Cj4+PiArCXVpbnQzMl90IGN0eFsxNl07Cj4+PiArCXVpbnQzMl90IHNjcmF0Y2hbMTZd Owo+Pj4gKwlpbnQgKmZlbmNlOwo+Pj4gKwljb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2Vu Z2luZTIgKmU7Cj4+PiArCXVuc2lnbmVkIG5lbmdpbmUgPSAwOwo+Pj4gKwl1bnNpZ25lZCBlbmdp bmVfaWQgPSAwOwo+Pj4gKwlpbnQgYWN0aXZlX2NvdW50ID0gMDsKPj4+ICsJc3RydWN0IGxvY2Fs X2RybV9pOTE1X3Jlc2V0X3N0YXRzIHJzOwo+Pj4gKwlpbnQgaTsKPj4+ICsJdW5zaWduZWQgZmxh Z3MgPSBIQU5HX0FMTE9XX0NBUFRVUkU7Cj4+PiArCWNvbnN0IHVpbnQ2NF90IGJhdGNoX3RpbWVv dXRfbXMgPSB0aW1lb3V0XzEwMG1zICogNDsKPj4+ICsKPj4+ICsJZmVuY2UgPSAoaW50ICopbWFs bG9jKHNpemVvZihpbnQpKjE2KTsKPj4+ICsKPj4+ICsJaWYgKCFmZW5jZSkgewo+Pj4gKwkJaWd0 X2luZm8oIk91dCBvZiBtZW1vcnlcbiIpOwo+Pj4gKwkJZXhpdCgxKTsKPj4+ICsJfQo+Pj4gKwo+ Pj4gKwlmb3JfZWFjaF9lbmdpbmVfY2xhc3NfaW5zdGFuY2UoZmQsIGUpIHsKPj4+ICsJCWlmICgg c3RyY21wKGUtPm5hbWUsICJiY3MwIikgPT0gMCApCj4+PiArCQkJY29udGludWU7Cj4+PiArCj4+ PiArCQllbmdpbmVfaWQgPSBlMnJpbmcoZmQsIGUpOwo+Pj4gKwo+Pj4gKwkJc2NyYXRjaFtuZW5n aW5lXSA9IGdlbV9jcmVhdGUoZmQsIDQwOTYpOwo+Pj4gKwkJY3R4W25lbmdpbmVdID0gY3JlYXRl X2N0eF93aXRoX3ByaW9yaXR5KGZkLCAtMSk7Cj4+PiArCj4+PiArCQkvKiBnZXQgY3VycmVudCBi YXRjaF9hY3RpdmUgY291bnQgKi8KPj4+ICsJCWlndF9hc3NlcnRfZXEoZ2VtX3Jlc2V0X3N0YXRz KGZkLCAwLCAmcnMpLCAwKTsKPj4+ICsJCWFjdGl2ZV9jb3VudCA9IHJzLmJhdGNoX2FjdGl2ZTsK Pj4+ICsJCWlndF9hc3NlcnRfZXEocnMuYmF0Y2hfYWN0aXZlLCBhY3RpdmVfY291bnQpOwo+Pj4g Kwo+Pj4gKwkJLyogY3JlYXRlIHNvbWUgd29yayBvbiB0aGlzIGVuZ2luZSB1c2luZyB0aGUgYWJv dmUKPj4+IGN0eCovCj4+PiArCQliYXRjaF9idWZmZXJfZmFjdG9yeShmZCwgY3R4W25lbmdpbmVd LCBlbmdpbmVfaWQsCj4+PiBzY3JhdGNoW25lbmdpbmVdLCAwLCBOVUxMLCBiYXRjaF90aW1lb3V0 X21zLCBmZW5jZSwgbmVuZ2luZSk7Cj4+PiArCj4+PiArCQkvKiBzZXQgdGhlIGdwdSB3YXRjaGRv ZyB0aW1lb3V0ICovCj4+PiArCQljb250ZXh0X3NldF93YXRjaGRvZyhmZCwgZW5naW5lX2lkLCBj dHhbbmVuZ2luZV0sCj4+PiBXQVRDSERPR19USFJFU0hPTEQpOwo+Pj4gKwkJY2xlYXJfZXJyb3Jf c3RhdGUoZmQpOwo+Pj4gKwo+Pj4gKwkJLyoKPj4+ICsJCSAqIGdpdmUgZW5vdWdoIHRpbWUgZm9y IHRoZSBiYXRjaCBidWZmZXIgdG8gcnVuCj4+PiArCQkgKi8KPj4+ICsJCW5hbm9zbGVlcCgmKHN0 cnVjdCB0aW1lc3BlYyl7IC50dl9zZWMgPSAwLAo+Pj4gKwkJCQkJICAgICAgLnR2X25zZWMgPQo+ Pj4gYmF0Y2hfdGltZW91dF9tcyAqIDIgfSwgTlVMTCk7Cj4+PiArCj4+PiArCQkvKiBjcmVhdGUg c29tZSB3b3JrIG9uIHRoaXMgZW5naW5lIHVzaW5nIHRoZSBhYm92ZQo+Pj4gY3R4Ki8KPj4+ICsJ CWJhdGNoX2J1ZmZlcl9mYWN0b3J5KGZkLCBjdHhbbmVuZ2luZV0sIGVuZ2luZV9pZCwKPj4+IHNj cmF0Y2hbbmVuZ2luZV0sIDAsIE5VTEwsIGJhdGNoX3RpbWVvdXRfbXMsIGZlbmNlLCBuZW5naW5l KTsKPj4+ICsJCWNvbnRleHRfc2V0X3dhdGNoZG9nKGZkLCBlbmdpbmVfaWQsIGN0eFtuZW5naW5l XSwKPj4+IFdBVENIRE9HX1RIUkVTSE9MRCk7Cj4+PiArCQljbGVhcl9lcnJvcl9zdGF0ZShmZCk7 Cj4+PiArCj4+PiArCQkvKiBjYW5jZWwgb25seSB0aGUgYmF0Y2ggcmVxdWVzdGVkICovCj4+PiAr CQlpZiAoIHN0cmNtcChlLT5uYW1lLCBuYW1lKSA9PSAwICkgewo+Pj4gKwkJCWluamVjdF9oYW5n KGZkLCBlbmdpbmVfaWQsIGN0eFtuZW5naW5lXSwKPj4+IGZsYWdzKTsKPj4+ICsJCQlhY3RpdmVf Y291bnQrKzsKPj4+ICsJCX0KPj4+ICsKPj4+ICsJCS8qIGNoZWNrIGJhdGNoX2FjdGl2ZSBjb3Vu dCBvbmNlIGFnYWluIGFmdGVyIHRoZSBoYW5nCj4+PiAqLwo+Pj4gKwkJaWd0X2Fzc2VydF9lcShn ZW1fcmVzZXRfc3RhdHMoZmQsIDAsICZycyksIDApOwo+Pj4gKwkJYWN0aXZlX2NvdW50ID0gcnMu YmF0Y2hfYWN0aXZlOwo+Pj4gKwkJaWd0X2Fzc2VydF9lcShycy5iYXRjaF9hY3RpdmUsIGFjdGl2 ZV9jb3VudCk7Cj4+PiArCj4+PiArCQluZW5naW5lKys7Cj4+PiArCX0KPj4+ICsKPj4+ICsJZm9y IChpID0gMDsgaSA8IG5lbmdpbmU7IGkrKykgewo+Pj4gKwkJY2xvc2UoZmVuY2VbaV0pOwo+Pj4g KwkJZ2VtX2NvbnRleHRfZGVzdHJveShmZCwgY3R4W2ldKTsKPj4+ICsJCWdlbV9jbG9zZShmZCwg c2NyYXRjaFtpXSk7Cj4+PiArCX0KPj4+ICt9Cj4+PiArCj4+PiAraWd0X21haW4KPj4+ICt7Cj4+ PiArCWludCBmZDsKPj4+ICsJdW5zaWduZWQgaW50IG5lbmdpbmUgPSAwOwo+Pj4gKwl1bnNpZ25l ZCBpbnQgZW5naW5lOwo+Pj4gKwljb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIg KmU7Cj4+PiArCj4+PiArCWlndF9za2lwX29uX3NpbXVsYXRpb24oKTsKPj4+ICsKPj4+ICsJaWd0 X2ZpeHR1cmUgewo+Pj4gKwkJZmQgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKPj4+ ICsJCWlndF9yZXF1aXJlX2dlbShmZCk7Cj4+PiArCj4+PiArCQlmb3JfZWFjaF9waHlzaWNhbF9l bmdpbmUoZmQsIGVuZ2luZSkKPj4+ICsJCQluZW5naW5lKys7Cj4+PiArCQlpZ3RfcmVxdWlyZShu ZW5naW5lKTsKPj4KPj4gRG8gd2UgaGF2ZSBHUFVzIHdpdGggbm8gZW5naW5lcz8KPj4KPj4+ICsJ fQo+Pj4gKwo+Pj4gKwlpZ3Rfc3VidGVzdF9ncm91cCB7Cj4+PiArCj4+PiArCQlpZ3Rfc3VidGVz dF9mKCJncHUtd2F0Y2hkb2ctbG9uZy1iYXRjaC1sb3ctcHJpby1jdHgxLQo+Pj4gcmVzZXQtY3R4 Mi1oaWdoLXByaW8tZXhlY3V0ZSIpIHsKPj4+ICsJCQlpbnQgcHJpb19jdHgxID0gTE9XOwo+Pj4g KwkJCWludCBwcmlvX2N0eDIgPSBISUdIOwo+Pj4gKwkJCWludCByZXNldF9jdHgxID0gVFJVRTsK Pj4+ICsJCQlpbnQgcmVzZXRfY3R4MiA9IEZBTFNFOwo+Pj4gKwkJCWdwdV93YXRjaGRvZ19sb25n X2JhdGNoXzJfY29udGV4dHMoZmQsIG5lbmdpbmUsCj4+PiBwcmlvX2N0eDEsIHJlc2V0X2N0eDEs IHByaW9fY3R4MiwgcmVzZXRfY3R4Mik7Cj4+PiArCQl9Cj4+Cj4+IFRoaXMgaXMga2luZCBvZiB2 ZXJib3NlLiBJIHJlY29tbWVuZCBvdXQgdXN1YWwgcGF0dGVybiBhbG9uZyB0aGUKPj4gbGluZXMg b2Y6Cj4+Cj4+IHN0cnVjdCB7Cj4+IAljaGFyICpuYW1lOwo+PiAJaW50IHByaW9bMl07Cj4+IAli b29sIHJlc2V0WzJdOwo+PiB9IHRlc3RzW10gPSB7Cj4+IAl7ICJjaGFuZ2UgbWUiLCB7MCwgMH0s IHtmYWxzZSwgZmFsc2V9IH0sCj4+IAl7ICJjaGFuZ2UgbWUiLCB7LTEsIDB9LCB7dHJ1ZSwgZmFs c2V9IH0sCj4+IAkuLi4KPj4gfTsKPj4KPj4gZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGVz dHMpOyBpKyspIHsKPj4gCWlndF9zdWJ0ZXN0X2YoImxvbmctYmF0Y2gtJXMiLCB0ZXN0c1tpXS0+ bmFtZSkKPj4gCQlsb25nX2JhdGNoKGZkLCB0ZXN0c1tpXS5wcmlvWzBdLCB0ZXN0c1tpXS5jdHhb MF0sIC4uLik7Cj4+IH0KPj4KPj4gU28geW91IHJ1biBhbGwgc3VidGVzdHMgZnJvbSBhIHNpbmds ZSBsb29wLgo+Pgo+PiBSZWdhcmRzLAo+Pgo+PiBUdnJ0a28KPj4KPj4+ICsKPj4+ICsJCWlndF9z dWJ0ZXN0X2YoImdwdS13YXRjaGRvZy1sb25nLWJhdGNoLWhpZ2gtcHJpby1jdHgxLQo+Pj4gcmVz ZXQtY3R4Mi1sb3ctcHJpby1leGVjdXRlIikgewo+Pj4gKwkJCWludCBwcmlvX2N0eDEgPSBISUdI Owo+Pj4gKwkJCWludCBwcmlvX2N0eDIgPSBMT1c7Cj4+PiArCQkJaW50IHJlc2V0X2N0eDEgPSBU UlVFOwo+Pj4gKwkJCWludCByZXNldF9jdHgyID0gRkFMU0U7Cj4+PiArCQkJZ3B1X3dhdGNoZG9n X2xvbmdfYmF0Y2hfMl9jb250ZXh0cyhmZCwgbmVuZ2luZSwKPj4+IHByaW9fY3R4MSwgcmVzZXRf Y3R4MSwgcHJpb19jdHgyLCByZXNldF9jdHgyKTsKPj4+ICsJCX0KPj4+ICsKPj4+ICsJCWlndF9z dWJ0ZXN0X2YoImdwdS13YXRjaGRvZy1sb25nLWJhdGNoLWN0eDEtcmVzZXQtY3R4Mi0KPj4+IGV4 ZWN1dGUiKSB7Cj4+PiArCQkJaW50IHByaW9fY3R4MSA9IC0xOwo+Pj4gKwkJCWludCBwcmlvX2N0 eDIgPSAtMTsKPj4+ICsJCQlpbnQgcmVzZXRfY3R4MSA9IFRSVUU7Cj4+PiArCQkJaW50IHJlc2V0 X2N0eDIgPSBGQUxTRTsKPj4+ICsJCQlncHVfd2F0Y2hkb2dfbG9uZ19iYXRjaF8yX2NvbnRleHRz KGZkLCBuZW5naW5lLAo+Pj4gcHJpb19jdHgxLCByZXNldF9jdHgxLCBwcmlvX2N0eDIsIHJlc2V0 X2N0eDIpOwo+Pj4gKwkJfQo+Pj4gKwo+Pj4gKwkJaWd0X3N1YnRlc3RfZigiZ3B1LXdhdGNoZG9n LWxvbmctYmF0Y2gtY3R4MS1leGVjdXRlLQo+Pj4gY3R4Mi1yZXNldCIpIHsKPj4+ICsJCQlpbnQg cHJpb19jdHgxID0gLTE7Cj4+PiArCQkJaW50IHByaW9fY3R4MiA9IC0xOwo+Pj4gKwkJCWludCBy ZXNldF9jdHgxID0gRkFMU0U7Cj4+PiArCQkJaW50IHJlc2V0X2N0eDIgPSBUUlVFOwo+Pj4gKwkJ CWdwdV93YXRjaGRvZ19sb25nX2JhdGNoXzJfY29udGV4dHMoZmQsIG5lbmdpbmUsCj4+PiBwcmlv X2N0eDEsIHJlc2V0X2N0eDEsIHByaW9fY3R4MiwgcmVzZXRfY3R4Mik7Cj4+PiArCQl9Cj4+PiAr Cj4+PiArCQlpZ3Rfc3VidGVzdF9mKCJncHUtd2F0Y2hkb2ctbG9uZy1iYXRjaC1jdHgxLWV4ZWN1 dGUtCj4+PiBjdHgyLWV4ZWN1dGUiKSB7Cj4+PiArCQkJaW50IHByaW9fY3R4MSA9IC0xOwo+Pj4g KwkJCWludCBwcmlvX2N0eDIgPSAtMTsKPj4+ICsJCQlpbnQgcmVzZXRfY3R4MSA9IEZBTFNFOwo+ Pj4gKwkJCWludCByZXNldF9jdHgyID0gRkFMU0U7Cj4+PiArCQkJZ3B1X3dhdGNoZG9nX2xvbmdf YmF0Y2hfMl9jb250ZXh0cyhmZCwgbmVuZ2luZSwKPj4+IHByaW9fY3R4MSwgcmVzZXRfY3R4MSwg cHJpb19jdHgyLCByZXNldF9jdHgyKTsKPj4+ICsJCX0KPj4+ICsKPj4+ICsJICAgICAgIF9fZm9y X2VhY2hfZW5naW5lX2NsYXNzX2luc3RhbmNlKGUpIHsKPj4+ICsJCQlpZ3Rfc3VidGVzdF9ncm91 cCB7Cj4+PiArCQkJCWlndF9maXh0dXJlIHsKPj4+ICsJCQkJZ2VtX3JlcXVpcmVfZW5naW5lKGZk LAo+Pj4gKwkJCQkJZS0+Y2xhc3MsCj4+PiArCQkJCQllLT5pbnN0YW5jZSk7Cj4+PiArCQkJCX0K Pj4+ICsJCQkvKiBubyBzdXBwb3J0IGZvciBncHUgd2F0Y2hkb2cgb24gYmNzMCAqLwo+Pj4gKwkJ CWlmIChzdHJjbXAoZS0+bmFtZSwgImJjczAiKSA9PSAwKQo+Pj4gKwkJCQljb250aW51ZTsKPj4K Pj4gU29mdHdhcmUgaW1wbGVtZW50YXRpb24gY2FuIHN1cHBvcnQgaXQuIFNvIGRvbid0IHNraXAg aGVyZSBidXQgc2tpcAo+PiBpbgo+PiB0aGUgc3VidGVzdCBpZiB5b3UgZ2V0IC1FTk9ERVYgd2hl biB5b3UgdHJ5IHRvIGNvbmZpZ3VyZSBpdC4KPj4KPj4+ICsKPj4+ICsJCSAgICAgICAgICAgIGln dF9zdWJ0ZXN0X2YoImdwdS13YXRjaGRvZy1sb25nLWJhdGNoLQo+Pj4gc2luZ2xlLWVuZ2luZS1y ZXNldC0lcyIsIGUtPm5hbWUpCj4+Cj4+IERvbid0IHByZWZpeCBhbGwgdGVzdHMgd2l0aCBncHUt d2F0Y2hkb2csIGl0IGlzIHZlcnkgdmVyYm9zZSB0byByZWFkCj4+IGFuZAo+PiB0aGUgdGVzdCBp dHNlbGYgaXMgY2FsbGVkIGdlbV93YXRjaGRvZyBhbHJlYWR5Lgo+Pgo+Pj4gKwkJICAgICAgICAg ICAgICAgIGdwdV93YXRjaG9kZ19oYW5nX2xvbmdfYmF0Y2hfc2luZ2xlX2VuZwo+Pj4gaW5lKGZk LCBlLT5uYW1lKTsKPj4+ICsJCQl9Cj4+PiArCQl9Cj4+PiArCX0KPj4+ICsKPj4+ICsgICAgaWd0 X2ZpeHR1cmUgewo+Pj4gKwljbG9zZShmZCk7Cj4+PiArICAgIH0KPj4+ICt9Cj4+PiBkaWZmIC0t Z2l0IGEvdGVzdHMvbWVzb24uYnVpbGQgYi90ZXN0cy9tZXNvbi5idWlsZAo+Pj4gaW5kZXggNTE2 N2E2Yy4uYjI4MWI3NSAxMDA2NDQKPj4+IC0tLSBhL3Rlc3RzL21lc29uLmJ1aWxkCj4+PiArKysg Yi90ZXN0cy9tZXNvbi5idWlsZAo+Pj4gQEAgLTIxMCw2ICsyMTAsNyBAQCBpOTE1X3Byb2dzID0g Wwo+Pj4gICAgCSdnZW1fdW5yZWZfYWN0aXZlX2J1ZmZlcnMnLAo+Pj4gICAgCSdnZW1fdXNlcnB0 cl9ibGl0cycsCj4+PiAgICAJJ2dlbV93YWl0JywKPj4+ICsgICAgICAgICdnZW1fd2F0Y2hkb2cn LAo+Pj4gICAgCSdnZW1fd29ya2Fyb3VuZHMnLAo+Pj4gICAgCSdnZW1fd3JpdGVfcmVhZF9yaW5n X3N3aXRjaCcsCj4+PiAgICAJJ2k5MTVfZmJfdGlsaW5nJywKPj4+Cj4gCj4gCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0 CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldg==