From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH i-g-t] tests/gem_softpin: New tests for softpin feature Date: Tue, 1 Dec 2015 10:35:59 +0000 Message-ID: <565D780F.3070709@linux.intel.com> References: <1448907744-15263-1-git-send-email-vinay.belgaumkar@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id 4117D6E7FC for ; Tue, 1 Dec 2015 02:36:01 -0800 (PST) In-Reply-To: <1448907744-15263-1-git-send-email-vinay.belgaumkar@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Vinay Belgaumkar , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org CkhpLAoKSnVzdCBvbmUgY29tbWVudCBkZWVwIGRvd24uCgpPbiAzMC8xMS8xNSAxODoyMiwgVmlu YXkgQmVsZ2F1bWthciB3cm90ZToKPiBUaGVzZSB0ZXN0cyBleGVyY2lzZSB0aGUgdXNlcnB0ciBp b2N0bCB0byBjcmVhdGUgc2hhcmVkIGJ1ZmZlcnMKPiBiZXR3ZWVuIENQVSBhbmQgR1BVLiBUaGV5 IGNvbnRhaW4gZXJyb3IgYW5kIG5vcm1hbCB1c2FnZSBzY2VuYXJpb3MuCj4gVGhleSBhbHNvIGNv bnRhaW4gYSBjb3VwbGUgb2Ygc3RyZXNzIHRlc3RzIHdoaWNoIGNvcHkgYnVmZmVycyBiZXR3ZWVu Cj4gQ1BVIGFuZCBHUFUuIFRoZXNlIHRlc3RzIHJlbHkgb24gdGhlIHNvZnRwaW4gcGF0Y2ggaW4g b3JkZXIgdG8gcGluIGJ1ZmZlcnMKPiB0byBhIGNlcnRhaW4gVkEuCj4KPiBDYXZlYXQ6IFRoZXNl IHRlc3RzIHdlcmUgZGVzaWduZWQgdG8gcnVuIG9uIDY0LWJpdCBzeXN0ZW0uIEZ1dHVyZSB3b3Jr Cj4gaW5jbHVkZXMgYWRkaW5nIGxvZ2ljIHRvIGVuc3VyZSB0aGVzZSB0ZXN0cyBjYW4gcnVuIG9u IDMyLWJpdCBzeXN0ZW1zIHdpdGgKPiBQUEdUVCBzdXBwb3J0LiBTb21lIHRlc3RzIGFyZSBjdXJy ZW50bHkgZGlzYWJsZWQgZm9yIDMyLWJpdCBzeXN0ZW1zIGZvciB0aGF0Cj4gcmVhc29uLgo+Cj4g djI6IEFkZGVkIGNjIGFuZCBzaWduZWQtb2ZmLWJ5IGZpZWxkcwo+Cj4gdjM6IEZpeGVkIHJldmll dyBjb21tZW50cywgYWRkZWQgaGVscGVyIGZ1bmN0aW9ucy4gUmVtb3ZlZCB1c2VycHRyIGVycm9y Cj4gc2NlbmFyaW9zIGNvdmVyZWQgYnkgZXhpc3RpbmcgdXNlcnB0ciB0ZXN0cy4gTW9kaWZpZWQg c3RyZXNzIHRlc3QgdG8gaGF2ZQo+IDEwMEsgYnVmZmVycywgaXQgbm93IHJ1bnMgZm9yIH4zMCBt aW5zLCBjaGVja3MgZXZlcnkgZWxlbWVudCBoYXMgYmVlbiB3cml0dGVuCj4gdG8gY29ycmVjdGx5 LCBhbmQgcGlucyBidWZmZXJzIGF0IGRpZmZlcmVudCBWTUFzLgo+Cj4gdjQ6IENoYW5nZWQgbmFt ZSB0byBnZW1fc29mdHBpbgo+Cj4gdjU6IE1vcmUgZml4ZXMuIFJlbW92ZWQgdGhlIGZpbGUgYmFz ZWQgdGVzdHMsIHdpbGwgbW92ZSB0aGVtIHRvIHVzZXJwdHIgdGVzdHMuCj4gQWRkZWQgYSBmdW5j dGlvbiB0aGF0IHZhbGlkYXRlcyBhcHByb3ByaWF0ZSBQUEdUVCBzdXBwb3J0IGJlZm9yZSBydW5u aW5nIHRlc3RzLgo+IE9wdGltaXplZCBzdGFjayBzcGFjZSBhbmQgbWVtb3J5IGZvb3RwcmludCBp biBzdHJlc3MgdGVzdC4gUmVtb3ZlZCB0aGUgZXZpY3Rpb24KPiB0ZXN0LCB3aWxsIGFkZCBpdCBi YWNrIGFmdGVyIHZlcmlmeWluZyBwcm9wZXIgZnVuY3Rpb25hbGl0eS4KPgo+IHY2OiBTcGxpdCBi YXNpYyB0ZXN0IGludG8gdXNlcnB0ciBhbmQgYm8KPiBGaXhlZCBzb21lIGNvZGluZyBzdHlsZSBp c3N1ZXMuCj4KPiB2NzogRW5oYW5jZWQgaW52YWxpZCB2bWEgcGlubmluZyB0ZXN0IHRvIHZlcmlm eSAzMi1iaXQgUFBHVFQgZnVuY3Rpb25hbGl0eS4KPiBFbmFibGVkIHRoZSB0ZXN0IGZvciAzMi1i aXQgUFBHVFQgc3lzdGVtcywgYW5kIHZlcmlmeSBwaW5uaW5nIGZhaWxzIGFib3ZlCj4gMzItYml0 IGFkZHJlc3Nlcy4gRW5oYW5jZWQgdGhlIGhpZ2ggYWRyZXNzIHBpbm5pbmcgdGVzdCB0byBlbnN1 cmUgcGlubmluZwo+IGZhaWxzIHdoZW4gRVhFQ19PQkpFQ1RfUElOTkVEIGZsYWcgaXMgbm90IHVz ZWQuIFNvbWUgbW9yZSBjb3NtZXRpYyBmaXhlcyB0bwo+IGNsb3NlIGJ1ZmZlciBoYW5kbGVzLiBD aGFuZ2VkIHVzZXJwdHIgZnVuY3Rpb24gdG8gdXNlZCBzeW5jaHJvbml6ZWQgb3BlcmF0aW9ucy4K Pgo+IENjOiBNaWNoZWwgVGhpZXJyeSA8bWljaGVsLnRoaWVycnlAaW50ZWwuY29tPgo+IENjOiBU dnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgo+IFNpZ25lZC1vZmYtYnk6 IFZpbmF5IEJlbGdhdW1rYXIgPHZpbmF5LmJlbGdhdW1rYXJAaW50ZWwuY29tPgo+IC0tLQo+ICAg dGVzdHMvLmdpdGlnbm9yZSAgICAgICB8ICAgIDEgKwo+ICAgdGVzdHMvTWFrZWZpbGUuc291cmNl cyB8ICAgIDEgKwo+ICAgdGVzdHMvZ2VtX3NvZnRwaW4uYyAgICB8IDEwNTAgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gICAzIGZpbGVzIGNoYW5nZWQs IDEwNTIgaW5zZXJ0aW9ucygrKQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2dlbV9zb2Z0 cGluLmMKPgo+IGRpZmYgLS1naXQgYS90ZXN0cy8uZ2l0aWdub3JlIGIvdGVzdHMvLmdpdGlnbm9y ZQo+IGluZGV4IDgwYWY5YTcuLjQyNDg3MGIgMTAwNjQ0Cj4gLS0tIGEvdGVzdHMvLmdpdGlnbm9y ZQo+ICsrKyBiL3Rlc3RzLy5naXRpZ25vcmUKPiBAQCAtMjEsNiArMjEsNyBAQCBnZW1fYmFkX2Js aXQKPiAgIGdlbV9iYWRfbGVuZ3RoCj4gICBnZW1fYmFkX3JlbG9jCj4gICBnZW1fYmFzaWMKPiAr Z2VtX3NvZnRwaW4KPiAgIGdlbV9jYWNoaW5nCj4gICBnZW1fY2xvc2VfcmFjZQo+ICAgZ2VtX2Nv bmN1cnJlbnRfYWxsCj4gZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMgYi90ZXN0 cy9NYWtlZmlsZS5zb3VyY2VzCj4gaW5kZXggOGZiMmRlOC4uMjAwOGQ0YSAxMDA2NDQKPiAtLS0g YS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4gKysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+ IEBAIC0xMSw2ICsxMSw3IEBAIFRFU1RTX3Byb2dzX00gPSBcCj4gICAJZHJ2X2hhbmdtYW4gXAo+ ICAgCWdlbV9iYWRfcmVsb2MgXAo+ICAgCWdlbV9iYXNpYyBcCj4gKwlnZW1fc29mdHBpbiBcCj4g ICAJZ2VtX2NhY2hpbmcgXAo+ICAgCWdlbV9jbG9zZV9yYWNlIFwKPiAgIAlnZW1fY29uY3VycmVu dF9ibGl0IFwKPiBkaWZmIC0tZ2l0IGEvdGVzdHMvZ2VtX3NvZnRwaW4uYyBiL3Rlc3RzL2dlbV9z b2Z0cGluLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjg2Y2ZhZjgK PiAtLS0gL2Rldi9udWxsCj4gKysrIGIvdGVzdHMvZ2VtX3NvZnRwaW4uYwo+IEBAIC0wLDAgKzEs MTA1MCBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgo+ ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwg dG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5k IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0 byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0 aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1l cmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBj b3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUK PiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xs b3dpbmcgY29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Ug YW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+ICsgKiBwYXJh Z3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9y dGlvbnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUgSVMg UFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBP Ugo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBB VVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1B R0VTIE9SIE9USEVSCj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09O VFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4gKyAqIEZST00sIE9VVCBPRiBPUiBJ TiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElO R1MKPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ICsgKgo+ICsgKiBBdXRob3JzOgo+ICsgKiAgICBW aW5heSBCZWxnYXVta2FyIDx2aW5heS5iZWxnYXVta2FyQGludGVsLmNvbT4KPiArICogICAgVGhv bWFzIERhbmllbCA8dGhvbWFzLmRhbmllbEBpbnRlbC5jb20+Cj4gKyAqCj4gKyAqLwo+ICsKPiAr I2luY2x1ZGUgPHVuaXN0ZC5oPgo+ICsjaW5jbHVkZSA8c3RkbGliLmg+Cj4gKyNpbmNsdWRlIDxz dGRpbnQuaD4KPiArI2luY2x1ZGUgPHN0ZGlvLmg+Cj4gKyNpbmNsdWRlIDxzdHJpbmcuaD4KPiAr I2luY2x1ZGUgPGZjbnRsLmg+Cj4gKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgo+ICsjaW5jbHVkZSA8 ZXJybm8uaD4KPiArI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Cj4gKyNpbmNsdWRlIDxzeXMvaW9jdGwu aD4KPiArI2luY2x1ZGUgPHN5cy90aW1lLmg+Cj4gKyNpbmNsdWRlIDxtYWxsb2MuaD4KPiArI2lu Y2x1ZGUgImRybS5oIgo+ICsjaW5jbHVkZSAiaW9jdGxfd3JhcHBlcnMuaCIKPiArI2luY2x1ZGUg ImRybXRlc3QuaCIKPiArI2luY2x1ZGUgImludGVsX2NoaXBzZXQuaCIKPiArI2luY2x1ZGUgImlu dGVsX2lvLmgiCj4gKyNpbmNsdWRlICJpOTE1X2RybS5oIgo+ICsjaW5jbHVkZSA8YXNzZXJ0Lmg+ Cj4gKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgo+ICsjaW5jbHVkZSA8c3lzL2lwYy5oPgo+ICsjaW5j bHVkZSA8c3lzL3NobS5oPgo+ICsjaW5jbHVkZSAiaWd0X2ttcy5oIgo+ICsjaW5jbHVkZSA8aW50 dHlwZXMuaD4KPiArI2luY2x1ZGUgPHN5cy90eXBlcy5oPgo+ICsjaW5jbHVkZSA8c3lzL3N0YXQu aD4KPiArCj4gKyNkZWZpbmUgQk9fU0laRSA0MDk2Cj4gKyNkZWZpbmUgTVVMVElQQUdFX0JPX1NJ WkUgMiAqIEJPX1NJWkUKPiArI2RlZmluZSBTVE9SRV9CQVRDSF9CVUZGRVJfU0laRSA0Cj4gKyNk ZWZpbmUgRVhFQ19PQkpFQ1RfUElOTkVECSgxPDw0KQo+ICsjZGVmaW5lIEVYRUNfT0JKRUNUX1NV UFBPUlRTXzQ4Ql9BRERSRVNTICgxPDwzKQo+ICsjZGVmaW5lIFNIQVJFRF9CVUZGRVJfU0laRSA0 MDk2Cj4gKwo+ICt0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9nZW1fdXNlcnB0ciBpOTE1X2dlbV91 c2VycHRyOwo+ICsKPiArc3RhdGljIHVpbnQzMl90IGluaXRfdXNlcnB0cihpbnQgZmQsIGk5MTVf Z2VtX3VzZXJwdHIgKiwgdm9pZCAqcHRyLCB1aW50NjRfdCBzaXplKTsKPiArc3RhdGljIHZvaWQg KmNyZWF0ZV9tZW1fYnVmZmVyKHVpbnQ2NF90IHNpemUpOwo+ICtzdGF0aWMgaW50IGdlbV9jYWxs X3VzZXJwdHJfaW9jdGwoaW50IGZkLCBpOTE1X2dlbV91c2VycHRyICp1c2VycHRyKTsKPiArc3Rh dGljIHZvaWQgZ2VtX3Bpbl91c2VycHRyX3Rlc3Qodm9pZCk7Cj4gK3N0YXRpYyB2b2lkIGdlbV9w aW5fYm9fdGVzdCh2b2lkKTsKPiArc3RhdGljIHZvaWQgZ2VtX3Bpbl9pbnZhbGlkX3ZtYV90ZXN0 KHZvaWQpOwo+ICtzdGF0aWMgdm9pZCBnZW1fcGluX292ZXJsYXBfdGVzdCh2b2lkKTsKPiArc3Rh dGljIHZvaWQgZ2VtX3Bpbl9oaWdoX2FkZHJlc3NfdGVzdCh2b2lkKTsKPiArCj4gKyNkZWZpbmUg Tk9fUFBHVFQgMAo+ICsjZGVmaW5lIEFMSUFTSU5HX1BQR1RUIDEKPiArI2RlZmluZSBGVUxMXzMy X0JJVF9QUEdUVCAyCj4gKyNkZWZpbmUgRlVMTF80OF9CSVRfUFBHVFQgMwo+ICsvKiB1c2VzX2Z1 bGxfcHBndHQKPiArICogRmluZHMgc3VwcG9ydGVkIFBQR1RUIGRldGFpbHMuCj4gKyAqIEBmZCBE Uk0gZmQKPiArICogQG1pbiBjYW4gYmUKPiArICogMCAtIE5vIFBQR1RUCj4gKyAqIDEgLSBBbGlh c2luZyBQUEdUVAo+ICsgKiAyIC0gRnVsbCBQUEdUVCAoMzJiKQo+ICsgKiAzIC0gRnVsbCBQUEdU VCAoNDhiKQo+ICsgKiBSRVRVUk5TIHRydWUvZmFsc2UgaWYgbWluIHN1cHBvcnQgaXMgcHJlc2Vu dAo+ICsqLwo+ICtzdGF0aWMgYm9vbCB1c2VzX2Z1bGxfcHBndHQoaW50IGZkLCBpbnQgbWluKQo+ ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2V0cGFyYW0gZ3A7Cj4gKwlpbnQgdmFsID0gMDsKPiAr Cj4gKwltZW1zZXQoJmdwLCAwLCBzaXplb2YoZ3ApKTsKPiArCWdwLnBhcmFtID0gMTg7IC8qIEhB U19BTElBU0lOR19QUEdUVCAqLwo+ICsJZ3AudmFsdWUgPSAmdmFsOwo+ICsKPiArCWlmIChkcm1J b2N0bChmZCwgRFJNX0lPQ1RMX0k5MTVfR0VUUEFSQU0sICZncCkpCj4gKwkJcmV0dXJuIDA7Cj4g Kwo+ICsJZXJybm8gPSAwOwo+ICsJcmV0dXJuIHZhbCA+PSBtaW47Cj4gK30KPiArCj4gKwo+ICsv KiBnZW1fY2FsbF91c2VycHRyX2lvY3RsCj4gKyAqIEhlbHBlciB0byBjYWxsIGlvY3RsIC0gVE9E TzogbW92ZSB0byBsaWIKPiArICogQGZkIC0gZHJtIGZkCj4gKyAqIEB1c2VycHRyIC0gcG9pbnRl ciB0byBpbml0aWFsaXNlZCB1c2VycHRyCj4gKyAqIFJFVFVSTlMgc3RhdHVzIG9mIGlvY3RsIGNh bGwKPiArKi8KPiArc3RhdGljIGludCBnZW1fY2FsbF91c2VycHRyX2lvY3RsKGludCBmZCwgaTkx NV9nZW1fdXNlcnB0ciAqdXNlcnB0cikKPiArewo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBk cm1Jb2N0bChmZCwgRFJNX0lPQ1RMX0k5MTVfR0VNX1VTRVJQVFIsIHVzZXJwdHIpOwo+ICsKPiAr CWlmIChyZXQpCj4gKwkJcmV0ID0gZXJybm87Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsK PiArLyogaW5pdF91c2VycHRyCj4gKyAqIEhlbHBlciB0aGF0IGluaXRzIHVzZXJwdHIgYW4gcmV0 dXJucyBoYW5kbGUKPiArICogQGZkIC0gZHJtIGZkCj4gKyAqIEB1c2VycHRyIC0gcG9pbnRlciB0 byBlbXB0eSB1c2VycHRyCj4gKyAqIEBwdHIgLSBidWZmZXIgdG8gYmUgc2hhcmVkCj4gKyAqIEBz aXplIC0gc2l6ZSBvZiBidWZmZXIKPiArICogQHJvIC0gcmVhZCBvbmx5IGZsYWcKPiArICogUkVU VVJOUyBoYW5kbGUgdG8gc2hhcmVkIGJ1ZmZlcgo+ICsqLwo+ICtzdGF0aWMgdWludDMyX3QgaW5p dF91c2VycHRyKGludCBmZCwgaTkxNV9nZW1fdXNlcnB0ciAqdXNlcnB0ciwgdm9pZCAqcHRyLAo+ ICsJCQkgICAgIHVpbnQ2NF90IHNpemUpCj4gK3sKPiArCWludCByZXQ7Cj4gKwo+ICsJbWVtc2V0 KCh2b2lkKil1c2VycHRyLCAwLCBzaXplb2YoaTkxNV9nZW1fdXNlcnB0cikpOwo+ICsKPiArCXVz ZXJwdHItPnVzZXJfcHRyID0gKHVpbnQ2NF90KXB0cjsgLyogTmVlZCB0aGUgY2FzdCB0byBvdmVy Y29tZSBjb21waWxlciB3YXJuaW5nICovCj4gKwl1c2VycHRyLT51c2VyX3NpemUgPSBzaXplOwo+ ICsJdXNlcnB0ci0+ZmxhZ3MgPSAwOyAvKiB1c2Ugc3luY2hyb25pemVkIG9wZXJhdGlvbiAqLwo+ ICsKPiArCXJldCA9IGdlbV9jYWxsX3VzZXJwdHJfaW9jdGwoZmQsIHVzZXJwdHIpOwo+ICsJaWd0 X2Fzc2VydF9lcShyZXQsIDApOwo+ICsKPiArCXJldHVybiB1c2VycHRyLT5oYW5kbGU7Cj4gK30K PiArCj4gKy8qIGNyZWF0ZV9tZW1fYnVmZmVyCj4gKyAqIENyZWF0ZXMgYSA0SyBhbGlnbmVkIENQ VSBidWZmZXIKPiArICogQHNpemUgLSBzaXplIG9mIGJ1ZmZlcgo+ICsgKiBSRVRVUk5TIHBvaW50 ZXIgdG8gYnVmZmVyIG9mIEBzaXplCj4gKyovCj4gK3N0YXRpYyB2b2lkICpjcmVhdGVfbWVtX2J1 ZmZlcih1aW50NjRfdCBzaXplKQo+ICt7Cj4gKwl2b2lkICphZGRyOwo+ICsJaW50IHJldDsKPiAr Cj4gKwlyZXQgPSBwb3NpeF9tZW1hbGlnbigmYWRkciwgNDA5Niwgc2l6ZSk7Cj4gKwlpZ3RfYXNz ZXJ0KHJldCA9PSAwKTsKPiArCj4gKwlyZXR1cm4gYWRkcjsKPiArfQo+ICsKPiArLyogc2V0dXBf ZXhlY19vYmoKPiArICogcG9wdWxhdGUgZXhlYyBvYmplY3QKPiArICogQGV4ZWMgLSBleGVjIG9i amVjdAo+ICsgKiBAaGFuZGxlIC0gaGFuZGxlIHRvIGdlbSBidWZmZXIKPiArICogQGZsYWdzIC0g YW55IGZsYWdzCj4gKyAqIEBvZmZzZXQgLSByZXF1ZXN0ZWQgVk1BCj4gKyovCj4gK3N0YXRpYyB2 b2lkIHNldHVwX2V4ZWNfb2JqKHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICpleGVj LAo+ICsJCQkgICB1aW50MzJfdCBoYW5kbGUsIHVpbnQzMl90IGZsYWdzLAo+ICsJCQkgICB1aW50 NjRfdCBvZmZzZXQpCj4gK3sKPiArCW1lbXNldChleGVjLCAwLCBzaXplb2Yoc3RydWN0IGRybV9p OTE1X2dlbV9leGVjX29iamVjdDIpKTsKPiArCWV4ZWMtPmhhbmRsZSA9IGhhbmRsZTsKPiArCWV4 ZWMtPmZsYWdzID0gZmxhZ3M7Cj4gKwlleGVjLT5vZmZzZXQgPSBvZmZzZXQ7Cj4gK30KPiArCj4g Ky8qIGdlbV9zdG9yZV9kYXRhX3N2bQo+ICsgKiBwb3B1bGF0ZSBiYXRjaCBidWZmZXIgd2l0aCBN SV9TVE9SRV9EV09SRF9JTU0gY29tbWFuZAo+ICsgKiBAZmQ6IGRybSBmaWxlIGRlc2NyaXB0b3IK PiArICogQGNtZF9idWY6IGJhdGNoIGJ1ZmZlcgo+ICsgKiBAdmFkZHI6IGRlc3RpbmF0aW9uIFZp cnR1YWwgYWRkcmVzcwo+ICsgKiBAZGF0YTogZGF0YSB0byBiZSBzdG9yZSBhdCBkZXN0aW5hdGlv bgo+ICsgKiBAZW5kOiB3aGV0aGVyIHRvIGVuZCBiYXRjaCBidWZmZXIgb3Igbm90Cj4gKyovCj4g K3N0YXRpYyBpbnQgZ2VtX3N0b3JlX2RhdGFfc3ZtKGludCBmZCwgdWludDMyX3QgKmNtZF9idWYs IHVpbnQ2NF90IHZhZGRyLAo+ICsJCQkgICAgICB1aW50MzJfdCBkYXRhLCBib29sIGVuZCkKPiAr ewo+ICsJaW50IGkgPSAwOwo+ICsKPiArCWNtZF9idWZbaSsrXSA9IE1JX1NUT1JFX0RXT1JEX0lN TTsKPiArCWNtZF9idWZbaSsrXSA9IHZhZGRyICYgMHhGRkZGRkZGQzsKPiArCWNtZF9idWZbaSsr XSA9ICh2YWRkciA+PiAzMikgJiAweEZGRkY7IC8qIGJpdHMgMzI6NDcgKi8KPiArCj4gKwljbWRf YnVmW2krK10gPSBkYXRhOwo+ICsJaWYgKGVuZCkgewo+ICsJCWNtZF9idWZbaSsrXSA9IE1JX0JB VENIX0JVRkZFUl9FTkQ7Cj4gKwkJY21kX2J1ZltpKytdID0gMDsKPiArCX0KPiArCj4gKwlyZXR1 cm4oaSAqIHNpemVvZih1aW50MzJfdCkpOwo+ICt9Cj4gKwo+ICsvKiBnZW1fc3RvcmVfZGF0YQo+ ICsgKiBwb3B1bGF0ZSBiYXRjaCBidWZmZXIgd2l0aCBNSV9TVE9SRV9EV09SRF9JTU0gY29tbWFu ZAo+ICsgKiBUaGlzIG9uZSBmaWxscyB1cCByZWxvYyBidWZmZXIgYXMgd2VsbAo+ICsgKiBAZmQ6 IGRybSBmaWxlIGRlc2NyaXB0b3IKPiArICogQGNtZF9idWY6IGJhdGNoIGJ1ZmZlcgo+ICsgKiBA ZGF0YTogZGF0YSB0byBiZSBzdG9yZSBhdCBkZXN0aW5hdGlvbgo+ICsgKiBAcmVsb2MgLSByZWxv Y2F0aW9uIGVudHJ5Cj4gKyAqIEBlbmQ6IHdoZXRoZXIgdG8gZW5kIGJhdGNoIGJ1ZmZlciBvciBu b3QKPiArKi8KPiArc3RhdGljIGludCBnZW1fc3RvcmVfZGF0YShpbnQgZmQsIHVpbnQzMl90ICpj bWRfYnVmLAo+ICsJCQkgIHVpbnQzMl90IGhhbmRsZSwgdWludDMyX3QgZGF0YSwKPiArCQkJICBz dHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgKnJlbG9jLAo+ICsJCQkgIGJvb2wg ZW5kKQo+ICt7Cj4gKwlpbnQgaSA9IDA7Cj4gKwo+ICsJY21kX2J1ZltpKytdID0gTUlfU1RPUkVf RFdPUkRfSU1NOwo+ICsJY21kX2J1ZltpKytdID0gMDsgLyogbG93ZXIgMzEgYml0cyBvZiA0OCBi aXQgYWRkcmVzcyAtIDAgcmVsb2MgbmVlZGVkICovCj4gKwljbWRfYnVmW2krK10gPSAwOyAvKiB1 cHBlciAxNSBiaXRzIG9mIDQ4IGJpdCBhZGRyZXNzIC0gMCByZWxvYyBuZWVkZWQgKi8KPiArCXJl bG9jLT5vZmZzZXQgPSAxICogc2l6ZW9mKHVpbnQzMl90KTsKPiArCXJlbG9jLT5kZWx0YSA9IDA7 Cj4gKwlyZWxvYy0+dGFyZ2V0X2hhbmRsZSA9IGhhbmRsZTsKPiArCXJlbG9jLT5yZWFkX2RvbWFp bnMgPSBJOTE1X0dFTV9ET01BSU5fUkVOREVSOwo+ICsJcmVsb2MtPndyaXRlX2RvbWFpbiA9IEk5 MTVfR0VNX0RPTUFJTl9SRU5ERVI7Cj4gKwlyZWxvYy0+cHJlc3VtZWRfb2Zmc2V0ID0gMDsKPiAr CWNtZF9idWZbaSsrXSA9IGRhdGE7Cj4gKwlpZiAoZW5kKSB7Cj4gKwkJY21kX2J1ZltpKytdID0g TUlfQkFUQ0hfQlVGRkVSX0VORDsKPiArCQljbWRfYnVmW2krK10gPSAwOwo+ICsJfQo+ICsKPiAr CXJldHVybiAoaSAqIHNpemVvZih1aW50MzJfdCkpOwo+ICt9Cj4gKwo+ICsvKiBzZXR1cF9leGVj YnVmZmVyCj4gKyAqIGhlbHBlciBmb3IgYnVmZmVyIGV4ZWN1dGlvbgo+ICsgKiBAZXhlY2J1ZiAt IHBvaW50ZXIgdG8gZXhlY2J1ZmZlcgo+ICsgKiBAZXhlY19vYmplY3QgLSBwb2ludGVyIHRvIGV4 ZWMgb2JqZWN0MiBzdHJ1Y3QKPiArICogQHJpbmcgLSByaW5nIHRvIGJlIHVzZWQKPiArICogQGJ1 ZmZlcl9jb3VudCAtIGhvdyBtYW51IGJ1ZmZlcnMgdG8gc3VibWl0Cj4gKyAqIEBiYXRjaF9sZW5n dGggLSBsZW5ndGggb2YgYmF0Y2ggYnVmZmVyCj4gKyovCj4gK3N0YXRpYyB2b2lkIHNldHVwX2V4 ZWNidWZmZXIoc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiAqZXhlY2J1ZiwKPiArCQkJ ICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqZXhlY19vYmplY3QsCj4gKwkJ CSAgICAgaW50IHJpbmcsIGludCBidWZmZXJfY291bnQsIGludCBiYXRjaF9sZW5ndGgpCj4gK3sK PiArCWV4ZWNidWYtPmJ1ZmZlcnNfcHRyID0gKHVpbnQ2NF90KWV4ZWNfb2JqZWN0Owo+ICsJZXhl Y2J1Zi0+YnVmZmVyX2NvdW50ID0gYnVmZmVyX2NvdW50Owo+ICsJZXhlY2J1Zi0+YmF0Y2hfc3Rh cnRfb2Zmc2V0ID0gMDsKPiArCWV4ZWNidWYtPmJhdGNoX2xlbiA9IGJhdGNoX2xlbmd0aDsKPiAr CWV4ZWNidWYtPmNsaXByZWN0c19wdHIgPSAwOwo+ICsJZXhlY2J1Zi0+bnVtX2NsaXByZWN0cyA9 IDA7Cj4gKwlleGVjYnVmLT5EUjEgPSAwOwo+ICsJZXhlY2J1Zi0+RFI0ID0gMDsKPiArCWV4ZWNi dWYtPmZsYWdzID0gcmluZzsKPiArCWk5MTVfZXhlY2J1ZmZlcjJfc2V0X2NvbnRleHRfaWQoKmV4 ZWNidWYsIDApOwo+ICsJZXhlY2J1Zi0+cnN2ZDIgPSAwOwo+ICt9Cj4gKwo+ICsvKiBzdWJtaXRf YW5kX3N5bmMKPiArICogSGVscGVyIGZ1bmN0aW9uIGZvciBleGVjIGFuZCBzeW5jIGZ1bmN0aW9u cwo+ICsgKiBAZmQgLSBkcm0gZmQKPiArICogQGV4ZWNidWYgLSBwb2ludGVyIHRvIGV4ZWNidWZm ZXIKPiArICogQGJhdGNoX2J1Zl9oYW5kbGUgLSBiYXRjaCBidWZmZXIgaGFuZGxlCj4gKyovCj4g K3N0YXRpYyB2b2lkIHN1Ym1pdF9hbmRfc3luYyhpbnQgZmQsIHN0cnVjdCBkcm1faTkxNV9nZW1f ZXhlY2J1ZmZlcjIgKmV4ZWNidWYsCj4gKwkJCSAgICB1aW50MzJfdCBiYXRjaF9idWZfaGFuZGxl KQo+ICt7Cj4gKwlnZW1fZXhlY2J1ZihmZCwgZXhlY2J1Zik7Cj4gKwlnZW1fc3luYyhmZCwgYmF0 Y2hfYnVmX2hhbmRsZSk7Cj4gK30KPiArCj4gKy8qIGdlbV91c2VycHRyX3N5bmMKPiArICogaGVs cGVyIGZvciBzeW5jaW5nIHRvIENQVSBkb21haW4gLSBjb3B5L3Bhc3RlIGZyb20gdXNlcmJsaXQK PiArICogQGZkIC0gZHJtIGZkCj4gKyAqIEBoYW5kbGUgLSBidWZmZXIgaGFuZGxlIHRvIHN5bmMK PiArKi8KPiArc3RhdGljIHZvaWQgZ2VtX3VzZXJwdHJfc3luYyhpbnQgZmQsIHVpbnQzMl90IGhh bmRsZSkKPiArewo+ICsJZ2VtX3NldF9kb21haW4oZmQsIGhhbmRsZSwgSTkxNV9HRU1fRE9NQUlO X0NQVSwgSTkxNV9HRU1fRE9NQUlOX0NQVSk7Cj4gK30KPiArCj4gKwo+ICsvKiBnZW1fcGluX3Vz ZXJwdHJfdGVzdAo+ICsgKiBUaGlzIHRlc3Qgd2lsbCBjcmVhdGUgYSBzaGFyZWQgYnVmZmVyLCBh bmQgY3JlYXRlIGEgY29tbWFuZAo+ICsgKiBmb3IgR1BVIHRvIHdyaXRlIGRhdGEgaW4gaXQKPiAr ICogQ1BVIHdpbGwgcmVhZCBhbmQgbWFrZSBzdXJlIGV4cGVjdGVkIHZhbHVlIGlzIG9idGFpbmVk Cj4gKyAqIE1hbGxvYyBhIDRLIGJ1ZmZlcgo+ICsgKiBTaGFyZSBidWZmZXIgd2l0aCB3aXRoIEdQ VSBieSB1c2luZyB1c2VycHRyIGlvY3RsCj4gKyAqIENyZWF0ZSBiYXRjaCBidWZmZXIgdG8gd3Jp dGUgREFUQSB0byBmaXJzdCBkd29yZCBvZiBidWZmZXIKPiArICogVXNlIDB4MTAwMCBhZGRyZXNz IGFzIGRlc3RpbmF0aW9uIGFkZHJlc3MgaW4gYmF0Y2ggYnVmZmVyCj4gKyAqIFNldCBFWEVDX09C SkVDVF9QSU5ORUQgZmxhZyBpbiBleGVjIG9iamVjdAo+ICsgKiBTZXQgJ29mZnNldCcgaW4gZXhl YyBvYmplY3QgdG8gMHgxMDAwCj4gKyAqIFN1Ym1pdCBleGVjYnVmZmVyCj4gKyAqIFZlcmlmeSB2 YWx1ZSBvZiBmaXJzdCBEV09SRCBpbiBzaGFyZWQgYnVmZmVyIG1hdGNoZXMgREFUQQo+ICsqLwo+ ICtzdGF0aWMgdm9pZCBnZW1fcGluX3VzZXJwdHJfdGVzdCh2b2lkKQo+ICt7Cj4gKwlpOTE1X2dl bV91c2VycHRyIHVzZXJwdHI7Cj4gKwlpbnQgZmQ7Cj4gKwl1aW50MzJfdCAqc2hhcmVkX2J1ZmZl cjsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKPiArCXN0cnVj dCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIGV4ZWNfb2JqZWN0MlsyXTsKPiArCXVpbnQzMl90 IGJhdGNoX2J1ZmZlcltTVE9SRV9CQVRDSF9CVUZGRVJfU0laRSArIDJdOwo+ICsJdWludDMyX3Qg YmF0Y2hfYnVmX2hhbmRsZSwgc2hhcmVkX2J1Zl9oYW5kbGU7Cj4gKwlpbnQgcmluZywgbGVuOwo+ ICsJY29uc3QgdWludDMyX3QgZGF0YSA9IDB4MTIzNDU2Nzg7Cj4gKwl1aW50NjRfdCBwaW5uaW5n X29mZnNldCA9IDB4MTAwMDsKPiArCj4gKwlmZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfSU5U RUwpOwo+ICsJaWd0X3JlcXVpcmUodXNlc19mdWxsX3BwZ3R0KGZkLCBBTElBU0lOR19QUEdUVCkp Owo+ICsJYmF0Y2hfYnVmX2hhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIEJPX1NJWkUpOwo+ICsKPiAr CS8qIGNyZWF0ZSBjcHUgYnVmZmVyICovCj4gKwlzaGFyZWRfYnVmZmVyID0gY3JlYXRlX21lbV9i dWZmZXIoQk9fU0laRSk7Cj4gKwkKPiArCS8qIHNoYXJlIHdpdGggR1BVICovCj4gKwlzaGFyZWRf YnVmX2hhbmRsZSA9IGluaXRfdXNlcnB0cihmZCwgJnVzZXJwdHIsIHNoYXJlZF9idWZmZXIsCj4g KwkJCQkJIEJPX1NJWkUpOwo+ICsKPiArCS8qIGNyZWF0ZSBjb21tYW5kIGJ1ZmZlciB3aXRoIHdy aXRlIGNvbW1hbmQgKi8KPiArCWxlbiA9IGdlbV9zdG9yZV9kYXRhX3N2bShmZCwgYmF0Y2hfYnVm ZmVyLCBwaW5uaW5nX29mZnNldCwgZGF0YSwgdHJ1ZSk7Cj4gKwlnZW1fd3JpdGUoZmQsIGJhdGNo X2J1Zl9oYW5kbGUsIDAsIGJhdGNoX2J1ZmZlciwgbGVuKTsKPiArCj4gKwkvKiBzdWJtaXQgY29t bWFuZCBidWZmZXIgKi8KPiArCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMF0sIHNoYXJl ZF9idWZfaGFuZGxlLAo+ICsJCSAgICAgICBFWEVDX09CSkVDVF9QSU5ORUQsIHBpbm5pbmdfb2Zm c2V0KTsKPiArCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMV0sIGJhdGNoX2J1Zl9oYW5k bGUsIDAsIDApOwo+ICsKPiArCXJpbmcgPSBJOTE1X0VYRUNfUkVOREVSOwo+ICsKPiArCXNldHVw X2V4ZWNidWZmZXIoJmV4ZWNidWYsIGV4ZWNfb2JqZWN0MiwgcmluZywgMiwgbGVuKTsKPiArCXN1 Ym1pdF9hbmRfc3luYyhmZCwgJmV4ZWNidWYsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICsJZ2VtX3Vz ZXJwdHJfc3luYyhmZCwgc2hhcmVkX2J1Zl9oYW5kbGUpOwo+ICsKPiArCS8qIENoZWNrIGlmIGRy aXZlciBwaW5uZWQgdGhlIGJ1ZmZlciBhcyByZXF1ZXN0ZWQgKi8KPiArCWlndF9mYWlsX29uX2Yo ZXhlY19vYmplY3QyWzBdLm9mZnNldCAhPSBwaW5uaW5nX29mZnNldCwKPiArCQkJIlxuRmFpbGVk IHRvIHBpbiBhdCByZXF1ZXN0ZWQgb2Zmc2V0Iik7Cj4gKwkvKiBjaGVjayBvbiBDUFUgdG8gc2Vl IGlmIHZhbHVlIGNoYW5nZXMgKi8KPiArCWlndF9mYWlsX29uX2Yoc2hhcmVkX2J1ZmZlclswXSAh PSBkYXRhLAo+ICsJCSAgICAgICJcbkNQVSByZWFkIGRvZXMgbm90IG1hdGNoIEdQVSB3cml0ZSxc Cj4gKwkJCWV4cGVjdGVkOiAweCV4LCBnb3Q6IDB4JXhcbiIsCj4gKwkJCWRhdGEsIHNoYXJlZF9i dWZmZXJbMF0pOwo+ICsKPiArCWdlbV9jbG9zZShmZCwgYmF0Y2hfYnVmX2hhbmRsZSk7Cj4gKwln ZW1fY2xvc2UoZmQsIHNoYXJlZF9idWZfaGFuZGxlKTsKPiArCWNsb3NlKGZkKTsKPiArCWZyZWUo c2hhcmVkX2J1ZmZlcik7Cj4gK30KPiArCj4gKy8qIGdlbV9waW5fYm8KPiArICogVGhpcyB0ZXN0 IHdpbGwgdGVzdCBzb2Z0cGlubmluZyBvZiBhIGdlbSBidWZmZXIgb2JqZWN0Cj4gKyAqIE1hbGxv YyBhIDRLIGJ1ZmZlcgo+ICsgKiBDcmVhdGUgYmF0Y2ggYnVmZmVyIHRvIHdyaXRlIERBVEEgdG8g Zmlyc3QgZHdvcmQgb2YgYnVmZmVyCj4gKyAqIFVzZSAweDEwMDAgYWRkcmVzcyBhcyBkZXN0aW5h dGlvbiBhZGRyZXNzIGluIGJhdGNoIGJ1ZmZlcgo+ICsgKiBTZXQgRVhFQ19PQkpFQ1RfUElOTkVE IGZsYWcgaW4gZXhlYyBvYmplY3QKPiArICogU2V0ICdvZmZzZXQnIGluIGV4ZWMgb2JqZWN0IHRv IDB4MTAwMAo+ICsgKiBTdWJtaXQgZXhlY2J1ZmZlcgo+ICsgKiBWZXJpZnkgdmFsdWUgcGlubmVk IG9mZnNldCBtYXRjaGVzIHRoZSByZXF1ZXN0Cj4gKyovCj4gK3N0YXRpYyB2b2lkIGdlbV9waW5f Ym9fdGVzdCh2b2lkKQo+ICt7Cj4gKwlpbnQgZmQ7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4 ZWNidWZmZXIyIGV4ZWNidWY7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBl eGVjX29iamVjdDJbMl07Cj4gKwl1aW50MzJfdCBiYXRjaF9idWZmZXJbU1RPUkVfQkFUQ0hfQlVG RkVSX1NJWkUgKyAyXTsKPiArCXVpbnQzMl90IGJhdGNoX2J1Zl9oYW5kbGUsIHVuc2hhcmVkX2J1 Zl9oYW5kbGU7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgcmVsb2Nb NF07Cj4gKwlpbnQgcmluZywgbGVuOwo+ICsJdWludDMyX3QgdmFsdWU7Cj4gKwljb25zdCB1aW50 MzJfdCBkYXRhID0gMHgxMjM0NTY3ODsKPiArCXVpbnQ2NF90IHBpbm5pbmdfb2Zmc2V0ID0gMHgx MDAwOwo+ICsKPiArCWZkID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9JTlRFTCk7Cj4gKwlpZ3Rf cmVxdWlyZSh1c2VzX2Z1bGxfcHBndHQoZmQsIEFMSUFTSU5HX1BQR1RUKSk7Cj4gKwliYXRjaF9i dWZfaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgQk9fU0laRSk7Cj4gKwo+ICsJLyogY3JlYXRlIGdl bSBidWZmZXIgKi8KPiArCXVuc2hhcmVkX2J1Zl9oYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCBCT19T SVpFKTsKPiArCQo+ICsJLyogY3JlYXRlIGNvbW1hbmQgYnVmZmVyIHdpdGggd3JpdGUgY29tbWFu ZCAqLwo+ICsJbGVuID0gZ2VtX3N0b3JlX2RhdGEoZmQsIGJhdGNoX2J1ZmZlciwgdW5zaGFyZWRf YnVmX2hhbmRsZSwgZGF0YSwKPiArCQkJCXJlbG9jLCB0cnVlKTsKPiArCWdlbV93cml0ZShmZCwg YmF0Y2hfYnVmX2hhbmRsZSwgMCwgYmF0Y2hfYnVmZmVyLCBsZW4pOwo+ICsKPiArCS8qIHN1Ym1p dCBjb21tYW5kIGJ1ZmZlciAqLwo+ICsJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlswXSwg dW5zaGFyZWRfYnVmX2hhbmRsZSwKPiArCQkgICAgICAgRVhFQ19PQkpFQ1RfUElOTkVELCBwaW5u aW5nX29mZnNldCk7Cj4gKwlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzFdLCBiYXRjaF9i dWZfaGFuZGxlLCAwLCAwKTsKPiArCWV4ZWNfb2JqZWN0MlsxXS5yZWxvY2F0aW9uX2NvdW50ID0g MTsKPiArCWV4ZWNfb2JqZWN0MlsxXS5yZWxvY3NfcHRyID0gKHVpbnQ2NF90KXJlbG9jOwo+ICsK PiArCXJpbmcgPSBJOTE1X0VYRUNfUkVOREVSOwo+ICsKPiArCXNldHVwX2V4ZWNidWZmZXIoJmV4 ZWNidWYsIGV4ZWNfb2JqZWN0MiwgcmluZywgMiwgbGVuKTsKPiArCXN1Ym1pdF9hbmRfc3luYyhm ZCwgJmV4ZWNidWYsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICsKPiArCS8qIENoZWNrIGlmIGRyaXZl ciBwaW5uZWQgdGhlIGJ1ZmZlciBhcyByZXF1ZXN0ZWQgKi8KPiArCWlndF9mYWlsX29uX2YoZXhl Y19vYmplY3QyWzBdLm9mZnNldCAhPSBwaW5uaW5nX29mZnNldCwKPiArCQkJIlxuRmFpbGVkIHRv IHBpbiBhdCByZXF1ZXN0ZWQgb2Zmc2V0Iik7Cj4gKwlnZW1fcmVhZChmZCwgdW5zaGFyZWRfYnVm X2hhbmRsZSwgMCwgKHZvaWQqKSZ2YWx1ZSwgNCk7Cj4gKwlpZ3RfYXNzZXJ0KHZhbHVlID09IGRh dGEpOwo+ICsKPiArCWdlbV9jbG9zZShmZCwgYmF0Y2hfYnVmX2hhbmRsZSk7Cj4gKwlnZW1fY2xv c2UoZmQsIHVuc2hhcmVkX2J1Zl9oYW5kbGUpOwo+ICsJY2xvc2UoZmQpOwo+ICt9Cj4gKwo+ICsK PiArLyogZ2VtX211bHRpcGxlX3Byb2Nlc3NfdGVzdAo+ICsgKiBSdW4gYmFzaWMgdGVzdCBzaW11 bHRhbmVvdXNseSB3aXRoIG11bHRpcGxlIHByb2Nlc3Nlcwo+ICsgKiBUaGlzIHdpbGwgdGVzdCBw aW5uaW5nIHNhbWUgVkEgc2VwYXJhdGVseSBpbiBlYWNoIHByb2Nlc3MKPiArCj4gKyAqIGZvcmso KTsKPiArICogRXhlY3V0ZSBiYXNpYyB0ZXN0IGluIHBhcmVudC9jaGlsZCBwcm9jZXNzZXMKPiAr Ki8KPiArI2RlZmluZSBNQVhfTlVNX1BST0NFU1NFUyAxMAo+ICsKPiArc3RhdGljIHZvaWQgZ2Vt X211bHRpcGxlX3Byb2Nlc3NfdGVzdCh2b2lkKQo+ICt7Cj4gKwlpZ3RfZm9yayhjaGlsZCwgTUFY X05VTV9QUk9DRVNTRVMpIHsKPiArCQlnZW1fcGluX3VzZXJwdHJfdGVzdCgpOwo+ICsJfQo+ICsJ aWd0X3dhaXRjaGlsZHJlbigpOwo+ICt9Cj4gKwo+ICsKPiArLyogZ2VtX3JlcGluX3Rlc3QKPiAr ICogVGhpcyB0ZXN0IHRyaWVzIHRvIHJlcGluIGEgYnVmZmVyIGF0IGEgcHJldmlvdXNseSBwaW5u ZWQgdm1hCj4gKyAqIGZyb20gYSBkaWZmZXJlbnQgZXhlY2J1Zi4KPiArICogTWFsbG9jIGEgNEsg YnVmZmVyCj4gKyAqIFNoYXJlIGJ1ZmZlciB3aXRoIHdpdGggR1BVIGJ5IHVzaW5nIHVzZXJwdHIg aW9jdGwKPiArICogQ3JlYXRlIGJhdGNoIGJ1ZmZlciB0byB3cml0ZSBEQVRBIHRvIGZpcnN0IGR3 b3JkIG9mIGJ1ZmZlcgo+ICsgKiBVc2UgMHgxMDAwIGFkZHJlc3MgYXMgZGVzdGluYXRpb24gYWRk cmVzcyBpbiBiYXRjaCBidWZmZXIKPiArICogU2V0IEVYRUNfT0JKRUNUX1BJTk5FRCBmbGFnIGlu IGV4ZWMgb2JqZWN0Cj4gKyAqIFNldCAnb2Zmc2V0JyBpbiBleGVjIG9iamVjdCB0byAweDEwMDAg Vk1BCj4gKyAqIFN1Ym1pdCBleGVjYnVmZmVyCj4gKyAqIFZlcmlmeSB2YWx1ZSBvZiBmaXJzdCBE V09SRCBpbiBzaGFyZWQgYnVmZmVyIG1hdGNoZXMgREFUQQo+ICsKPiArICogQ3JlYXRlIHNlY29u ZCBzaGFyZWQgYnVmZmVyCj4gKyAqIEZvbGxvdyBhbGwgc3RlcHMgYWJvdmUKPiArICogRXhlY3B0 LCBmb3Igb2Zmc2V0LCB1c2UgVk1BIG9mIGZpcnN0IGJ1ZmZlciBhYm92ZQo+ICsgKiBTdWJtaXQg ZXhlY2J1ZmZlcgo+ICsgKiBWZXJpZnkgdmFsdWUgb2YgZmlyc3QgRFdPUkQgaW4gc2Vjb25kIHNo YXJlZCBidWZmZXIgbWF0Y2hlcyBEQVRBCj4gKyovCj4gK3N0YXRpYyB2b2lkIGdlbV9yZXBpbl90 ZXN0KHZvaWQpCj4gK3sKPiArCWk5MTVfZ2VtX3VzZXJwdHIgdXNlcnB0cjsKPiArCWk5MTVfZ2Vt X3VzZXJwdHIgdXNlcnB0cjE7Cj4gKwlpbnQgZmQ7Cj4gKwl1aW50MzJfdCAqc2hhcmVkX2J1ZmZl cjsKPiArCXVpbnQzMl90ICpzaGFyZWRfYnVmZmVyMTsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1f ZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3Qy IGV4ZWNfb2JqZWN0MlsyXTsKPiArCXVpbnQzMl90IGJhdGNoX2J1ZmZlcltTVE9SRV9CQVRDSF9C VUZGRVJfU0laRSArIDJdOwo+ICsJdWludDMyX3QgYmF0Y2hfYnVmX2hhbmRsZSwgc2hhcmVkX2J1 Zl9oYW5kbGUsIHNoYXJlZF9idWZfaGFuZGxlMTsKPiArCWludCByaW5nLCBsZW47Cj4gKwljb25z dCB1aW50MzJfdCBkYXRhID0gMHgxMjM0NTY3ODsKPiArCXVpbnQ2NF90IHBpbm5pbmdfb2Zmc2V0 ID0gMHgxMDAwOwo+ICsKPiArCS8qIENyZWF0ZSBnZW0gb2JqZWN0ICovCj4gKwlmZCA9IGRybV9v cGVuX2RyaXZlcihEUklWRVJfSU5URUwpOwo+ICsJaWd0X3JlcXVpcmUodXNlc19mdWxsX3BwZ3R0 KGZkLCBBTElBU0lOR19QUEdUVCkpOwo+ICsKPiArCWJhdGNoX2J1Zl9oYW5kbGUgPSBnZW1fY3Jl YXRlKGZkLCBCT19TSVpFKTsKPiArCj4gKwkvKiBjcmVhdGUgY3B1IGJ1ZmZlciwgc2V0IGZpcnN0 IGVsZW1lbnRzIHRvIDB4MCAqLwo+ICsJc2hhcmVkX2J1ZmZlciA9IGNyZWF0ZV9tZW1fYnVmZmVy KEJPX1NJWkUpOwo+ICsJc2hhcmVkX2J1ZmZlcjEgPSBjcmVhdGVfbWVtX2J1ZmZlcihCT19TSVpF KTsKPiArCXNoYXJlZF9idWZmZXJbMF0gPSAweDA7Cj4gKwlzaGFyZWRfYnVmZmVyMVswXSA9IDB4 MDsKPiArCj4gKwkvKiBzaGFyZSB3aXRoIEdQVSBhbmQgZ2V0IGhhbmRsZXMgKi8KPiArCXNoYXJl ZF9idWZfaGFuZGxlID0gaW5pdF91c2VycHRyKGZkLCAmdXNlcnB0ciwgc2hhcmVkX2J1ZmZlciwK PiArCQkJCQkgQk9fU0laRSk7Cj4gKwlzaGFyZWRfYnVmX2hhbmRsZTEgPSBpbml0X3VzZXJwdHIo ZmQsICZ1c2VycHRyMSwgc2hhcmVkX2J1ZmZlcjEsCj4gKwkJCQkJICBCT19TSVpFKTsKPiArCj4g KwkvKiBjcmVhdGUgY29tbWFuZCBidWZmZXIgd2l0aCB3cml0ZSBjb21tYW5kICovCj4gKwlsZW4g PSBnZW1fc3RvcmVfZGF0YV9zdm0oZmQsIGJhdGNoX2J1ZmZlciwgcGlubmluZ19vZmZzZXQsIGRh dGEsIHRydWUpOwo+ICsJZ2VtX3dyaXRlKGZkLCBiYXRjaF9idWZfaGFuZGxlLCAwLCBiYXRjaF9i dWZmZXIsIGxlbik7Cj4gKwo+ICsJLyogc3VibWl0IGNvbW1hbmQgYnVmZmVyICovCj4gKwlzZXR1 cF9leGVjX29iaigmZXhlY19vYmplY3QyWzBdLCBzaGFyZWRfYnVmX2hhbmRsZSwKPiArCQkgICAg ICAgRVhFQ19PQkpFQ1RfUElOTkVELCBwaW5uaW5nX29mZnNldCk7Cj4gKwlzZXR1cF9leGVjX29i aigmZXhlY19vYmplY3QyWzFdLCBiYXRjaF9idWZfaGFuZGxlLCAwLCAwKTsKPiArCj4gKwlyaW5n ID0gSTkxNV9FWEVDX1JFTkRFUjsKPiArCj4gKwlzZXR1cF9leGVjYnVmZmVyKCZleGVjYnVmLCBl eGVjX29iamVjdDIsIHJpbmcsIDIsIGxlbik7Cj4gKwlzdWJtaXRfYW5kX3N5bmMoZmQsICZleGVj YnVmLCBiYXRjaF9idWZfaGFuZGxlKTsKPiArCWdlbV91c2VycHRyX3N5bmMoZmQsIHNoYXJlZF9i dWZfaGFuZGxlKTsKPiArCj4gKwlpZ3RfYXNzZXJ0KGV4ZWNfb2JqZWN0MlswXS5vZmZzZXQgPT0g cGlubmluZ19vZmZzZXQpOwo+ICsJaWd0X2Fzc2VydCgqc2hhcmVkX2J1ZmZlciA9PSBkYXRhKTsK PiArCj4gKwkvKiBTZWNvbmQgYnVmZmVyICovCj4gKwkvKiBjcmVhdGUgY29tbWFuZCBidWZmZXIg d2l0aCB3cml0ZSBjb21tYW5kICovCj4gKwlwaW5uaW5nX29mZnNldCA9IGV4ZWNfb2JqZWN0Mlsw XS5vZmZzZXQ7Cj4gKwlsZW4gPSBnZW1fc3RvcmVfZGF0YV9zdm0oZmQsIGJhdGNoX2J1ZmZlciwg cGlubmluZ19vZmZzZXQsIGRhdGEsIHRydWUpOwo+ICsJZ2VtX3dyaXRlKGZkLCBiYXRjaF9idWZf aGFuZGxlLCAwLCBiYXRjaF9idWZmZXIsIGxlbik7Cj4gKwo+ICsJLyogc3VibWl0IGNvbW1hbmQg YnVmZmVyICovCj4gKwkvKiBQaW4gYXQgc2hhcmVkX2J1ZmZlciwgbm90IHNoYXJlZF9idWZmZXIx ICovCj4gKwkvKiBXZSBhcmUgcmVxdWVzdGluZyBhZGRyZXNzIHdoZXJlIGFub3RoZXIgYnVmZmVy IHdhcyBwaW5uZWQgcHJldmlvdXNseSAqLwo+ICsJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0 MlswXSwgc2hhcmVkX2J1Zl9oYW5kbGUxLAo+ICsJCSAgICAgICBFWEVDX09CSkVDVF9QSU5ORUQs IHBpbm5pbmdfb2Zmc2V0KTsKPiArCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMV0sIGJh dGNoX2J1Zl9oYW5kbGUsIDAsIDApOwo+ICsKPiArCXJpbmcgPSBJOTE1X0VYRUNfUkVOREVSOwo+ ICsKPiArCXNldHVwX2V4ZWNidWZmZXIoJmV4ZWNidWYsIGV4ZWNfb2JqZWN0MiwgcmluZywgMiwg bGVuKTsKPiArCXN1Ym1pdF9hbmRfc3luYyhmZCwgJmV4ZWNidWYsIGJhdGNoX2J1Zl9oYW5kbGUp Owo+ICsJZ2VtX3VzZXJwdHJfc3luYyhmZCwgc2hhcmVkX2J1Zl9oYW5kbGUxKTsKPiArCj4gKwlp Z3RfYXNzZXJ0KGV4ZWNfb2JqZWN0MlswXS5vZmZzZXQgPT0gcGlubmluZ19vZmZzZXQpOwo+ICsJ aWd0X2Fzc2VydCgqc2hhcmVkX2J1ZmZlcjEgPT0gZGF0YSk7Cj4gKwo+ICsJZ2VtX2Nsb3NlKGZk LCBiYXRjaF9idWZfaGFuZGxlKTsKPiArCWdlbV9jbG9zZShmZCwgc2hhcmVkX2J1Zl9oYW5kbGUp Owo+ICsJY2xvc2UoZmQpOwo+ICsKPiArCWZyZWUoc2hhcmVkX2J1ZmZlcik7Cj4gKwlmcmVlKHNo YXJlZF9idWZmZXIxKTsKPiArfQo+ICsKPiArCj4gKy8qIGdlbV9yZXBpbl9vdmVybGFwX3Rlc3QK PiArICogVGhpcyB0ZXN0IHdpbGwgYXR0ZW1wdCB0byBwaW4gdHdvIGJ1ZmZlcnMgYXQgdGhlIHNh bWUgVk1BIGFzIHBhcnQgb2YgdGhlIHNhbWUKPiArICAgZXhlY2J1ZmZlciBvYmplY3QKPiArCj4g KyAqIE1hbGxvYyBhIDRLIGJ1ZmZlcgo+ICsgKiBTaGFyZSBidWZmZXIgd2l0aCB3aXRoIEdQVSBi eSB1c2luZyB1c2VycHRyIGlvY3RsCj4gKyAqIENyZWF0ZSBzZWNvbmQgc2hhcmVkIGJ1ZmZlcgo+ ICsgKiBDcmVhdGUgYmF0Y2ggYnVmZmVyIHRvIHdyaXRlIERBVEEgdG8gZmlyc3QgZHdvcmQgb2Yg ZWFjaCBidWZmZXIKPiArICogVXNlIHNhbWUgdmlydHVhbCBhZGRyZXNzIGFzIGRlc3RpbmF0aW9u IGFkZHJlc3NlcyBpbiBiYXRjaCBidWZmZXIKPiArICogU2V0IEVYRUNfT0JKRUNUX1BJTk5FRCBm bGFnIGluIGJvdGggZXhlYyBvYmplY3RzCj4gKyAqIFNldCAnb2Zmc2V0JyBpbiBib3RoIGV4ZWMg b2JqZWN0cyB0byBzYW1lIFZNQQo+ICsgKiBTdWJtaXQgZXhlY2J1ZmZlcgo+ICsgKiBDb21tYW5k IHNob3VsZCByZXR1cm4gRUlOVkFMLCBzaW5jZSB3ZSBhcmUgdHJ5aW5nIHRvIHBpbiB0byBzYW1l IFZNQQo+ICsqLwo+ICtzdGF0aWMgdm9pZCBnZW1fcGluX292ZXJsYXBfdGVzdCh2b2lkKQo+ICt7 Cj4gKwlpOTE1X2dlbV91c2VycHRyIHVzZXJwdHI7Cj4gKwlpOTE1X2dlbV91c2VycHRyIHVzZXJw dHIxOwo+ICsJaW50IGZkLCByZXQ7Cj4gKwl1aW50MzJfdCAqc2hhcmVkX2J1ZmZlcjsKPiArCXVp bnQzMl90ICpzaGFyZWRfYnVmZmVyMTsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZl cjIgZXhlY2J1ZjsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIGV4ZWNfb2Jq ZWN0MlszXTsKPiArCXVpbnQzMl90IHNoYXJlZF9idWZfaGFuZGxlLCBzaGFyZWRfYnVmX2hhbmRs ZTE7Cj4gKwlpbnQgcmluZywgbGVuOwo+ICsJdWludDY0X3QgcGlubmluZ19vZmZzZXQgPSAweDEw MDA7Cj4gKwo+ICsJZmQgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKPiArCWlndF9y ZXF1aXJlKHVzZXNfZnVsbF9wcGd0dChmZCwgQUxJQVNJTkdfUFBHVFQpKTsKPiArCj4gKwlzaGFy ZWRfYnVmZmVyID0gY3JlYXRlX21lbV9idWZmZXIoQk9fU0laRSk7Cj4gKwlzaGFyZWRfYnVmZmVy MSA9IGNyZWF0ZV9tZW1fYnVmZmVyKEJPX1NJWkUgKiAyKTsKPiArCj4gKwkvKiBzaGFyZSB3aXRo IEdQVSAqLwo+ICsJc2hhcmVkX2J1Zl9oYW5kbGUgPSBpbml0X3VzZXJwdHIoZmQsICZ1c2VycHRy LCBzaGFyZWRfYnVmZmVyLAo+ICsJCQkJCSBCT19TSVpFKTsKPiArCXNoYXJlZF9idWZfaGFuZGxl MSA9IGluaXRfdXNlcnB0cihmZCwgJnVzZXJwdHIxLCBzaGFyZWRfYnVmZmVyMSwKPiArCQkJCQkg IEJPX1NJWkUgKiAyKTsKPiArCj4gKwkvKiBzdWJtaXQgY29tbWFuZCBidWZmZXIgKi8KPiArCXNl dHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMF0sIHNoYXJlZF9idWZfaGFuZGxlLAo+ICsJCSAg ICAgICBFWEVDX09CSkVDVF9QSU5ORUQsIHBpbm5pbmdfb2Zmc2V0KTsKPiArCXNldHVwX2V4ZWNf b2JqKCZleGVjX29iamVjdDJbMV0sIHNoYXJlZF9idWZfaGFuZGxlMSwKPiArCQkgICAgICAgRVhF Q19PQkpFQ1RfUElOTkVELCBwaW5uaW5nX29mZnNldCk7Cj4gKwo+ICsJcmluZyA9IEk5MTVfRVhF Q19SRU5ERVI7Cj4gKwo+ICsJc2V0dXBfZXhlY2J1ZmZlcigmZXhlY2J1ZiwgZXhlY19vYmplY3Qy LCByaW5nLCAyLCBsZW4pOwo+ICsKPiArCXJldCA9IGRybUlvY3RsKGZkLCBEUk1fSU9DVExfSTkx NV9HRU1fRVhFQ0JVRkZFUjIsICZleGVjYnVmKTsKPiArCj4gKwkvKiBleHBlY3QgdG8gZmFpbCAq Lwo+ICsJaWd0X2Fzc2VydF9uZXEocmV0LCAwKTsKPiArCWlndF9hc3NlcnQoZXJybm8gPT0gRUlO VkFMKTsKPiArCj4gKwljbG9zZShmZCk7Cj4gKwlmcmVlKHNoYXJlZF9idWZmZXIpOwo+ICsJZnJl ZShzaGFyZWRfYnVmZmVyMSk7Cj4gK30KPiArCj4gKy8qIGdlbV9zb2Z0cGluX3N0cmVzc190ZXN0 Cj4gKyAqIFN0cmVzcyB0ZXN0IHdoaWNoIGNyZWF0ZXMgMTBLIGJ1ZmZlcnMgYW5kIHNoYXJlcyB3 aXRoIEdQVQo+ICsgKiBDcmVhdGUgMTAwSyB1aW50MzIgYnVmZmVycyBvZiBzaXplIDRLIGVhY2gK PiArICogU2hhcmUgd2l0aCBHUFUgdXNpbmcgdXNlcnB0ciBpb2N0bAo+ICsgKiBDcmVhdGUgYmF0 Y2ggYnVmZmVyIHRvIHdyaXRlIERBVEEgaW4gZmlyc3QgZWxlbWVudCBvZiBlYWNoIGJ1ZmZlcgo+ ICsgKiBQaW4gZWFjaCBidWZmZXIgdG8gdmFyeWluZyBhZGRyZXNzZXMgc3RhcnRpbmcgZnJvbSAw eDgwMDAwMDAwMDAwMCBnb2luZyBiZWxvdwo+ICsgKiBFeGVjdXRlIEJhdGNoIEJ1ZmZlciBvbiBC bGl0IHJpbmcgU1RSRVNTX05VTV9MT09QUyB0aW1lcwo+ICsgKiBWYWxpZGF0ZSBldmVyeSBidWZm ZXIgaGFzIERBVEEgaW4gZmlyc3QgZWxlbWVudAo+ICsgKiBSaW5zZSBhbmQgUmVwZWF0IG9uIFJl bmRlciByaW5nCj4gKyovCj4gKyNkZWZpbmUgU1RSRVNTX05VTV9CVUZGRVJTIDEwMDAwMAo+ICsj ZGVmaW5lIFNUUkVTU19OVU1fTE9PUFMgMTAwCj4gKyNkZWZpbmUgU1RSRVNTX1NUT1JFX0NPTU1B TkRTIDQgKiBTVFJFU1NfTlVNX0JVRkZFUlMKPiArCj4gK3N0YXRpYyB2b2lkIGdlbV9zb2Z0cGlu X3N0cmVzc190ZXN0KHZvaWQpCj4gK3sKPiArCWk5MTVfZ2VtX3VzZXJwdHIgdXNlcnB0cjsKPiAr CWludCBmZDsKPiArCXVpbnQzMl90ICoqc2hhcmVkX2J1ZmZlcjsKPiArCXVpbnQzMl90ICpzaGFy ZWRfaGFuZGxlOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmOwo+ ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgKmV4ZWNfb2JqZWN0MjsKPiArCXVp bnQzMl90ICpiYXRjaF9idWZmZXI7Cj4gKwl1aW50MzJfdCBiYXRjaF9idWZfaGFuZGxlOwo+ICsJ aW50IHJpbmcsIGxlbjsKPiArCWludCBidWYsIGxvb3A7Cj4gKwl1aW50NjRfdCBwaW5uaW5nX29m ZnNldCA9IDB4ODAwMDAwMDAwMDAwOwo+ICsKPiArCWZkID0gZHJtX29wZW5fZHJpdmVyKERSSVZF Ul9JTlRFTCk7Cj4gKwlpZ3RfcmVxdWlyZSh1c2VzX2Z1bGxfcHBndHQoZmQsIEZVTExfNDhfQklU X1BQR1RUKSk7Cj4gKwo+ICsKPiArCS8qIEFsbG9jYXRlIGJsb2JzIGZvciBhbGwgZGF0YSBzdHJ1 Y3R1cmVzICovCj4gKwlzaGFyZWRfaGFuZGxlID0gY2FsbG9jKFNUUkVTU19OVU1fQlVGRkVSUywg c2l6ZW9mKHVpbnQzMl90KSk7Cj4gKwlzaGFyZWRfYnVmZmVyID0gY2FsbG9jKFNUUkVTU19OVU1f QlVGRkVSUywgc2l6ZW9mKHVpbnQzMl90ICopKTsKPiArCWV4ZWNfb2JqZWN0MiA9IGNhbGxvYyhT VFJFU1NfTlVNX0JVRkZFUlMgKyAxLAo+ICsJCQkJc2l6ZW9mKHN0cnVjdCBkcm1faTkxNV9nZW1f ZXhlY19vYmplY3QyKSk7Cj4gKwkvKiA0IGR3b3JkcyBwZXIgYnVmZmVyICsgMiBmb3IgdGhlIGVu ZCBvZiBiYXRjaGJ1ZmZlciAqLwo+ICsJYmF0Y2hfYnVmZmVyID0gY2FsbG9jKFNUUkVTU19TVE9S RV9DT01NQU5EUyArIDIsIHNpemVvZih1aW50MzJfdCkpOwo+ICsJYmF0Y2hfYnVmX2hhbmRsZSA9 IGdlbV9jcmVhdGUoZmQsIChTVFJFU1NfU1RPUkVfQ09NTUFORFMgKyAyKSo0KTsKPiArCj4gKwkv KiBjcmVhdGUgY29tbWFuZCBidWZmZXIgd2l0aCB3cml0ZSBjb21tYW5kcyAqLwo+ICsJbGVuID0g MDsKPiArCWZvcihidWYgPSAwOyBidWYgPCBTVFJFU1NfTlVNX0JVRkZFUlM7IGJ1ZisrKSB7Cj4g KwkJc2hhcmVkX2J1ZmZlcltidWZdID0gY3JlYXRlX21lbV9idWZmZXIoQk9fU0laRSk7Cj4gKwkJ KnNoYXJlZF9idWZmZXJbYnVmXSA9IDB4RkZGRkZGRkY7Cj4gKwo+ICsJCS8qIHNoYXJlIHdpdGgg R1BVICovCj4gKwkJc2hhcmVkX2hhbmRsZVtidWZdID0gaW5pdF91c2VycHRyKGZkLCAmdXNlcnB0 ciwKPiArCQkJCQkJICBzaGFyZWRfYnVmZmVyW2J1Zl0sCj4gKwkJCQkJCSAgQk9fU0laRSk7Cj4g Kwo+ICsJCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbYnVmXSwgc2hhcmVkX2hhbmRsZVti dWZdLAo+ICsJCQkgICAgICAgRVhFQ19PQkpFQ1RfUElOTkVELCBwaW5uaW5nX29mZnNldCk7Cj4g KwkJbGVuICs9IGdlbV9zdG9yZV9kYXRhX3N2bShmZCwgYmF0Y2hfYnVmZmVyICsgKGxlbi80KSwK PiArCQkJCQkgIHBpbm5pbmdfb2Zmc2V0LCBidWYsCj4gKwkJCQkJICAoYnVmID09IFNUUkVTU19O VU1fQlVGRkVSUy0xKT8gXAo+ICsJCQkJCSAgdHJ1ZTpmYWxzZSk7Cj4gKwkJCj4gKwkJLyogZGVj cmVtZW50YWwgNEsgYWxpZ25lZCBhZGRyZXNzICovCj4gKwkJcGlubmluZ19vZmZzZXQgLT0gQUxJ R04oQk9fU0laRSwgNDA5Nik7Cj4gKwl9Cj4gKwo+ICsJLyogc2V0dXAgY29tbWFuZCBidWZmZXIg Ki8KPiArCWdlbV93cml0ZShmZCwgYmF0Y2hfYnVmX2hhbmRsZSwgMCwgYmF0Y2hfYnVmZmVyLCBs ZW4pOwo+ICsJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MltTVFJFU1NfTlVNX0JVRkZFUlNd LCBiYXRjaF9idWZfaGFuZGxlLAo+ICsJCSAgICAgICAwLCAwKTsKPiArCj4gKwkvKiBXZSB3YW50 IHRvIHJ1biB0aGlzIG9uIEJMVCByaW5nIGlmIHBvc3NpYmxlICovCj4gKwlpZiAoSEFTX0JMVF9S SU5HKGludGVsX2dldF9kcm1fZGV2aWQoZmQpKSkgewo+ICsJCXJpbmcgPSBJOTE1X0VYRUNfQkxU Owo+ICsKPiArCQlzZXR1cF9leGVjYnVmZmVyKCZleGVjYnVmLCBleGVjX29iamVjdDIsIHJpbmcs Cj4gKwkJCQkgU1RSRVNTX05VTV9CVUZGRVJTICsgMSwgbGVuKTsKPiArCj4gKwkJZm9yIChsb29w ID0gMDsgbG9vcCA8IFNUUkVTU19OVU1fTE9PUFM7IGxvb3ArKykgewo+ICsJCQlzdWJtaXRfYW5k X3N5bmMoZmQsICZleGVjYnVmLCBiYXRjaF9idWZfaGFuZGxlKTsKPiArCQkJLyogU2V0IHBpbm5p bmcgb2Zmc2V0IGJhY2sgdG8gb3JpZ2luYWwgdmFsdWUgKi8KPiArCQkJcGlubmluZ19vZmZzZXQg PSAweDgwMDAwMDAwMDAwMDsKPiArCQkJZm9yKGJ1ZiA9IDA7IGJ1ZiA8IFNUUkVTU19OVU1fQlVG RkVSUzsgYnVmKyspIHsKPiArCQkJCWdlbV91c2VycHRyX3N5bmMoZmQsIHNoYXJlZF9oYW5kbGVb YnVmXSk7Cj4gKwkJCQlpZ3RfYXNzZXJ0KGV4ZWNfb2JqZWN0MltidWZdLm9mZnNldCA9PSBwaW5u aW5nX29mZnNldCk7Cj4gKwkJCQlpZ3RfZmFpbF9vbl9mKCpzaGFyZWRfYnVmZmVyW2J1Zl0gIT0g YnVmLCBcCj4gKwkJCQkiTWlzbWF0Y2ggaW4gYnVmZmVyICVkLCBpdGVyYXRpb24gJWQ6IDB4JTA4 WFxuIiwgXAo+ICsJCQkJYnVmLCBsb29wLCAqc2hhcmVkX2J1ZmZlcltidWZdKTsKPiArCQkJCXBp bm5pbmdfb2Zmc2V0IC09IEFMSUdOKEJPX1NJWkUsIDQwOTYpOwo+ICsJCQl9Cj4gKwkJCS8qIFJl c2V0IHRoZSBidWZmZXIgZW50cmllcyBmb3IgbmV4dCBpdGVyYXRpb24gKi8KPiArCQkJZm9yKGJ1 ZiA9IDA7IGJ1ZiA8IFNUUkVTU19OVU1fQlVGRkVSUzsgYnVmKyspIHsKPiArCQkJCSpzaGFyZWRf YnVmZmVyW2J1Zl0gPSAweEZGRkZGRkZGOwo+ICsJCQl9Cj4gKwkJfQo+ICsJfQo+ICsKPiArCS8q IE5vdyBSZW5kZXIgUmluZyAqLwo+ICsJcmluZyA9IEk5MTVfRVhFQ19SRU5ERVI7Cj4gKwlzZXR1 cF9leGVjYnVmZmVyKCZleGVjYnVmLCBleGVjX29iamVjdDIsIHJpbmcsCj4gKwkJCSBTVFJFU1Nf TlVNX0JVRkZFUlMgKyAxLCBsZW4pOwo+ICsJZm9yIChsb29wID0gMDsgbG9vcCA8IFNUUkVTU19O VU1fTE9PUFM7IGxvb3ArKykgewo+ICsJCXN1Ym1pdF9hbmRfc3luYyhmZCwgJmV4ZWNidWYsIGJh dGNoX2J1Zl9oYW5kbGUpOwo+ICsJCXBpbm5pbmdfb2Zmc2V0ID0gMHg4MDAwMDAwMDAwMDA7Cj4g KwkJZm9yKGJ1ZiA9IDA7IGJ1ZiA8IFNUUkVTU19OVU1fQlVGRkVSUzsgYnVmKyspIHsKPiArCQkJ Z2VtX3VzZXJwdHJfc3luYyhmZCwgc2hhcmVkX2hhbmRsZVtidWZdKTsKPiArCQkJaWd0X2Fzc2Vy dChleGVjX29iamVjdDJbYnVmXS5vZmZzZXQgPT0gcGlubmluZ19vZmZzZXQpOwo+ICsJCQlpZ3Rf ZmFpbF9vbl9mKCpzaGFyZWRfYnVmZmVyW2J1Zl0gIT0gYnVmLCBcCj4gKwkJCSJNaXNtYXRjaCBp biBidWZmZXIgJWQsIFwKPiArCQkJaXRlcmF0aW9uICVkOiAweCUwOFhcbiIsIGJ1ZiwgbG9vcCwg KnNoYXJlZF9idWZmZXJbYnVmXSk7Cj4gKwkJCXBpbm5pbmdfb2Zmc2V0IC09IEFMSUdOKEJPX1NJ WkUsIDQwOTYpOwo+ICsJCX0KPiArCQkvKiBSZXNldCB0aGUgYnVmZmVyIGVudHJpZXMgZm9yIG5l eHQgaXRlcmF0aW9uICovCj4gKwkJZm9yKGJ1ZiA9IDA7IGJ1ZiA8IFNUUkVTU19OVU1fQlVGRkVS UzsgYnVmKyspIHsKPiArCQkJKnNoYXJlZF9idWZmZXJbYnVmXSA9IDB4RkZGRkZGRkY7Cj4gKwkJ fQo+ICsJfQo+ICsKPiArCWZvcihidWYgPSAwOyBidWYgPCBTVFJFU1NfTlVNX0JVRkZFUlM7IGJ1 ZisrKSB7Cj4gKwkJZ2VtX2Nsb3NlKGZkLCBzaGFyZWRfaGFuZGxlW2J1Zl0pOwo+ICsJCWZyZWUo c2hhcmVkX2J1ZmZlcltidWZdKTsKPiArCX0KPiArCWdlbV9jbG9zZShmZCwgYmF0Y2hfYnVmX2hh bmRsZSk7Cj4gKwljbG9zZShmZCk7Cj4gKwo+ICsJZnJlZShzaGFyZWRfaGFuZGxlKTsKPiArCWZy ZWUoc2hhcmVkX2J1ZmZlcik7Cj4gKwlmcmVlKGV4ZWNfb2JqZWN0Mik7Cj4gKwlmcmVlKGJhdGNo X2J1ZmZlcik7Cj4gK30KPiArCj4gKy8qIGdlbV93cml0ZV9tdWx0aXBhZ2VfYnVmZmVyCj4gKyAq IENyZWF0ZSBhIGJ1ZmZlciBzcGFubmluZyBtdWx0aXBsZSBwYWdlcywgYW5kIHNoYXJlIHdpdGgg R1BVLgo+ICsgKiBXcml0ZSB0byBldmVyeSBlbGVtZW50IG9mIHRoZSBidWZmZXIKPiArICogYW5k IHZlcmlmeSBjb3JyZWN0IGNvbnRlbnRzLgo+ICsKPiArICogQ3JlYXRlIDhLIGJ1ZmZlcgo+ICsg KiBTaGFyZSB3aXRoIEdQVSB1c2luZyB1c2VycHRyIGlvY3RsCj4gKyAqIENyZWF0ZSBiYXRjaCBi dWZmZXIgdG8gd3JpdGUgREFUQSBpbiBhbGwgZWxlbWVudHMgb2YgYnVmZmVyCj4gKyAqIEV4ZWN1 dGUgQmF0Y2ggQnVmZmVyCj4gKyAqIFZhbGlkYXRlIGV2ZXJ5IGVsZW1lbnQgaGFzIERBVEEKPiAr Ki8KPiArCj4gKyNkZWZpbmUgRFdPUkRfU0laRSBzaXplb2YodWludDMyX3QpCj4gKyNkZWZpbmUg QkJfU0laRSAoKE1VTFRJUEFHRV9CT19TSVpFIC8gRFdPUkRfU0laRSkgKiBTVE9SRV9CQVRDSF9C VUZGRVJfU0laRSkgKyAyCj4gKyNkZWZpbmUgTlVNX0RXT1JEUyAoTVVMVElQQUdFX0JPX1NJWkUv c2l6ZW9mKHVpbnQzMl90KSkKPiArc3RhdGljIHZvaWQgZ2VtX3dyaXRlX211bHRpcGFnZV9idWZm ZXJfdGVzdCh2b2lkKQo+ICt7Cj4gKwlpOTE1X2dlbV91c2VycHRyIHVzZXJwdHI7Cj4gKwlpbnQg ZmQ7Cj4gKwl1aW50MzJfdCAqc2hhcmVkX2J1ZmZlcjsKPiArCXVpbnQzMl90IHNoYXJlZF9oYW5k bGU7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7Cj4gKwlzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBleGVjX29iamVjdDJbMl07Cj4gKwl1aW50MzJf dCBiYXRjaF9idWZmZXJbQkJfU0laRV07Cj4gKwl1aW50MzJfdCBiYXRjaF9idWZfaGFuZGxlOwo+ ICsJaW50IHJpbmcsIGxlbiwgajsKPiArCXVpbnQ2NF90IHBpbm5pbmdfb2Zmc2V0PTB4MTAwMDsK PiArCXVpbnQ2NF90IHZhZGRyOwo+ICsKPiArCWZkID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9J TlRFTCk7Cj4gKwlpZ3RfcmVxdWlyZSh1c2VzX2Z1bGxfcHBndHQoZmQsIEFMSUFTSU5HX1BQR1RU KSk7Cj4gKwo+ICsJYmF0Y2hfYnVmX2hhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIHNpemVvZihiYXRj aF9idWZmZXIpKTsKPiArCXNoYXJlZF9idWZmZXIgPSBjcmVhdGVfbWVtX2J1ZmZlcihNVUxUSVBB R0VfQk9fU0laRSk7Cj4gKwo+ICsJbGVuID0gMDsKPiArCW1lbXNldChiYXRjaF9idWZmZXIsIDAs IHNpemVvZihiYXRjaF9idWZmZXIpKTsKPiArCW1lbXNldChzaGFyZWRfYnVmZmVyLCAwLCBNVUxU SVBBR0VfQk9fU0laRSk7Cj4gKwo+ICsJLyogc2hhcmUgd2l0aCBHUFUgKi8KPiArCXNoYXJlZF9o YW5kbGUgPSBpbml0X3VzZXJwdHIoZmQsICZ1c2VycHRyLCBzaGFyZWRfYnVmZmVyLAo+ICsJCQkJ ICAgICBNVUxUSVBBR0VfQk9fU0laRSk7Cj4gKwlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3Qy WzBdLCBzaGFyZWRfaGFuZGxlLAo+ICsJCSAgICAgICBFWEVDX09CSkVDVF9QSU5ORUQsIHBpbm5p bmdfb2Zmc2V0KTsKPiArCj4gKwkvKiBjcmVhdGUgY29tbWFuZCBidWZmZXIgd2l0aCB3cml0ZSBj b21tYW5kcyAqLwo+ICsJdmFkZHIgPSBwaW5uaW5nX29mZnNldDsKPiArCWZvcihqPTA7IGo8IE5V TV9EV09SRFM7IGorKykgewo+ICsJCWxlbiArPSBnZW1fc3RvcmVfZGF0YV9zdm0oZmQsIGJhdGNo X2J1ZmZlciArIChsZW4vNCksIHZhZGRyLAo+ICsJCQkJCSAgaiwKPiArCQkJCQkgIChqID09IE5V TV9EV09SRFMgLSAxKSA/IHRydWU6ZmFsc2UpOwo+ICsJCXZhZGRyICs9IHNpemVvZihzaGFyZWRf YnVmZmVyWzBdKTsgIC8qIDQgYnl0ZXMgKi8KPiArCX0KPiArCj4gKwlnZW1fd3JpdGUoZmQsIGJh dGNoX2J1Zl9oYW5kbGUsIDAsIGJhdGNoX2J1ZmZlciwgbGVuKTsKPiArCj4gKwkvKiBzdWJtaXQg Y29tbWFuZCBidWZmZXIgKi8KPiArCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMV0sIGJh dGNoX2J1Zl9oYW5kbGUsIDAsIDApOwo+ICsKPiArCXJpbmcgPSBJOTE1X0VYRUNfUkVOREVSOwo+ ICsJc2V0dXBfZXhlY2J1ZmZlcigmZXhlY2J1ZiwgZXhlY19vYmplY3QyLCByaW5nLCAyLCBsZW4p Owo+ICsJc3VibWl0X2FuZF9zeW5jKGZkLCAmZXhlY2J1ZiwgYmF0Y2hfYnVmX2hhbmRsZSk7Cj4g KwlnZW1fdXNlcnB0cl9zeW5jKGZkLCBzaGFyZWRfaGFuZGxlKTsKPiArCj4gKwlpZ3RfYXNzZXJ0 KGV4ZWNfb2JqZWN0MlswXS5vZmZzZXQgPT0gcGlubmluZ19vZmZzZXQpOwo+ICsJZm9yKGogPSAw OyBqIDwgKE1VTFRJUEFHRV9CT19TSVpFL3NpemVvZih1aW50MzJfdCkpOyBqKyspIHsKPiArCQlp Z3RfZmFpbF9vbl9mKHNoYXJlZF9idWZmZXJbal0gIT0gaiwKPiArCQkiTWlzbWF0Y2ggaW4gaW5k ZXggJWQ6IDB4JTA4WFxuIiwgaiwgc2hhcmVkX2J1ZmZlcltqXSk7Cj4gKwl9Cj4gKwo+ICsJZ2Vt X2Nsb3NlKGZkLCBiYXRjaF9idWZfaGFuZGxlKTsKPiArCWdlbV9jbG9zZShmZCwgc2hhcmVkX2hh bmRsZSk7Cj4gKwljbG9zZShmZCk7Cj4gKwo+ICsJZnJlZShzaGFyZWRfYnVmZmVyKTsKPiArfQo+ ICsKPiArLyogZ2VtX3Bpbl9pbnZhbGlkX3ZtYV90ZXN0Cj4gKyAqIFRoaXMgdGVzdCB3aWxsIHJl cXVlc3QgdG8gcGluIGEgc2hhcmVkIGJ1ZmZlciB0byBhbiBpbnZhbGlkCj4gKyAqIFZNQSAgPiA0 OC1iaXQgYWRkcmVzcyBpZiBzeXN0ZW0gc3VwcG9ydHMgNDhCIFBQR1RUCj4gKyAqIElmIHN5c3Rl bSBzdXBwb3J0cyAzMkIgUFBHVFQsIGl0IHdpbGwgdGVzdCB0aGUgZXF1aXZhbGVudCBpbnZhbGlk IFZNQQo+ICsgKiBDcmVhdGUgc2hhcmVkIGJ1ZmZlciBvZiBzaXplIDRLCj4gKyAqIFRyeSBhbmQg UGluIG9iamVjdCB0byBpbnZhbGlkIGFkZHJlc3MKPiArKi8KPiArc3RhdGljIHZvaWQgZ2VtX3Bp bl9pbnZhbGlkX3ZtYV90ZXN0KHZvaWQpCj4gK3sKPiArCWk5MTVfZ2VtX3VzZXJwdHIgdXNlcnB0 cjsKPiArCWludCBmZCwgcmV0Owo+ICsJdWludDMyX3QgKnNoYXJlZF9idWZmZXI7Cj4gKwlzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX2V4ZWNfb2JqZWN0MiBleGVjX29iamVjdDJbMV07Cj4gKwl1aW50MzJfdCBzaGFyZWRfYnVm X2hhbmRsZTsKPiArCWludCByaW5nOwo+ICsJdWludDY0X3QgaW52YWxpZF9hZGRyZXNzX2Zvcl80 OGIgPSAweDkwMDAwMDAwMDAwMDA7IC8qIDUyIGJpdCBhZGRyZXNzICovCj4gKwl1aW50NjRfdCBp bnZhbGlkX2FkZHJlc3NfZm9yXzMyYiA9IDB4OTAwMDAwMDAwOyAvKiAzNiBiaXQgYWRkcmVzcyAq Lwo+ICsKPiArCWZkID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9JTlRFTCk7Cj4gKwlpZ3RfcmVx dWlyZSh1c2VzX2Z1bGxfcHBndHQoZmQsIEZVTExfNDhfQklUX1BQR1RUKSB8fAo+ICsJCSAgICB1 c2VzX2Z1bGxfcHBndHQoZmQsIEZVTExfMzJfQklUX1BQR1RUKSk7Cj4gKwo+ICsJc2hhcmVkX2J1 ZmZlciA9IGNyZWF0ZV9tZW1fYnVmZmVyKEJPX1NJWkUpOwo+ICsJKnNoYXJlZF9idWZmZXIgPSAw eEZGRkZGRkZGOwo+ICsJCj4gKwkvKiBzaGFyZSB3aXRoIEdQVSAqLwo+ICsJc2hhcmVkX2J1Zl9o YW5kbGUgPSBpbml0X3VzZXJwdHIoZmQsICZ1c2VycHRyLCBzaGFyZWRfYnVmZmVyLCBCT19TSVpF KTsKPiArCj4gKwlpZiAodXNlc19mdWxsX3BwZ3R0KGZkLCBGVUxMXzQ4X0JJVF9QUEdUVCkpIHsK PiArCQlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzBdLCBzaGFyZWRfYnVmX2hhbmRsZSwK PiArCQkJICAgICAgIEVYRUNfT0JKRUNUX1BJTk5FRCwgaW52YWxpZF9hZGRyZXNzX2Zvcl80OGIp Owo+ICsJfSBlbHNlIHsKPiArCQlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzBdLCBzaGFy ZWRfYnVmX2hhbmRsZSwKPiArCQkJICAgICAgIEVYRUNfT0JKRUNUX1BJTk5FRCwgaW52YWxpZF9h ZGRyZXNzX2Zvcl8zMmIpOwo+ICsJfQo+ICsKPiArCXJpbmcgPSBJOTE1X0VYRUNfUkVOREVSOwo+ ICsKPiArCXNldHVwX2V4ZWNidWZmZXIoJmV4ZWNidWYsIGV4ZWNfb2JqZWN0MiwgcmluZywgMSwg MCk7Cj4gKwo+ICsJLyogRXhwZWN0IGV4ZWNidWYgdG8gZmFpbCAqLwo+ICsJcmV0ID0gZHJtSW9j dGwoZmQsCj4gKwkJICAgICAgIERSTV9JT0NUTF9JOTE1X0dFTV9FWEVDQlVGRkVSMiwKPiArCQkg ICAgICAgJmV4ZWNidWYpOwo+ICsKPiArCWlndF9hc3NlcnQoZXJybm8gPT0gRU5PU1BDKTsKPiAr CWlndF9hc3NlcnRfbmVxKHJldCwgMCk7Cj4gKwkKPiArCWdlbV9jbG9zZShmZCwgc2hhcmVkX2J1 Zl9oYW5kbGUpOwo+ICsJY2xvc2UoZmQpOwo+ICsJZnJlZShzaGFyZWRfYnVmZmVyKTsKPiArfQo+ ICsKPiArCj4gKy8qIGdlbV9waW5faGlnaF9hZGRyZXNzX3Rlc3QKPiArICogVGhpcyB0ZXN0IHdp bGwgY3JlYXRlIGEgc2hhcmVkIGJ1ZmZlciwgYW5kIGNyZWF0ZSBhIGNvbW1hbmQKPiArICogZm9y IEdQVSB0byB3cml0ZSBkYXRhIGluIGl0LiBJdCB3aWxsIGF0dGVtcHQgdG8gcGluIHRoZSBidWZm ZXIgYXQgYWRkcmVzcyA+IDMyIGJpdHMuCj4gKyAqIENQVSB3aWxsIHJlYWQgYW5kIG1ha2Ugc3Vy ZSBleHBlY3RlZCB2YWx1ZSBpcyBvYnRhaW5lZAo+ICsKPiArICogTWFsbG9jIGEgNEsgYnVmZmVy Cj4gKyAqIFNoYXJlIGJ1ZmZlciB3aXRoIHdpdGggR1BVIGJ5IHVzaW5nIHVzZXJwdHIgaW9jdGwK PiArICogQ3JlYXRlIGJhdGNoIGJ1ZmZlciB0byB3cml0ZSBEQVRBIHRvIGZpcnN0IGR3b3JkIG9m IGJ1ZmZlcgo+ICsgKiBVc2UgdmlydHVhbCBhZGRyZXNzIG9mIGJ1ZmZlciBhcyAweDExMDAwMDAw MDAgKD4gMzIgYml0KQo+ICsgKiBTZXQgRVhFQ19PQkpFQ1RfUElOTkVEIGZsYWcgaW4gZXhlYyBv YmplY3QKPiArICogU2V0ICdvZmZzZXQnIGluIGV4ZWMgb2JqZWN0IHRvIHNoYXJlZCBidWZmZXIg Vk1BCj4gKyAqIFN1Ym1pdCBleGVjYnVmZmVyCj4gKyAqIFZlcmlmeSB2YWx1ZSBvZiBmaXJzdCBE V09SRCBpbiBzaGFyZWQgYnVmZmVyIG1hdGNoZXMgREFUQQo+ICsgKiBOb3cgdHJ5IHNhbWUgdGVz dCB3aXRob3V0IHVzaW5nIEVYRUNfT0JKRUNUX1BJTk5FRCBmbGFnCj4gKyAqIHRlc3Qgc2hvdWxk IGZhaWwgcGlubmVkIG9mZnNldCBjaGVjawo+ICsqLwo+ICsKPiArc3RhdGljIHZvaWQgZ2VtX3Bp bl9oaWdoX2FkZHJlc3NfdGVzdCh2b2lkKQo+ICt7Cj4gKwlpOTE1X2dlbV91c2VycHRyIHVzZXJw dHI7Cj4gKwlpbnQgZmQ7Cj4gKwl1aW50MzJfdCAqc2hhcmVkX2J1ZmZlcjsKPiArCXN0cnVjdCBk cm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1f ZXhlY19vYmplY3QyIGV4ZWNfb2JqZWN0MlsyXTsKPiArCXVpbnQzMl90IGJhdGNoX2J1ZmZlcltT VE9SRV9CQVRDSF9CVUZGRVJfU0laRSArIDJdOwo+ICsJdWludDMyX3QgYmF0Y2hfYnVmX2hhbmRs ZSwgc2hhcmVkX2J1Zl9oYW5kbGU7Cj4gKwlpbnQgcmluZywgbGVuOwo+ICsJY29uc3QgdWludDMy X3QgZGF0YSA9IDB4MTIzNDU2Nzg7Cj4gKwl1aW50NjRfdCBoaWdoX2FkZHJlc3MgPSAweDExMTFG RkZGMDAwOyAvKiA0NCBiaXQgYWRkcmVzcyAqLwo+ICsKPiArCWZkID0gZHJtX29wZW5fZHJpdmVy KERSSVZFUl9JTlRFTCk7Cj4gKwlpZ3RfcmVxdWlyZSh1c2VzX2Z1bGxfcHBndHQoZmQsIEZVTExf NDhfQklUX1BQR1RUKSk7Cj4gKwo+ICsJYmF0Y2hfYnVmX2hhbmRsZSA9IGdlbV9jcmVhdGUoZmQs IEJPX1NJWkUpOwo+ICsKPiArCS8qIGNyZWF0ZSBjcHUgYnVmZmVyLCBzZXQgdG8gYWxsIDB4Ridz ICovCj4gKwlzaGFyZWRfYnVmZmVyID0gY3JlYXRlX21lbV9idWZmZXIoQk9fU0laRSk7Cj4gKwkq c2hhcmVkX2J1ZmZlciA9IDB4RkZGRkZGRkY7Cj4gKwo+ICsJLyogc2hhcmUgd2l0aCBHUFUgKi8K PiArCXNoYXJlZF9idWZfaGFuZGxlID0gaW5pdF91c2VycHRyKGZkLCAmdXNlcnB0ciwgc2hhcmVk X2J1ZmZlciwgQk9fU0laRSk7Cj4gKwo+ICsJLyogY3JlYXRlIGNvbW1hbmQgYnVmZmVyIHdpdGgg d3JpdGUgY29tbWFuZCAqLwo+ICsJbGVuID0gZ2VtX3N0b3JlX2RhdGFfc3ZtKGZkLCBiYXRjaF9i dWZmZXIsIGhpZ2hfYWRkcmVzcywgZGF0YSwgdHJ1ZSk7Cj4gKwlnZW1fd3JpdGUoZmQsIGJhdGNo X2J1Zl9oYW5kbGUsIDAsIGJhdGNoX2J1ZmZlciwgbGVuKTsKPiArCj4gKwkvKiBzdWJtaXQgY29t bWFuZCBidWZmZXIgKi8KPiArCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMF0sIHNoYXJl ZF9idWZfaGFuZGxlLAo+ICsJCSAgICAgICBFWEVDX09CSkVDVF9QSU5ORUQgfCBFWEVDX09CSkVD VF9TVVBQT1JUU180OEJfQUREUkVTUywgaGlnaF9hZGRyZXNzKTsKPiArCXNldHVwX2V4ZWNfb2Jq KCZleGVjX29iamVjdDJbMV0sIGJhdGNoX2J1Zl9oYW5kbGUsIDAsIDApOwo+ICsKPiArCXJpbmcg PSBJOTE1X0VYRUNfUkVOREVSOwo+ICsKPiArCXNldHVwX2V4ZWNidWZmZXIoJmV4ZWNidWYsIGV4 ZWNfb2JqZWN0MiwgcmluZywgMiwgbGVuKTsKPiArCXN1Ym1pdF9hbmRfc3luYyhmZCwgJmV4ZWNi dWYsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICsJZ2VtX3VzZXJwdHJfc3luYyhmZCwgc2hhcmVkX2J1 Zl9oYW5kbGUpOwo+ICsKPiArCWlndF9hc3NlcnQoZXhlY19vYmplY3QyWzBdLm9mZnNldCA9PSBo aWdoX2FkZHJlc3MpOwo+ICsJLyogY2hlY2sgb24gQ1BVIHRvIHNlZSBpZiB2YWx1ZSBjaGFuZ2Vz ICovCj4gKwlpZ3RfZmFpbF9vbl9mKHNoYXJlZF9idWZmZXJbMF0gIT0gZGF0YSwKPiArCQkiXG5D UFUgcmVhZCBkb2VzIG5vdCBtYXRjaCBHUFUgd3JpdGUsIFwKPiArCQlleHBlY3RlZDogMHgleCwg Z290OiAweCV4XG4iLCBkYXRhLCBzaGFyZWRfYnVmZmVyWzBdKTsKPiArCj4gKwkvKiBOb3cgdHJ5 IHBpbm5pbmcgdG8gaGlnaCBhZGRyZXNzIHdpdGhvdXQgRVhFQ19PQkpFQ1RfUElOTkVEIGZsYWcg Ki8KCkkgdGhvdWdodCBoZXJlIEVYRUNfT0JKRUNUX1BJTk5FRCB3aXRob3V0IApFWEVDX09CSkVD VF9TVVBQT1JUU180OEJfQUREUkVTUywgdG8gdmVyaWZ5IHRoYXQgdGhlIGZvcm1lciByZWFsbHkg CmltcGxpZXMgdGhlIGxhdHRlci4KCklmIHlvdSBjaGFuZ2UgdGhhdCB5b3UgY2FuIGFkZCBteSBy LWIuCgpSZWdhcmRzLAoKVHZydGtvCgo+ICsJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0Mlsw XSwgc2hhcmVkX2J1Zl9oYW5kbGUsCj4gKwkJICAgICAgIDAsIGhpZ2hfYWRkcmVzcyk7Cj4gKwlz ZXR1cF9leGVjYnVmZmVyKCZleGVjYnVmLCBleGVjX29iamVjdDIsIHJpbmcsIDIsIGxlbik7Cj4g KwlzdWJtaXRfYW5kX3N5bmMoZmQsICZleGVjYnVmLCBiYXRjaF9idWZfaGFuZGxlKTsKPiArCWdl bV91c2VycHRyX3N5bmMoZmQsIHNoYXJlZF9idWZfaGFuZGxlKTsKPiArCj4gKwkvKiBTaW5jZSB3 ZSBkaWQgbm90IHJlcXVlc3QgNDhCIGFkZHJlc3NpbmcgdXNpbmcgRVhFQ19PQkpFQ1RfUElOTkVE ICovCj4gKwlpZ3RfYXNzZXJ0KGV4ZWNfb2JqZWN0MlswXS5vZmZzZXQgIT0gaGlnaF9hZGRyZXNz KTsKPiArCj4gKwlnZW1fY2xvc2UoZmQsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICsJZ2VtX2Nsb3Nl KGZkLCBzaGFyZWRfYnVmX2hhbmRsZSk7Cj4gKwljbG9zZShmZCk7Cj4gKwlmcmVlKHNoYXJlZF9i dWZmZXIpOwo+ICt9Cj4gKwo+ICsvKiBnZW1fcGluX25lYXJfNDhCaXRfdGVzdAo+ICsgKiBUaGlz IHRlc3Qgd2lsbCBjcmVhdGUgYSBzaGFyZWQgYnVmZmVyLAo+ICsgKiBhbmQgY3JlYXRlIGEgY29t bWFuZCBmb3IgR1BVIHRvIHdyaXRlIGRhdGEgaW4gaXQuIEl0IHdpbGwgYXR0ZW1wdAo+ICsgKiB0 byBwaW4gdGhlIGJ1ZmZlciBhdCBhZGRyZXNzID4gNDcgYml0cyA8PSA0OC1iaXQuCj4gKyAqIENQ VSB3aWxsIHJlYWQgYW5kIG1ha2Ugc3VyZSBleHBlY3RlZCB2YWx1ZSBpcyBvYnRhaW5lZAo+ICsK PiArICogTWFsbG9jIGEgNEsgYnVmZmVyCj4gKyAqIFNoYXJlIGJ1ZmZlciB3aXRoIHdpdGggR1BV IGJ5IHVzaW5nIHVzZXJwdHIgaW9jdGwKPiArICogQ3JlYXRlIGJhdGNoIGJ1ZmZlciB0byB3cml0 ZSBEQVRBIHRvIGZpcnN0IGR3b3JkIG9mIGJ1ZmZlcgo+ICsgKiBVc2UgdmlydHVhbCBhZGRyZXNz IG9mIGJ1ZmZlciBhcyByYW5nZSBiZXR3ZWVuIDQ3LWJpdCBhbmQgNDgtYml0Cj4gKyAqIFNldCBF WEVDX09CSkVDVF9QSU5ORUQgZmxhZyBpbiBleGVjIG9iamVjdAo+ICsgKiBTZXQgJ29mZnNldCcg aW4gZXhlYyBvYmplY3QgdG8gc2hhcmVkIGJ1ZmZlciBWTUEKPiArICogU3VibWl0IGV4ZWNidWZm ZXIKPiArICogVmVyaWZ5IHZhbHVlIG9mIGZpcnN0IERXT1JEIGluIHNoYXJlZCBidWZmZXIgbWF0 Y2hlcyBEQVRBCj4gKyovCj4gKyNkZWZpbmUgQkVHSU5fSElHSF9BRERSRVNTIDB4N0ZGRkZGRkZG MDAwCj4gKyNkZWZpbmUgRU5EX0hJR0hfQUREUkVTUyAweEZGRkZGRkZGQzAwMAo+ICsjZGVmaW5l IEFERFJFU1NfSU5DUkVNRU5UIDB4MjAwMDAwMDAwMAo+ICtzdGF0aWMgdm9pZCBnZW1fcGluX25l YXJfNDhCaXRfdGVzdCh2b2lkKQo+ICt7Cj4gKwlpOTE1X2dlbV91c2VycHRyIHVzZXJwdHI7Cj4g KwlpbnQgZmQ7Cj4gKwl1aW50MzJfdCAqc2hhcmVkX2J1ZmZlcjsKPiArCXN0cnVjdCBkcm1faTkx NV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19v YmplY3QyIGV4ZWNfb2JqZWN0MlsyXTsKPiArCXVpbnQzMl90IGJhdGNoX2J1ZmZlcltCT19TSVpF XTsKPiArCXVpbnQzMl90IGJhdGNoX2J1Zl9oYW5kbGUsIHNoYXJlZF9idWZfaGFuZGxlOwo+ICsJ aW50IHJpbmcsIGxlbjsKPiArCWNvbnN0IHVpbnQzMl90IGRhdGEgPSAweDEyMzQ1Njc4Owo+ICsJ dWludDY0X3QgaGlnaF9hZGRyZXNzOwo+ICsKPiArCWZkID0gZHJtX29wZW5fZHJpdmVyKERSSVZF Ul9JTlRFTCk7Cj4gKwlpZ3RfcmVxdWlyZSh1c2VzX2Z1bGxfcHBndHQoZmQsIEZVTExfNDhfQklU X1BQR1RUKSk7Cj4gKwo+ICsJYmF0Y2hfYnVmX2hhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIEJPX1NJ WkUpOwo+ICsKPiArCS8qIGNyZWF0ZSBjcHUgYnVmZmVyLCBzZXQgdG8gYWxsIDB4RidzICovCj4g KwlzaGFyZWRfYnVmZmVyID0gY3JlYXRlX21lbV9idWZmZXIoQk9fU0laRSk7Cj4gKwkqc2hhcmVk X2J1ZmZlciA9IDB4RkZGRkZGRkY7Cj4gKwo+ICsJLyogc2hhcmUgd2l0aCBHUFUgKi8KPiArCXNo YXJlZF9idWZfaGFuZGxlID0gaW5pdF91c2VycHRyKGZkLCAmdXNlcnB0ciwgc2hhcmVkX2J1ZmZl ciwgQk9fU0laRSk7Cj4gKwo+ICsJZm9yIChoaWdoX2FkZHJlc3MgPSBCRUdJTl9ISUdIX0FERFJF U1M7IGhpZ2hfYWRkcmVzcyA8PSBFTkRfSElHSF9BRERSRVNTOwo+ICsJCQkJCQloaWdoX2FkZHJl c3MrPUFERFJFU1NfSU5DUkVNRU5UKSB7Cj4gKwkJLyogY3JlYXRlIGNvbW1hbmQgYnVmZmVyIHdp dGggd3JpdGUgY29tbWFuZCAqLwo+ICsJCWxlbiA9IGdlbV9zdG9yZV9kYXRhX3N2bShmZCwgYmF0 Y2hfYnVmZmVyLCBoaWdoX2FkZHJlc3MsCj4gKwkJCQkJZGF0YSwgdHJ1ZSk7Cj4gKwkJZ2VtX3dy aXRlKGZkLCBiYXRjaF9idWZfaGFuZGxlLCAwLCBiYXRjaF9idWZmZXIsIGxlbik7Cj4gKwkJLyog c3VibWl0IGNvbW1hbmQgYnVmZmVyICovCj4gKwkJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0 MlswXSwgc2hhcmVkX2J1Zl9oYW5kbGUsCj4gKwkJCSAgICAgICBFWEVDX09CSkVDVF9QSU5ORUQg fCBFWEVDX09CSkVDVF9TVVBQT1JUU180OEJfQUREUkVTUywKPiArCQkJICAgICAgIGhpZ2hfYWRk cmVzcyk7Cj4gKwkJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlsxXSwgYmF0Y2hfYnVmX2hh bmRsZSwgMCwgMCk7Cj4gKwo+ICsJCXJpbmcgPSBJOTE1X0VYRUNfUkVOREVSOwo+ICsJCXNldHVw X2V4ZWNidWZmZXIoJmV4ZWNidWYsIGV4ZWNfb2JqZWN0MiwgcmluZywgMiwgbGVuKTsKPiArCQlz dWJtaXRfYW5kX3N5bmMoZmQsICZleGVjYnVmLCBiYXRjaF9idWZfaGFuZGxlKTsKPiArCQlnZW1f dXNlcnB0cl9zeW5jKGZkLCBzaGFyZWRfYnVmX2hhbmRsZSk7Cj4gKwo+ICsJCWlndF9hc3NlcnQo ZXhlY19vYmplY3QyWzBdLm9mZnNldCA9PSBoaWdoX2FkZHJlc3MpOwo+ICsJCS8qIGNoZWNrIG9u IENQVSB0byBzZWUgaWYgdmFsdWUgY2hhbmdlcyAqLwo+ICsJCWlndF9mYWlsX29uX2Yoc2hhcmVk X2J1ZmZlclswXSAhPSBkYXRhLAo+ICsJCSJcbkNQVSByZWFkIGRvZXMgbm90IG1hdGNoIEdQVSB3 cml0ZSwgZXhwZWN0ZWQ6IDB4JXgsIFwKPiArCQlnb3Q6IDB4JXhcbiwgMHglIlBSSXg2NCIiLCBk YXRhLCBzaGFyZWRfYnVmZmVyWzBdLCBoaWdoX2FkZHJlc3MpOwo+ICsJfQo+ICsKPiArCWdlbV9j bG9zZShmZCwgYmF0Y2hfYnVmX2hhbmRsZSk7Cj4gKwlnZW1fY2xvc2UoZmQsIHNoYXJlZF9idWZf aGFuZGxlKTsKPiArCWNsb3NlKGZkKTsKPiArCWZyZWUoc2hhcmVkX2J1ZmZlcik7Cj4gK30KPiAr Cj4gKwo+ICtpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQo+ICt7Cj4gKwlpZ3Rfc3Vi dGVzdF9pbml0KGFyZ2MsIGFyZ3YpOwo+ICsJaWd0X3NraXBfb25fc2ltdWxhdGlvbigpOwo+ICsK PiArCS8qIEFsbCB0ZXN0cyBuZWVkIFBQR1RUIHN1cHBvcnQgKi8KPiArCWlndF9zdWJ0ZXN0KCJn ZW1fcGluX3VzZXJwdHIiKSB7Cj4gKwkJZ2VtX3Bpbl91c2VycHRyX3Rlc3QoKTsKPiArCX0KPiAr CWlndF9zdWJ0ZXN0KCJnZW1fcGluX2JvIikgewo+ICsJCWdlbV9waW5fYm9fdGVzdCgpOwo+ICsJ fQo+ICsJaWd0X3N1YnRlc3QoImdlbV9tdWx0aXBsZV9wcm9jZXNzIikgewo+ICsJCWdlbV9tdWx0 aXBsZV9wcm9jZXNzX3Rlc3QoKTsKPiArCX0KPiArCWlndF9zdWJ0ZXN0KCJnZW1fcmVwaW4iKSB7 Cj4gKwkJZ2VtX3JlcGluX3Rlc3QoKTsKPiArCX0KPiArCWlndF9zdWJ0ZXN0KCJnZW1fcGluX292 ZXJsYXAiKSB7Cj4gKwkJZ2VtX3Bpbl9vdmVybGFwX3Rlc3QoKTsKPiArCX0KPiArCWlndF9zdWJ0 ZXN0KCJnZW1fd3JpdGVfbXVsdGlwYWdlX2J1ZmZlciIpIHsKPiArCQlnZW1fd3JpdGVfbXVsdGlw YWdlX2J1ZmZlcl90ZXN0KCk7Cj4gKwl9Cj4gKwo+ICsJLyogRm9sbG93aW5nIHRlc3RzIG5lZWQg MzIvNDggQml0IFBQR1RUIHN1cHBvcnQgKi8KPiArCWlndF9zdWJ0ZXN0KCJnZW1fcGluX2ludmFs aWRfdm1hIikgewo+ICsJCWdlbV9waW5faW52YWxpZF92bWFfdGVzdCgpOwo+ICsJfQo+ICsKPiAr CS8qIEZvbGxvd2luZyB0ZXN0cyBuZWVkIDQ4IEJpdCBQUEdUVCBzdXBwb3J0ICovCj4gKwlpZ3Rf c3VidGVzdCgiZ2VtX3NvZnRwaW5fc3RyZXNzIikgewo+ICsJCWdlbV9zb2Z0cGluX3N0cmVzc190 ZXN0KCk7Cj4gKwl9Cj4gKwlpZ3Rfc3VidGVzdCgiZ2VtX3Bpbl9oaWdoX2FkZHJlc3MiKSB7Cj4g KwkJZ2VtX3Bpbl9oaWdoX2FkZHJlc3NfdGVzdCgpOwo+ICsJfQo+ICsJaWd0X3N1YnRlc3QoImdl bV9waW5fbmVhcl80OEJpdCIpIHsKPiArCQlnZW1fcGluX25lYXJfNDhCaXRfdGVzdCgpOwo+ICsJ fQo+ICsKPiArCWlndF9leGl0KCk7Cj4gK30KPgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2ludGVsLWdmeAo=