From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH i-g-t] tests/gem_buffered_svm_test: New tests for buffered SVM feature Date: Wed, 11 Nov 2015 15:10:39 +0000 Message-ID: <56435A6F.7010709@linux.intel.com> References: <1447171372-13373-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 mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTP id 23D076E9D1 for ; Wed, 11 Nov 2015 07:10:42 -0800 (PST) In-Reply-To: <1447171372-13373-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 CkhpLAoKT24gMTAvMTEvMTUgMTY6MDIsIFZpbmF5IEJlbGdhdW1rYXIgd3JvdGU6Cj4gdjE6IFRo ZXNlIHRlc3RzIGV4ZXJjaXNlIHRoZSB1c2VycHRyIGlvY3RsIHRvIGNyZWF0ZSBzaGFyZWQgYnVm ZmVycwoKTm9ybWFsbHkgd2UgZG9uJ3QgcHV0IHYxIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGNv bW1pdCBtZXNzYWdlLgoKPiBiZXR3ZWVuIENQVSBhbmQgR1BVLiBUaGV5IGNvbnRhaW4gZXJyb3Ig YW5kIG5vcm1hbCB1c2FnZSBzY2VuYXJpb3MuCj4gVGhleSBhbHNvIGNvbnRhaW4gYSBjb3VwbGUg b2Ygc3RyZXNzIHRlc3RzIHdoaWNoIGNvcHkgYnVmZmVycyBiZXR3ZWVuCj4gQ1BVIGFuZCBHUFUu IFRoZXNlIHRlc3RzIHJlbHkgb24gdGhlIHNvZnRwaW4gcGF0Y2ggaW4gb3JkZXIgdG8gcGluIGJ1 ZmZlcnMKPiB0byBhIGNlcnRhaW4gVkEuCj4KPiBDYXZlYXQ6IFRoZXNlIHRlc3RzIHdlcmUgZGVz aWduZWQgdG8gcnVuIG9uIDY0LWJpdCBzeXN0ZW0uIEZ1dHVyZSB3b3JrCj4gaW5jbHVkZXMgYWRk aW5nIGxvZ2ljIHRvIGVuc3VyZSB0aGVzZSB0ZXN0cyBjYW4gcnVuIG9uIDMyLWJpdCBzeXN0ZW1z IHdpdGgKPiBQUEdUVCBzdXBwb3J0LiBTb21lIHRlc3RzIGFyZSBjdXJyZW50bHkgZGlzYWJsZWQg Zm9yIDMyLWJpdCBzeXN0ZW1zIGZvciB0aGF0Cj4gcmVhc29uLgo+Cj4gdjI6IEFkZGVkIGNjIGFu ZCBzaWduZWQtb2ZmLWJ5IGZpZWxkcwo+Cj4gVGVzdGNhc2U6IGlndC9nZW1fYnVmZmVyZWRfc3Zt X3Rlc3QKCkluZmluaXRlIHJlY3Vyc2lvbiEgOikgVGhpcyB0YWcgaXMgbm9ybWFsbHkgcHV0IGlu dG8ga2VybmVsIHBhdGNoZXMgdG8gCnBvaW50IHRvIHRoZSByZWxldmFudCBJR1QuCgo+IENjOiBN aWNoZWwgVGhpZXJyeSA8bWljaGVsLnRoaWVycnlAaW50ZWwuY29tPgo+IFNpZ25lZC1vZmYtYnk6 IFZpbmF5IEJlbGdhdW1rYXIgPHZpbmF5LmJlbGdhdW1rYXJAaW50ZWwuY29tPgo+IC0tLQo+ICAg dGVzdHMvTWFrZWZpbGUuc291cmNlcyAgICAgICAgfCAgICAxICsKPiAgIHRlc3RzL2dlbV9idWZm ZXJlZF9zdm1fdGVzdC5jIHwgMTQ5MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwo+ICAgMiBmaWxlcyBjaGFuZ2VkLCAxNDkxIGluc2VydGlvbnMoKykKPiAgIGNyZWF0 ZSBtb2RlIDEwMDY0NCB0ZXN0cy9nZW1fYnVmZmVyZWRfc3ZtX3Rlc3QuYwo+Cj4gZGlmZiAtLWdp dCBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4gaW5k ZXggOGZiMmRlOC4uMmNlNDIxNiAxMDA2NDQKPiAtLS0gYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2Vz Cj4gKysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+IEBAIC0xMSw2ICsxMSw3IEBAIFRFU1RT X3Byb2dzX00gPSBcCj4gICAJZHJ2X2hhbmdtYW4gXAo+ICAgCWdlbV9iYWRfcmVsb2MgXAo+ICAg CWdlbV9iYXNpYyBcCj4gKwlnZW1fYnVmZmVyZWRfc3ZtX3Rlc3QgXAo+ICAgCWdlbV9jYWNoaW5n IFwKPiAgIAlnZW1fY2xvc2VfcmFjZSBcCj4gICAJZ2VtX2NvbmN1cnJlbnRfYmxpdCBcCgpBbHNv IG5lZWQgdG8gcHV0IGEgYmluYXJ5IG5hbWUgdG8gdGVzdHMvLmdpdGlnbm9yZSBJIHRoaW5rLgoK PiBkaWZmIC0tZ2l0IGEvdGVzdHMvZ2VtX2J1ZmZlcmVkX3N2bV90ZXN0LmMgYi90ZXN0cy9nZW1f YnVmZmVyZWRfc3ZtX3Rlc3QuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAw MC4uNDRkMzQyYQo+IC0tLSAvZGV2L251bGwKPiArKysgYi90ZXN0cy9nZW1fYnVmZmVyZWRfc3Zt X3Rlc3QuYwo+IEBAIC0wLDAgKzEsMTQ5MCBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAx NSBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFu dGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5 IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhl ICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3Ry aWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8g dXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNl LAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0 IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNv LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFi b3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGlu ZyB0aGUgbmV4dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3Bp ZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ICsgKgo+ ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBP RiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICogRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVW RU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJM RSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gKyAqIExJQUJJTElUWSwgV0hFVEhF UiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4g KyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRI RSBVU0UgT1IgT1RIRVIgREVBTElOR1MKPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ICsgKgo+ICsg KiBBdXRob3JzOgo+ICsgKiAgICBWaW5heSBCZWxnYXVta2FyIDx2aW5heS5iZWxnYXVta2FyQGlu dGVsLmNvbT8KCnMvPy8+LwoKPiArICAgICAgVGhvbWFzIERhbmllbCA8dGhvbWFzLmRhbmllbEBp bnRlbC5jb20+Cj4gKyAqCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPHVuaXN0ZC5oPgo+ICsjaW5j bHVkZSA8c3RkbGliLmg+Cj4gKyNpbmNsdWRlIDxzdGRpbnQuaD4KPiArI2luY2x1ZGUgPHN0ZGlv Lmg+Cj4gKyNpbmNsdWRlIDxzdHJpbmcuaD4KPiArI2luY2x1ZGUgPGZjbnRsLmg+Cj4gKyNpbmNs dWRlIDxpbnR0eXBlcy5oPgo+ICsjaW5jbHVkZSA8ZXJybm8uaD4KPiArI2luY2x1ZGUgPHN5cy9z dGF0Lmg+Cj4gKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KPiArI2luY2x1ZGUgPHN5cy90aW1lLmg+ Cj4gKyNpbmNsdWRlIDxtYWxsb2MuaD4KPiArI2luY2x1ZGUgImRybS5oIgo+ICsjaW5jbHVkZSAi aW9jdGxfd3JhcHBlcnMuaCIKPiArI2luY2x1ZGUgImRybXRlc3QuaCIKPiArI2luY2x1ZGUgImlu dGVsX2NoaXBzZXQuaCIKPiArI2luY2x1ZGUgImludGVsX2lvLmgiCj4gKyNpbmNsdWRlICJpOTE1 X2RybS5oIgo+ICsjaW5jbHVkZSA8YXNzZXJ0Lmg+Cj4gKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgo+ ICsjaW5jbHVkZSA8c3lzL2lwYy5oPgo+ICsjaW5jbHVkZSA8c3lzL3NobS5oPgo+ICsjaW5jbHVk ZSAiaWd0X2ttcy5oIgo+ICsjaW5jbHVkZSA8aW50dHlwZXMuaD4KPiArI2luY2x1ZGUgPHN5cy90 eXBlcy5oPgo+ICsjaW5jbHVkZSA8c3lzL3N0YXQuaD4KPiArCj4gKwo+ICsjaWYgKElOVFBUUl9N QVggPT0gSU5UMzJfTUFYKQo+ICsJI2RlZmluZSBJU18zMkJJVF9VU0VSCj4gKyNlbmRpZgoKQ291 bGQgdXNlIGEgYnVpbHQtaW4gZ2NjIGRlZmluZSwgZXZlbiBhdCB0aGUgY2FsbCBzaXRlcyBkaXJl Y3RseS4gTGlrZToKCiNpZmRlZiBfX3g4Nl82NAoKPiArI2RlZmluZSBPQkpFQ1RfU0laRSAxNjM4 NAo+ICsjZGVmaW5lIEJPX1NJWkUgNCAqIDQwOTYKPiArI2RlZmluZSBTVE9SRV9CQVRDSF9CVUZG RVJfU0laRSA2Cj4gKyNkZWZpbmUgU1RSRVNTX0JBVENIX0JVRkZFUl9TSVpFIDUKPiArI2RlZmlu ZSBFWEVDX09CSkVDVF9QSU5ORUQJKDE8PDQpCj4gKyNkZWZpbmUgRVhFQ19PQkpFQ1RfU1VQUE9S VFNfNDhCX0FERFJFU1MgKDE8PDMpCj4gKyNkZWZpbmUgU0hBUkVEX0JVRkZFUl9TSVpFIDQwOTYK PiArI2RlZmluZSBOVU1fRVhFQ19PQkpFQ1RTIDIKPiArCj4gK3R5cGVkZWYgc3RydWN0IGRybV9p OTE1X2dlbV91c2VycHRyIGk5MTVfZ2VtX3VzZXJwdHI7CgpJIGFtIHNsaWdodGx5IGFnYWluc3Qg dGhpcyBhcHByb2FjaC4gSWYgdGhpcyBpcyB0aGUgb25seSB0ZXN0IHdoaWNoIGRvZXMgCml0IGl0 IGNyZWF0ZXMgaW5jb25zaXN0ZW5jeSB3aGljaCBtYWtlcyB3b3JraW5nIGluIHRoZSBjb2RlIGJh c2UgYSAKbGl0dGxlIGJpdCBoYXJkZXIuCgo+ICtzdGF0aWMgaTkxNV9nZW1fdXNlcnB0ciogZ2Vt X2NyZWF0ZV91c2VycHRyX3N0cnVjdCh2b2lkKiBwdHIsIGludCBzaXplLCBpbnQgcmVhZF9vbmx5 KTsKCkJldHRlciB0byB1c2UgNjQtYml0IHNpemUgYW5kIGJvb2wgZm9yIHRoZSBmbGFnLgoKQWxz byBJR1QgYW5kIGtlcm5lbCBjb2Rpbmcgc3R5bGUgaXMgInNvbWV0aGluZyAqZnVuYygpIiwgbm90 ICJzb21ldGhpbmcqIApmdW5jKCkiLgoKPiArCj4gK3N0YXRpYyB2b2lkKiBnZW1fY3JlYXRlX21l bV9idWZmZXIoaW50IHNpemUpOwoKaW50IGFnYWluIGlzIG5vdCBpZGVhbCBmb3Igc2l6ZS4KCj4g K3N0YXRpYyB2b2lkIGdlbV9pbnZhbGlkX3VzZXJwdHJfdGVzdCh2b2lkKTsKPiArc3RhdGljIGlu dCBnZW1fY2FsbF91c2VycHRyX2lvY3RsKGludCBmZCwgaTkxNV9nZW1fdXNlcnB0ciogdXNlcnB0 cik7Cj4gK3N0YXRpYyB2b2lkIGdlbV9iYXNpY190ZXN0KGJvb2wpOwo+ICtzdGF0aWMgdm9pZCBn ZW1fcGluX2ludmFsaWRfdm1hX3Rlc3Qodm9pZCk7Cj4gK3N0YXRpYyB2b2lkIGdlbV9waW5fb3Zl cmxhcF90ZXN0KHZvaWQpOwo+ICtzdGF0aWMgdm9pZCBnZW1fc2htZW1fdGVzdCh2b2lkKTsKPiAr c3RhdGljIHZvaWQgZ2VtX3Bpbl9oaWdoX2FkZHJlc3NfdGVzdCh2b2lkKTsKPiArc3RhdGljIHZv aWQgZ2VtX3Bpbl9tbWFwX2Fub255bW91c190ZXN0KHZvaWQpOwo+ICtzdGF0aWMgdm9pZCBnZW1f cGluX21tYXBfZmlsZV90ZXN0KHZvaWQpOwo+ICsKPiArLyogaW5jb3JyZWN0IGFyZ3MgdG8gdXNl cnB0ciBpb2N0bAo+ICsgICAtIFdyaXRlIHRvIFJlYWQgT25seSBidWZmZXIKPiArKi8KCldoYXQg ZG9lcyB0aGlzIGNvbW1lbnQgcmVsYXRlIHRvIGF0IHRoaXMgcG9zaXRpb24gaW4gdGhlIGZpbGU/ Cgo+ICtzdGF0aWMgaW50IGdlbV9jYWxsX3VzZXJwdHJfaW9jdGwoaW50IGZkLCBpOTE1X2dlbV91 c2VycHRyKiB1c2VycHRyKQo+ICt7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IGRybUlvY3Rs KGZkLCBEUk1fSU9DVExfSTkxNV9HRU1fVVNFUlBUUiwgdXNlcnB0cik7Cj4gKwo+ICsJaWYgKHJl dCkKPiArCQlyZXQgPSBlcnJubzsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9CgpUaGVyZSBhcmUg YSBmZXcgY2FsbCBzaXRlcyB3aGljaCBkbyB0aGUgc2FtZSB0aGluZyBvdXRzaWRlIHRoaXMgdGVz dCBzbyAKbWF5YmUgaXQgd291bGQgYmUgd29ydGggZXh0cmFjdGluZyB0aGlzIGFuZCBuYW1pbmcg aXQgc29tZXRoaW5nIGxpa2UgCmlndF9pb2N0bCBvciBzb21ldGhpbmcuIElmIHlvdSBmZWVsIGxp a2UgaXQuCgo+ICsKPiArc3RhdGljIGk5MTVfZ2VtX3VzZXJwdHIqIGdlbV9jcmVhdGVfdXNlcnB0 cl9zdHJ1Y3Qodm9pZCogcHRyLCBpbnQgc2l6ZSwgaW50IHJlYWRfb25seSkKPiArewo+ICsJaTkx NV9nZW1fdXNlcnB0ciogdXNlcnB0cjsKPiArCj4gKwl1c2VycHRyID0gKGk5MTVfZ2VtX3VzZXJw dHIqKWNhbGxvYygxLCBzaXplb2YoaTkxNV9nZW1fdXNlcnB0cikpOwo+ICsKPiArCWlndF9hc3Nl cnQodXNlcnB0ciAhPSBOVUxMKTsKPiArCj4gKwlpZiAodXNlcnB0cikKPiArCXsKPiArCQl1c2Vy cHRyLT51c2VyX3B0ciA9ICh1aW50cHRyX3QpcHRyOwo+ICsJCXVzZXJwdHItPnVzZXJfc2l6ZSA9 IHNpemU7Cj4gKwkJdXNlcnB0ci0+ZmxhZ3MgPSBJOTE1X1VTRVJQVFJfVU5TWU5DSFJPTklaRUQ7 Cj4gKwo+ICsJCWlmIChyZWFkX29ubHkpCj4gKwkJCXVzZXJwdHItPmZsYWdzIHw9IEk5MTVfVVNF UlBUUl9SRUFEX09OTFk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHVzZXJwdHI7CgpUaGlzIGlzIGEg Yml0IHVudXN1YWwgc2luY2UgYWxsIHRoZSBjYWxsIHNpdGVzIGZyZWUgdGhlIHN0cnVjdCBzdHJh aWdodCAKYXdheS4gU28gd2h5IG5vdCBqdXN0IGhhdmUgaXQgb24gc3RhY2sgbG9jYWxseT8KCj4g K30KPiArCj4gKwo+ICsKPiArLyoqIENyZWF0ZXMgYSBDUFUgYnVmZmVyCgpNYXliZSBzYXkgaXQg aXMgYWxpZ25lZC4KCj4gKyAqICBAc2l6ZSAtIHNpemUgb2YgYnVmZmVyCj4gKyAqICBSRVRVUk5T IHBvaW50ZXIgdG8gYnVmZmVyIG9mIEBzaXplCj4gKyovCj4gKwo+ICtzdGF0aWMgdm9pZCogZ2Vt X2NyZWF0ZV9tZW1fYnVmZmVyKGludCBzaXplKQoKZ2VtXyBpcyBhIGJhZCBwcmVmaXggZm9yIHRo aXMgb25lIHNpbmNlIGl0IGRvZXNuJ3QgaW52b2x2ZSBHRU0uCgo+ICt7Cj4gKwl2b2lkKiBhZGRy Owo+ICsKPiArCWFkZHIgPSBtZW1hbGlnbig0MDk2LCBzaXplKTsKCnBvc2l4X21lbWFsaWduIEkg dGhpbmssIG1lbWFsaWduIGlzIGRlc2NyaWJlZCBhcyBvYnNvbGV0ZSBieSB0aGUgbWFuIHBhZ2Uu Cgo+ICsJaWd0X2Fzc2VydChhZGRyICE9IE5VTEwpOwo+ICsKPiArCXJldHVybiBhZGRyOwo+ICt9 Cj4gKwo+ICsvKioKPiArICogVGhpcyB0ZXN0IHdpbGwgc2VuZCBhbiBpbnZhbGlkIHVzZXJwdHIg c3RydWN0IHRvIHRoZSBpb2N0bAo+ICsgKiBFeHBlY3RlZCByZXN1bHQgaXMgaW9jdGwgY2FsbCBz aG91bGQgcmV0dXJuIEZBSUxVUkUKPiArKi8KPiArc3RhdGljIHZvaWQgZ2VtX2ludmFsaWRfdXNl cnB0cl90ZXN0KHZvaWQpCj4gK3sKPiArCWk5MTVfZ2VtX3VzZXJwdHIqIHVzZXJwdHIgPSBOVUxM Owo+ICsJaW50IGZkLCByZXQ7Cj4gKwo+ICsJZmQgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lO VEVMKTsKPiArCj4gKwlyZXQgPSBnZW1fY2FsbF91c2VycHRyX2lvY3RsKGZkLCB1c2VycHRyKTsK PiArCj4gKwkvKiBFeHBlY3QgdG8gZmFpbCAqLwo+ICsJaWd0X2Fzc2VydChyZXQpOwo+ICt9CgpT dHJpY3RseSBzcGVha2luZyB0aGlzIGRvZXMgbm90IGJlbG9uZyBpbiB0aGlzIHRlc3QuIE1haW4g dXNlcnB0ciBJR1QgCmNvdmVycyB0aGVzZSB0aGluZ3MgYW5kIGluIG1vcmUgZGV0YWlsLgoKPiAr Cj4gKy8qKiBzZXR1cF9leGVjX29iaiAtIHBvcHVsYXRlIGV4ZWMgb2JqZWN0Cj4gKyAqIEBleGVj IC0gZXhlYyBvYmplY3QKPiArICogQGhhbmRsZSAtIGhhbmRsZSB0byBnZW0gYnVmZmVyCj4gKyAq IGZsYWdzIC0gYW55IGZsYWdzCj4gKyAqIG9mZnNldCAtIHJlcXVlc3RlZCBWTUEKPiArICovCj4g K3N0YXRpYyB2b2lkIHNldHVwX2V4ZWNfb2JqKHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmpl Y3QyICpleGVjLCBfX3UzMiBoYW5kbGUsIF9fdTMyIGZsYWdzLCB1aW50MzJfdCogb2Zmc2V0KQoK V2h5IGlzIG9mZnNldCAzMi1iaXQgPyBBbmQgd2h5IG1peCBfX3UgYW5kIHN0ZGludCBkYXRhIHR5 cGVzPwoKPiArewo+ICsJbWVtc2V0KGV4ZWMsIDAsIHNpemVvZihzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X2V4ZWNfb2JqZWN0MikpOwo+ICsJZXhlYy0+aGFuZGxlID0gaGFuZGxlOwo+ICsJZXhlYy0+Zmxh Z3MgPSBmbGFnczsKPiArCWV4ZWMtPm9mZnNldCA9ICh1aW50cHRyX3Qpb2Zmc2V0OwoKT2Zmc2V0 IHNob3VsZCBiZSBfX3U2NCBhbmQgdGhlbiBubyBjYXN0IG5lZWRlZCwgdGhpcyBpcyBldmVuIHRy dW5jYXRpbmcgCndpdGggMzItYml0IHVzZXJzcGFjZS4KCj4gK30KPiArCj4gKy8qKgo+ICsgKiBn ZW1fc3RvcmVfZGF0YV9zdm0gLSBwb3B1bGF0ZSBiYXRjaCBidWZmZXIgd2l0aCBNSV9TVE9SRV9E QVRBX0lNTSBjb21tYW5kCj4gKyAqIEBmZDogZHJtIGZpbGUgZGVzY3JpcHRvcgo+ICsgKiBAYnVm OiBiYXRjaCBidWZmZXIKPiArICogQGJ1ZmZlcl9zaXplOiBzaXplIG9mIGJ1ZmZlcgo+ICsgKiBA YWRkcjogZGVzdGluYXRpb24gVmlydHVhbCBhZGRyZXNzCj4gKyAqIEBkYXRhOiBkYXRhIHRvIGJl IHN0b3JlIGF0IGRlc3RpbmF0aW9uCj4gKyAqIEBlbmQ6IHdoZXRoZXIgdG8gZW5kIGJhdGNoIGJ1 ZmZlciBvciBub3QKPiArICovCj4gKyNkZWZpbmUgTUlfQ09NTUFORCAwCj4gKyNkZWZpbmUgTUlf U1RPUkVfREFUQV9JTU0gMHgyMCA8PCAyMwoKTUlfU1RPUkVfRFdPUkRfSU1NIGluIGxpYi9pbnRl bF9yZWcuaAoKPiArI2RlZmluZSBVU0VfUFBHVFQgMHgwIDw8IDIyCgpNSV9DT01NQU5EIGFuZCBV U0VfUFBHVFQgc2hvdWxkIGJlIHplcm9zIGFuZCBleHBsaWNpdGx5IG1lbnRpb25lZD8KCj4gKyNk ZWZpbmUgRFdPUkRfTEVOR1RIIDB4Mgo+ICtzdGF0aWMgaW50IGdlbV9zdG9yZV9kYXRhX3N2bShp bnQgZmQsIHVpbnQzMl90KiBjbWRfYnVmLCB1aW50MzJfdCogdmFkZHIsCj4gKwkJCSAgICAgIHVp bnQzMl90IGRhdGEsIGJvb2wgZW5kKQo+ICt7Cj4gKwlpbnQgaSA9IDA7Cj4gKwo+ICsJY21kX2J1 ZltpKytdID0gTUlfQ09NTUFORCB8IE1JX1NUT1JFX0RBVEFfSU1NIHwgVVNFX1BQR1RUIHwgRFdP UkRfTEVOR1RIOwo+ICsJY21kX2J1ZltpKytdID0gKHVpbnRwdHJfdCl2YWRkciAmIDB4RkZGRkZG RkM7Cj4gKwkjaWZkZWYgSVNfMzJCSVRfVVNFUgo+ICsJCWNtZF9idWZbaSsrXSA9IDA7Cj4gKwkj ZWxzZSAvLyA2NCBiaXQKPiArCQljbWRfYnVmW2krK10gPSAoKHVpbnRwdHJfdCl2YWRkciA+PiAz MikgJiAweEZGRkY7IC8qIGJpdHMgMzI6NDcgKi8KPiArCSNlbmRpZgoKTm90IHN1cmUgSSB1bmRl cnN0YW5kIHRoaXMgMTAwJSBidXQgZG8geW91IHJlYWxseSBuZWVkIHRoZSAjaWZkZWZzPyAKV291 bGRuJ3QgdmFkZHIgYnkgZGVmaW5pdGlvbiBvbmx5IGhhdmUgMzItYml0IG9mIGNvbnRlbnQgb24g MzItYml0IAp1c2Vyc3BhY2U/IFNvIGlmIHZhZGRyIHdhcyBhIDY0LWJpdCB0eXBlIHlvdSBjb3Vs ZCBqdXN0IHNoaWZ0IGFuZCBtYXNrIAphbmQgZW5kIHVwIHdpdGggemVyb3MgYXV0b21hdGljYWxs eSBpbiB0aGF0IGNhc2UuCgo+ICsKPiArCWNtZF9idWZbaSsrXSA9IGRhdGE7Cj4gKwlpZiAoZW5k KQo+ICsJewo+ICsJCWNtZF9idWZbaSsrXSA9IE1JX0JBVENIX0JVRkZFUl9FTkQ7Cj4gKwkJY21k X2J1ZltpKytdID0gMDsKPiArCX0KPiArCj4gKwlyZXR1cm4gKGkgKiBzaXplb2YodWludDMyX3Qp KTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGdlbV9zdG9yZV9kYXRhX3N2bSAtIHBvcHVsYXRlIGJh dGNoIGJ1ZmZlciB3aXRoIE1JX1NUT1JFX0RBVEFfSU1NIGNvbW1hbmQKCkNvcHkgJiBwYXN0ZSBl cnJvci4KCj4gKyAqIFRoaXMgb25lIGZpbGxzIHVwIHJlbG9jIGJ1ZmZlciBhcyB3ZWxsCj4gKyAq IEBmZDogZHJtIGZpbGUgZGVzY3JpcHRvcgo+ICsgKiBAYnVmOiBiYXRjaCBidWZmZXIKPiArICog QGJ1ZmZlcl9zaXplOiBzaXplIG9mIGJ1ZmZlcgo+ICsgKiBAYWRkcjogZGVzdGluYXRpb24gVmly dHVhbCBhZGRyZXNzCj4gKyAqIEBkYXRhOiBkYXRhIHRvIGJlIHN0b3JlIGF0IGRlc3RpbmF0aW9u Cj4gKyAqIEByZWxvYyAtIHJlbG9jYXRpb24gZW50cnkKPiArICogQGVuZDogd2hldGhlciB0byBl bmQgYmF0Y2ggYnVmZmVyIG9yIG5vdAo+ICsgKi8KPiArCj4gK3N0YXRpYyBpbnQgZ2VtX3N0b3Jl X2RhdGEoaW50IGZkLCB1aW50MzJfdCogY21kX2J1ZiwKPiArCQkJICAgICAgdWludDMyX3QgaGFu ZGxlLCB1aW50MzJfdCBkYXRhLAo+ICsJCQkgICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9j YXRpb25fZW50cnkgKnJlbG9jLAo+ICsJCQkgICAgICBib29sIGVuZCkKPiArewo+ICsJaW50IGkg PSAwOwo+ICsKPiArCWNtZF9idWZbaSsrXSA9IE1JX0NPTU1BTkQgfCBNSV9TVE9SRV9EQVRBX0lN TSB8IFVTRV9QUEdUVCB8IERXT1JEX0xFTkdUSDsKPiArCWNtZF9idWZbaSsrXSA9IDA7IC8qIGxv d2VyIDMxIGJpdHMgb2YgNDggYml0IGFkZHJlc3MgLSAwIGJlY2F1c2UgcmVsb2MgaXMgbmVlZGVk ICovCj4gKwljbWRfYnVmW2krK10gPSAwOyAvKiB1cHBlciAxNSBiaXRzIG9mIDQ4IGJpdCBhZGRy ZXNzIC0gMCBiZWNhdXNlIHJlbG9jIGlzIG5lZWRlZCAqLwo+ICsJcmVsb2MtPm9mZnNldCA9IDEg KiBzaXplb2YodWludDMyX3QpOwo+ICsJcmVsb2MtPmRlbHRhID0gMDsKPiArCXJlbG9jLT50YXJn ZXRfaGFuZGxlID0gaGFuZGxlOwo+ICsJcmVsb2MtPnJlYWRfZG9tYWlucyA9IEk5MTVfR0VNX0RP TUFJTl9SRU5ERVI7Cj4gKwlyZWxvYy0+d3JpdGVfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlOX1JF TkRFUjsKPiArCXJlbG9jLT5wcmVzdW1lZF9vZmZzZXQgPSAwOwo+ICsJcmVsb2MrKzsKPiArCWNt ZF9idWZbaSsrXSA9IGRhdGE7Cj4gKwlpZiAoZW5kKQo+ICsJewo+ICsJCWNtZF9idWZbaSsrXSA9 IE1JX0JBVENIX0JVRkZFUl9FTkQ7Cj4gKwkJY21kX2J1ZltpKytdID0gMDsKPiArCX0KPiArCj4g KwlyZXR1cm4gKGkgKiBzaXplb2YodWludDMyX3QpKTsKPiArfQo+ICsKPiArCj4gKy8qKiBnZW1f YmFzaWNfdGVzdCAtIFRoaXMgdGVzdCB3aWxsIGNyZWF0ZSBhIHNoYXJlZCBidWZmZXIsIGFuZCBj cmVhdGUgYSBjb21tYW5kCj4gKyAqICBmb3IgR1BVIHRvIHdyaXRlIGRhdGEgaW4gaXQKPiArICog IENQVSB3aWxsIHJlYWQgYW5kIG1ha2Ugc3VyZSBleHBlY3RlZCB2YWx1ZSBpcyBvYnRhaW5lZAo+ ICsgKiAgQHZhbGlkX3NoYXJlZF9idWZmZXIgLSB3aGV0aGVyIHRlc3Qgd2l0aCB2YWxpZCBtYWxs b2MnZCBidWZmZXIgb3Igbm90Cj4gKwo+ICtAY29kZQo+ICsgICBpZiAodmFsaWRfc2hhcmVkX2J1 ZmZlciA9PSB0cnVlKQo+ICsgICBNYWxsb2MgYSA0SyBidWZmZXIKPiArICAgU2hhcmUgYnVmZmVy IHdpdGggd2l0aCBHUFUgYnkgdXNpbmcgdXNlcnB0ciBpb2N0bAo+ICsgICBDcmVhdGUgYmF0Y2gg YnVmZmVyIHRvIHdyaXRlIERBVEEgdG8gZmlyc3QgZHdvcmQgb2YgYnVmZmVyCj4gKyAgIFVzZSB2 aXJ0dWFsIGFkZHJlc3Mgb2YgYnVmZmVyIGFzIGRlc3RpbmF0aW9uIGFkZHJlc3MgaW4gYmF0Y2gg YnVmZmVyCj4gKyAgIFNldCBFWEVDX09CSkVDVF9QSU5ORUQgZmxhZyBpbiBleGVjIG9iamVjdAo+ ICsgICBTZXQgJ29mZnNldCcgaW4gZXhlYyBvYmplY3QgdG8gc2hhcmVkIGJ1ZmZlciBWTUEKPiAr ICAgU3VibWl0IGV4ZWNidWZmZXIKPiArICAgVmVyaWZ5IHZhbHVlIG9mIGZpcnN0IERXT1JEIGlu IHNoYXJlZCBidWZmZXIgbWF0Y2hlcyBEQVRBCj4gKwo+ICsgICBpZiAodmFsaWRfc2hhcmVkX2J1 ZmZlciA9PSBmYWxzZSkKPiArICAgRGVjbGFyZSBudWxsIGJ1ZmZlcgo+ICsgICBDYWxsIFVzZXJw dHIgaW9jdGwgd2l0aCBudWxsIGJ1ZmZlcgo+ICsgICBSdW4gQmFzaWMgVGVzdAo+ICsgICBUZXN0 IHNob3VsZCBmYWlsIGF0IHN1Ym1pdCBleGVjYnVmZmVyCj4gK0BlbmRjb2RlCj4gKyovCj4gK3N0 YXRpYyB2b2lkIGdlbV9iYXNpY190ZXN0KGJvb2wgdmFsaWRfc2hhcmVkX2J1ZmZlcikKPiArewo+ ICsJaTkxNV9nZW1fdXNlcnB0ciogdXNlcnB0ciA9IE5VTEw7Cj4gKwlpbnQgZmQsIHJldDsKPiAr CXVpbnQzMl90KiBzaGFyZWRfYnVmZmVyID0gTlVMTDsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1f ZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3Qy IGV4ZWNfb2JqZWN0MltOVU1fRVhFQ19PQkpFQ1RTXTsKPiArCXVpbnQzMl90IGJhdGNoX2J1ZmZl cltTVE9SRV9CQVRDSF9CVUZGRVJfU0laRV07Cj4gKwl1aW50MzJfdCBiYXRjaF9idWZfaGFuZGxl LCBzaGFyZWRfYnVmX2hhbmRsZTsKPiArCWludCByaW5nLCBsZW47Cj4gKwljb25zdCB1aW50MzJf dCBkYXRhID0gMHgxMjM0NTY3ODsKPiArCj4gKwlmZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJf SU5URUwpOwo+ICsJYmF0Y2hfYnVmX2hhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIEJPX1NJWkUpOwo+ ICsKPiArCS8qIGNyZWF0ZSBjcHUgYnVmZmVyLCBzZXQgdG8gYWxsIDB4RidzICovCj4gKwlpZiAo dmFsaWRfc2hhcmVkX2J1ZmZlcikKPiArCXsKCkNvZGluZyBzdHlsZSBpc3N1ZSB3aXRoIGN1cmx5 IGJyYWNlcyB0aHJvdWdob3V0LgoKPiArCQlzaGFyZWRfYnVmZmVyID0gZ2VtX2NyZWF0ZV9tZW1f YnVmZmVyKEJPX1NJWkUpOwo+ICsJCS8vKnNoYXJlZF9idWZmZXIgPSAweEZGRkZGRkZGOwoKPwoK PiArCX0KCkJ1dCBJIHdvdWxkIGRyb3AgdGhlIHZhbGlkX3NoYXJlZF9idWZmZXIgYnVzaW5lc3Mg ZnJvbSB0aGlzIHRlc3QgCmFsdG9nZXRoZXIuIEl0IGlzIGNvdmVyZWQgaW4gdGhlIGJhc2ljIHVz ZXJwdHIgdGVzdGNhc2Ugc28gb25seSBjcmVhdGVzIApub2lzZSBoZXJlLgoKPiArCQo+ICsJLyog c2hhcmUgd2l0aCBHUFUgKi8KPiArCXVzZXJwdHIgPSBnZW1fY3JlYXRlX3VzZXJwdHJfc3RydWN0 KHNoYXJlZF9idWZmZXIsIEJPX1NJWkUsIDApOwoKZmFsc2UgSSBzdXBwb3NlLgoKPiArCXJldCA9 IGdlbV9jYWxsX3VzZXJwdHJfaW9jdGwoZmQsIHVzZXJwdHIpOwo+ICsJaWd0X2Fzc2VydF9lcShy ZXQsIDApOwo+ICsKPiArCS8qIEdldCBoYW5kbGUgZm9yIHNoYXJlZCBidWZmZXIgKi8KPiArCXNo YXJlZF9idWZfaGFuZGxlID0gdXNlcnB0ci0+aGFuZGxlOwo+ICsJZnJlZSh1c2VycHRyKTsKCkl0 IGxvb2tzIGxpa2UgeW91IGp1c3QgbmVlZCBhIGhlbHBlciB3aGljaCBhc3NlcnRzIG9uIGlvY3Rs IGFuZCByZXR1cm5zIAp0aGUgaGFuZGxlLiBUbyBhdm9pZCBkdXBsaWNhdGluZyB0aGlzIHBhdHRl cm4gdGhyb3VnaG91dCB0aGUgY29kZS4KCj4gKwo+ICsJLyogY3JlYXRlIGNvbW1hbmQgYnVmZmVy IHdpdGggd3JpdGUgY29tbWFuZCAqLwo+ICsJbGVuID0gZ2VtX3N0b3JlX2RhdGFfc3ZtKGZkLCBi YXRjaF9idWZmZXIsIHNoYXJlZF9idWZmZXIsIGRhdGEsIHRydWUpOwo+ICsJaWd0X2Fzc2VydF9s dGUobGVuLCBTVE9SRV9CQVRDSF9CVUZGRVJfU0laRSAqIDQpOwoKSG0sIGdlbV9zdG9yZV9kYXRh X3N2bSB3b3VsZCBiZSBiZXR0ZXIgdG8gbWFrZSBzdXJlIGl0IGRvZXNuJ3Qgb3ZlcndyaXRlIAp0 aGUgcHJvdmlkZWQgYnVmZmVyLiBDaGVja2luZyBhZnRlciB0aGUgZmFjdCBpcyBub3QgdGhhdCBz dHJvbmcuCgo+ICsKPiArCWdlbV93cml0ZShmZCwgYmF0Y2hfYnVmX2hhbmRsZSwgMCwgYmF0Y2hf YnVmZmVyLCBsZW4pOwo+ICsKPiArCS8qIHN1Ym1pdCBjb21tYW5kIGJ1ZmZlciAqLwo+ICsJc2V0 dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlswXSwgc2hhcmVkX2J1Zl9oYW5kbGUsIEVYRUNfT0JK RUNUX1BJTk5FRCwgc2hhcmVkX2J1ZmZlcik7Cj4gKwlzZXR1cF9leGVjX29iaigmZXhlY19vYmpl Y3QyWzFdLCBiYXRjaF9idWZfaGFuZGxlLCAwLCAwKTsKPiArCj4gKwlyaW5nID0gMDsKPiArCWlm IChIQVNfQkxUX1JJTkcoaW50ZWxfZ2V0X2RybV9kZXZpZChmZCkpKQo+ICsJCXJpbmcgPSBJOTE1 X0VYRUNfQkxUOwoKV2h5IGl0IGlzIGludGVyZXN0aW5nIHRvIHVzZSB0aGUgYmxpdHRlciByaW5n IGFuZCBub3QgYWx3YXlzIHRoZSByZW5kZXIgCnJpbmc/Cgo+ICsKPiArCWV4ZWNidWYuYnVmZmVy c19wdHIgPSAodWludHB0cl90KWV4ZWNfb2JqZWN0MjsKPiArCWV4ZWNidWYuYnVmZmVyX2NvdW50 ID0gTlVNX0VYRUNfT0JKRUNUUzsKPiArCWV4ZWNidWYuYmF0Y2hfc3RhcnRfb2Zmc2V0ID0gMDsK PiArCWV4ZWNidWYuYmF0Y2hfbGVuID0gbGVuOwo+ICsJZXhlY2J1Zi5jbGlwcmVjdHNfcHRyID0g MDsKPiArCWV4ZWNidWYubnVtX2NsaXByZWN0cyA9IDA7Cj4gKwlleGVjYnVmLkRSMSA9IDA7Cj4g KwlleGVjYnVmLkRSNCA9IDA7Cj4gKwlleGVjYnVmLmZsYWdzID0gcmluZzsKPiArCWk5MTVfZXhl Y2J1ZmZlcjJfc2V0X2NvbnRleHRfaWQoZXhlY2J1ZiwgMCk7Cj4gKwlleGVjYnVmLnJzdmQyID0g MDsKPiArCj4gKwlpZiAodmFsaWRfc2hhcmVkX2J1ZmZlcikKPiArCXsKPiArCQlnZW1fZXhlY2J1 ZihmZCwgJmV4ZWNidWYpOwo+ICsJfQo+ICsJZWxzZQo+ICsJewo+ICsJCS8qIEV4cGVjdCBleGVj YnVmIHRvIGZhaWwgKi8KPiArCQlyZXQgPSBkcm1Jb2N0bChmZCwKPiArCQkgICAgICAgRFJNX0lP Q1RMX0k5MTVfR0VNX0VYRUNCVUZGRVIyLAo+ICsJCSAgICAgICAmZXhlY2J1Zik7Cj4gKwkJaWd0 X2Fzc2VydF9uZXEocmV0LCAwKTsKPiArCX0KPiArCWdlbV9zeW5jKGZkLCBiYXRjaF9idWZfaGFu ZGxlKTsKCkFzc2VydCBvbiBleGVjX29iamVjdFsyXS5vZmZzZXQgPT0gc2hhcmVkX2J1ZmZlci4g QWxzbyB0aHJvdWdob3V0IHRoZSAKdGVzdCwgd2hlcmV2ZXIgeW91IGFzayBmb3IgRVhFQ19PQkpF Q1RfUElOTkVELgoKPiArCWdlbV9jbG9zZShmZCwgYmF0Y2hfYnVmX2hhbmRsZSk7Cj4gKwljbG9z ZShmZCk7Cj4gKwo+ICsJLy8gY2hlY2sgb24gQ1BVIHRvIHNlZSBpZiB2YWx1ZSBjaGFuZ2VzCj4g KwlpZiAodmFsaWRfc2hhcmVkX2J1ZmZlcikKPiArCXsKPiArCQlpZ3RfZmFpbF9vbl9mKHNoYXJl ZF9idWZmZXJbMF0gIT0gZGF0YSwKPiArCQkJICAgICAgIlxuQ1BVIHJlYWQgZG9lcyBub3QgbWF0 Y2ggR1BVIHdyaXRlLCBleHBlY3RlZDogMHgleCwgZ290OiAweCV4XG4iLCBkYXRhLCBzaGFyZWRf YnVmZmVyWzBdKTsKPiArCgpDb21tZW50IHZhbGlkIHRocm91Z2hvdXQgLSBJIHRoaW5rIHlvdSBu ZWVkIHRvIHNldCB0aGUgc2hhcmVkX2J1Zl9oYW5kbGUgCnRvIENQVSBkb21haW4gYmVmb3JlIGFj Y2Vzc2luZyBpdCBhZnRlciB0b3VjaGluZyB3aXRoIHRoZSBHUFUuCgo+ICsJCWZyZWUoc2hhcmVk X2J1ZmZlcik7Cj4gKwl9Cj4gK30KPiArCj4gKy8qKiBnZW1fbXVsdGlwbGVfcHJvY2Vzc190ZXN0 IC0gUnVuIGJhc2ljIHRlc3Qgc2ltdWx0YW5lb3VzbHkgd2l0aCBtdWx0aXBsZSBwcm9jZXNzZXMK PiArKiAgIFRoaXMgd2lsbCB0ZXN0IHBpbm5pbmcgc2FtZSBWQSBzZXBhcmF0ZWx5IGluIGVhY2gg cHJvY2Vzcwo+ICsKPiArICAgIGZvcmsoKTsKPiArICAgIEV4ZWN1dGUgYmFzaWMgdGVzdCBpbiBw YXJlbnQvY2hpbGQgcHJvY2Vzc2VzCj4gKwo+ICsqKi8KPiArCj4gK3N0YXRpYyB2b2lkIGdlbV9t dWx0aXBsZV9wcm9jZXNzX3Rlc3Qodm9pZCkKPiArewo+ICsJaW50IHN0YXR1czsKPiArCXBpZF90 IGNoaWxkX3BpZCwgd2FpdF9waWQ7Cj4gKwljaGlsZF9waWQgPSBmb3JrKCk7Cj4gKwo+ICsJaWYg KGNoaWxkX3BpZCA9PSAwKQo+ICsJewo+ICsJCWdlbV9iYXNpY190ZXN0KHRydWUpOwo+ICsJCV9l eGl0KDApOwo+ICsJfQo+ICsJZWxzZQo+ICsJewo+ICsJCWdlbV9iYXNpY190ZXN0KHRydWUpOwo+ ICsJCXdhaXRfcGlkID0gd2FpdCgmc3RhdHVzKTsKPiArCQlpZ3RfYXNzZXJ0KHdhaXRfcGlkICE9 IC0xKTsKPiArCX0KPiArfQoKRG9lc24ndCBjaGVjayBmb3IgZXJyb3JzIGZyb20gZm9yay4KCkJ1 dCBJR1QgaGFzIGZvcmsgaGVscGVycyB3aGljaCBJIHRoaW5rIHlvdSBzaG91bGQgdXNlLgoKPiAr Cj4gKy8qKiBnZW1fcmVwaW5fdGVzdAo+ICsgKiBUaGlzIHRlc3QgdHJpZXMgdG8gcmVwaW4gYSBi dWZmZXIgYXQgYSBwcmV2aW91c2x5IHBpbm5lZCB2bWEKPiArICogZnJvbSBhIGRpZmZlcmVudCBl eGVjYnVmLgo+ICsKPiArQGNvZGUKPiArICAgTWFsbG9jIGEgNEsgYnVmZmVyCj4gKyAgIFNoYXJl IGJ1ZmZlciB3aXRoIHdpdGggR1BVIGJ5IHVzaW5nIHVzZXJwdHIgaW9jdGwKPiArICAgQ3JlYXRl IGJhdGNoIGJ1ZmZlciB0byB3cml0ZSBEQVRBIHRvIGZpcnN0IGR3b3JkIG9mIGJ1ZmZlcgo+ICsg ICBVc2UgdmlydHVhbCBhZGRyZXNzIG9mIGJ1ZmZlciBhcyBkZXN0aW5hdGlvbiBhZGRyZXNzIGlu IGJhdGNoIGJ1ZmZlcgo+ICsgICBTZXQgRVhFQ19PQkpFQ1RfUElOTkVEIGZsYWcgaW4gZXhlYyBv YmplY3QKPiArICAgU2V0ICdvZmZzZXQnIGluIGV4ZWMgb2JqZWN0IHRvIHNoYXJlZCBidWZmZXIg Vk1BCj4gKyAgIFN1Ym1pdCBleGVjYnVmZmVyCj4gKyAgIFZlcmlmeSB2YWx1ZSBvZiBmaXJzdCBE V09SRCBpbiBzaGFyZWQgYnVmZmVyIG1hdGNoZXMgREFUQQo+ICsKPiArICAgQ3JlYXRlIHNlY29u ZCBzaGFyZWQgYnVmZmVyCj4gKyAgIEZvbGxvdyBhbGwgc3RlcHMgYWJvdmUKPiArICAgRXhlY3B0 LCBmb3Igb2Zmc2V0LCB1c2UgVk1BIG9mIGZpcnN0IGJ1ZmZlciBhYm92ZQo+ICsgICBTdWJtaXQg ZXhlY2J1ZmZlcgo+ICsgICBWZXJpZnkgdmFsdWUgb2YgZmlyc3QgRFdPUkQgaW4gc2Vjb25kIHNo YXJlZCBidWZmZXIgbWF0Y2hlcyBEQVRBCj4gKwo+ICtAZW5kY29kZQo+ICsqKi8KPiArCj4gK3N0 YXRpYyB2b2lkIGdlbV9yZXBpbl90ZXN0KHZvaWQpCj4gK3sKPiArCWk5MTVfZ2VtX3VzZXJwdHIq IHVzZXJwdHIgPSBOVUxMOwo+ICsJaTkxNV9nZW1fdXNlcnB0ciogdXNlcnB0cjEgPSBOVUxMOwo+ ICsJaW50IGZkLCByZXQ7Cj4gKwl1aW50MzJfdCogc2hhcmVkX2J1ZmZlciA9IE5VTEw7Cj4gKwl1 aW50MzJfdCogc2hhcmVkX2J1ZmZlcjEgPSBOVUxMOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9l eGVjYnVmZmVyMiBleGVjYnVmLCBleGVjYnVmMTsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhl Y19vYmplY3QyIGV4ZWNfb2JqZWN0MltOVU1fRVhFQ19PQkpFQ1RTXTsKPiArCXVpbnQzMl90IGJh dGNoX2J1ZmZlcltTVE9SRV9CQVRDSF9CVUZGRVJfU0laRV07Cj4gKwl1aW50MzJfdCBiYXRjaF9i dWZfaGFuZGxlLCBzaGFyZWRfYnVmX2hhbmRsZSwgc2hhcmVkX2J1Zl9oYW5kbGUxOwo+ICsJaW50 IHJpbmcsIGxlbjsKPiArCWNvbnN0IHVpbnQzMl90IGRhdGEgPSAweDEyMzQ1Njc4Owo+ICsKPiAr CS8vIENyZWF0ZSBnZW0gb2JqZWN0Cj4gKwlmZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfSU5U RUwpOwo+ICsJYmF0Y2hfYnVmX2hhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIEJPX1NJWkUpOwo+ICsK PiArCS8vIGNyZWF0ZSBjcHUgYnVmZmVyLCBzZXQgdG8gYWxsIDB4RidzCj4gKwlzaGFyZWRfYnVm ZmVyID0gZ2VtX2NyZWF0ZV9tZW1fYnVmZmVyKEJPX1NJWkUpOwo+ICsJc2hhcmVkX2J1ZmZlcjEg PSBnZW1fY3JlYXRlX21lbV9idWZmZXIoQk9fU0laRSAqIDIpOwoKV2h5IGRvZXMgMm5kIG9uZSBu ZWVkcyB0byBiZSBiaWdnZXI/Cgo+ICsKPiArCS8vIHNoYXJlIHdpdGggR1BVCj4gKwl1c2VycHRy ID0gZ2VtX2NyZWF0ZV91c2VycHRyX3N0cnVjdChzaGFyZWRfYnVmZmVyLCBCT19TSVpFLCAwKTsK PiArCXJldCA9IGdlbV9jYWxsX3VzZXJwdHJfaW9jdGwoZmQsIHVzZXJwdHIpOwo+ICsJaWd0X2Fz c2VydF9lcShyZXQsIDApOwo+ICsKPiArCXVzZXJwdHIxID0gZ2VtX2NyZWF0ZV91c2VycHRyX3N0 cnVjdChzaGFyZWRfYnVmZmVyMSwgQk9fU0laRSAqIDIsIDApOwo+ICsJcmV0ID0gZ2VtX2NhbGxf dXNlcnB0cl9pb2N0bChmZCwgdXNlcnB0cjEpOwo+ICsJaWd0X2Fzc2VydF9lcShyZXQsIDApOwo+ ICsKPiArCS8vIEdldCBoYW5kbGUgZm9yIHNoYXJlZCBidWZmZXIKPiArCXNoYXJlZF9idWZfaGFu ZGxlID0gdXNlcnB0ci0+aGFuZGxlOwo+ICsJc2hhcmVkX2J1Zl9oYW5kbGUxID0gdXNlcnB0cjEt PmhhbmRsZTsKPiArCWZyZWUodXNlcnB0cik7Cj4gKwlmcmVlKHVzZXJwdHIxKTsKPiArCj4gKwkv LyBjcmVhdGUgY29tbWFuZCBidWZmZXIgd2l0aCB3cml0ZSBjb21tYW5kCj4gKwlsZW4gPSBnZW1f c3RvcmVfZGF0YV9zdm0oZmQsIGJhdGNoX2J1ZmZlciwgc2hhcmVkX2J1ZmZlciwgZGF0YSwgdHJ1 ZSk7Cj4gKwlnZW1fd3JpdGUoZmQsIGJhdGNoX2J1Zl9oYW5kbGUsIDAsIGJhdGNoX2J1ZmZlciwg bGVuKTsKPiArCj4gKwkvLyBzdWJtaXQgY29tbWFuZCBidWZmZXIKPiArCXNldHVwX2V4ZWNfb2Jq KCZleGVjX29iamVjdDJbMF0sIHNoYXJlZF9idWZfaGFuZGxlLCBFWEVDX09CSkVDVF9QSU5ORUQs IHNoYXJlZF9idWZmZXIpOwo+ICsJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlsxXSwgYmF0 Y2hfYnVmX2hhbmRsZSwgMCwgMCk7Cj4gKwo+ICsJcmluZyA9IDA7Cj4gKwlpZiAoSEFTX0JMVF9S SU5HKGludGVsX2dldF9kcm1fZGV2aWQoZmQpKSkKPiArCQlyaW5nID0gSTkxNV9FWEVDX0JMVDsK PiArCj4gKwlleGVjYnVmLmJ1ZmZlcnNfcHRyID0gKHVpbnRwdHJfdClleGVjX29iamVjdDI7Cj4g KwlleGVjYnVmLmJ1ZmZlcl9jb3VudCA9IE5VTV9FWEVDX09CSkVDVFM7Cj4gKwlleGVjYnVmLmJh dGNoX3N0YXJ0X29mZnNldCA9IDA7Cj4gKwlleGVjYnVmLmJhdGNoX2xlbiA9IGxlbjsKPiArCWV4 ZWNidWYuY2xpcHJlY3RzX3B0ciA9IDA7Cj4gKwlleGVjYnVmLm51bV9jbGlwcmVjdHMgPSAwOwo+ ICsJZXhlY2J1Zi5EUjEgPSAwOwo+ICsJZXhlY2J1Zi5EUjQgPSAwOwo+ICsJZXhlY2J1Zi5mbGFn cyA9IHJpbmc7Cj4gKwlpOTE1X2V4ZWNidWZmZXIyX3NldF9jb250ZXh0X2lkKGV4ZWNidWYsIDAp Owo+ICsJZXhlY2J1Zi5yc3ZkMiA9IDA7Cj4gKwo+ICsJZ2VtX2V4ZWNidWYoZmQsICZleGVjYnVm KTsKPiArCWdlbV9zeW5jKGZkLCBiYXRjaF9idWZfaGFuZGxlKTsKCkFyZSB0aGVzZSBibG9ja3Ms IGZyb20gc2V0dXBfZXhlY19vYmosIGZpbGxpbmcgdGhlIHN0cnVjdCwgbWF5YmUgZXZlbiB0byAK ZXhlY2J1ZiBhbmQgc3luYyBsb29rIGxpa2UgY2FuZGlkYXRlcyBmb3IgZXh0cmFjdGluZyBpbnRv IGEgaGVscGVyIApmdW5jdGlvbj8gVGhyZWUgaW5zdGFuY2VzIHNvIGZhciwgbmVlZCB0byBzZWUg d2hhdCBoYXBwZW5zIGZ1cnRoZXIgZG93bi4uLgoKPiArCj4gKwkvLyBTZWNvbmQgYnVmZmVyCj4g KwkvLyBjcmVhdGUgY29tbWFuZCBidWZmZXIgd2l0aCB3cml0ZSBjb21tYW5kCj4gKwlsZW4gPSBn ZW1fc3RvcmVfZGF0YV9zdm0oZmQsIGJhdGNoX2J1ZmZlciwgc2hhcmVkX2J1ZmZlcjEsIGRhdGEs IHRydWUpOwo+ICsJZ2VtX3dyaXRlKGZkLCBiYXRjaF9idWZfaGFuZGxlLCAwLCBiYXRjaF9idWZm ZXIsIGxlbik7Cj4gKwo+ICsJLy8gc3VibWl0IGNvbW1hbmQgYnVmZmVyCj4gKwkvLyBQaW4gYXQg c2hhcmVkX2J1ZmZlciwgbm90IHNoYXJlZF9idWZmZXIxCgpNYXliZSBleHBhbmQgdGhlIGNvbW1l bnQgdG8gZXhwbGFpbiB0aGF0IHdlIGFyZSBhc2tpbmcgdGhlIDJuZCBvYmplY3QgdG8gCmJlIHBp bm5lZCBhdCB0aGUgc2FtZSBHRlggVkEgYXMgdGhlIGZpcnN0IG9iamVjdCB0byB2ZXJpZnkgMXN0 IHdpbGwgYmUgCmV2aWN0ZWQgdG8gbWFrZSBzcGFjZT8KCklmIEkgZ290IHRoYXQgcmlnaHQgdGhl biBhbHNvIGlzIHJlcGluIHRoZSBiZXN0IG5hbWUgZm9yIHRoZSB0ZXN0PyBNYXliZSAKc29tZXRo aW5nIHdpdGggZXZpY3Q/Cgo+ICsJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlswXSwgc2hh cmVkX2J1Zl9oYW5kbGUxLCBFWEVDX09CSkVDVF9QSU5ORUQsIHNoYXJlZF9idWZmZXIpOwo+ICsJ c2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlsxXSwgYmF0Y2hfYnVmX2hhbmRsZSwgMCwgMCk7 Cj4gKwo+ICsJcmluZyA9IDA7Cj4gKwlpZiAoSEFTX0JMVF9SSU5HKGludGVsX2dldF9kcm1fZGV2 aWQoZmQpKSkKPiArCQlyaW5nID0gSTkxNV9FWEVDX0JMVDsKPiArCj4gKwlleGVjYnVmMS5idWZm ZXJzX3B0ciA9ICh1aW50cHRyX3QpZXhlY19vYmplY3QyOwo+ICsJZXhlY2J1ZjEuYnVmZmVyX2Nv dW50ID0gTlVNX0VYRUNfT0JKRUNUUzsKPiArCWV4ZWNidWYxLmJhdGNoX3N0YXJ0X29mZnNldCA9 IDA7Cj4gKwlleGVjYnVmMS5iYXRjaF9sZW4gPSBsZW47Cj4gKwlleGVjYnVmMS5jbGlwcmVjdHNf cHRyID0gMDsKPiArCWV4ZWNidWYxLm51bV9jbGlwcmVjdHMgPSAwOwo+ICsJZXhlY2J1ZjEuRFIx ID0gMDsKPiArCWV4ZWNidWYxLkRSNCA9IDA7Cj4gKwlleGVjYnVmMS5mbGFncyA9IHJpbmc7Cj4g KwlpOTE1X2V4ZWNidWZmZXIyX3NldF9jb250ZXh0X2lkKGV4ZWNidWYxLCAwKTsKPiArCWV4ZWNi dWYxLnJzdmQyID0gMDsKPiArCj4gKwlnZW1fZXhlY2J1ZihmZCwgJmV4ZWNidWYxKTsKPiArCWdl bV9zeW5jKGZkLCBiYXRjaF9idWZfaGFuZGxlKTsKPiArCj4gKwlnZW1fY2xvc2UoZmQsIGJhdGNo X2J1Zl9oYW5kbGUpOwo+ICsJY2xvc2UoZmQpOwoKV2hlcmUgYXJlIHRoZSB2ZXJpZmljYXRpb25z IHRoYXQgZHdvcmRzIHdlcmUgd3JpdHRlbiBhcyBleHBlY3RlZD8KCj4gKwlmcmVlKHNoYXJlZF9i dWZmZXIpOwo+ICsJZnJlZShzaGFyZWRfYnVmZmVyMSk7Cj4gK30KPiArCj4gKwo+ICsvKiogZ2Vt X3JlcGluX292ZXJsYXBfdGVzdAo+ICsgKiAgVGhpcyB0ZXN0IHdpbGwgYXR0ZW1wdCB0byBwaW4g dHdvIGJ1ZmZlcnMgYXQgdGhlIHNhbWUgVk1BIGFzIHBhcnQgb2YgdGhlIHNhbWUKPiArICAgIGV4 ZWNidWZmZXIgb2JqZWN0Cj4gKwo+ICtAY29kZQo+ICsgICBNYWxsb2MgYSA0SyBidWZmZXIKPiAr ICAgU2hhcmUgYnVmZmVyIHdpdGggd2l0aCBHUFUgYnkgdXNpbmcgdXNlcnB0ciBpb2N0bAo+ICsg ICBDcmVhdGUgc2Vjb25kIHNoYXJlZCBidWZmZXIKPiArICAgQ3JlYXRlIGJhdGNoIGJ1ZmZlciB0 byB3cml0ZSBEQVRBIHRvIGZpcnN0IGR3b3JkIG9mIGVhY2ggYnVmZmVyCj4gKyAgIFVzZSB2aXJ0 dWFsIGFkZHJlc3Mgb2YgZWFjaCBidWZmZXIgYXMgZGVzdGluYXRpb24gYWRkcmVzc2VzIGluIGJh dGNoIGJ1ZmZlcgo+ICsgICBTZXQgRVhFQ19PQkpFQ1RfUElOTkVEIGZsYWcgaW4gYm90aCBleGVj IG9iamVjdHMKPiArICAgU2V0ICdvZmZzZXQnIGluIGJvdGggZXhlYyBvYmplY3RzIHRvIGZpcnN0 IHNoYXJlZCBidWZmZXIgVk1BCj4gKyAgIFN1Ym1pdCBleGVjYnVmZmVyCj4gKyAgIENvbW1hbmQg c2hvdWxkIHJldHVybiBFSU5WQUwsIHNpbmNlIHdlIGFyZSB0cnlpbmcgdG8gcGluIHRvIHNhbWUg Vk1BCj4gK0BlbmRjb2RlCj4gKyoqLwo+ICtzdGF0aWMgdm9pZCBnZW1fcGluX292ZXJsYXBfdGVz dCh2b2lkKQo+ICt7Cj4gKwlpOTE1X2dlbV91c2VycHRyKiB1c2VycHRyID0gTlVMTDsKPiArCWk5 MTVfZ2VtX3VzZXJwdHIqIHVzZXJwdHIxID0gTlVMTDsKPiArCWludCBmZCwgcmV0Owo+ICsJdWlu dDMyX3QqIHNoYXJlZF9idWZmZXIgPSBOVUxMOwo+ICsJdWludDMyX3QqIHNoYXJlZF9idWZmZXIx ID0gTlVMTDsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKPiAr CXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIGV4ZWNfb2JqZWN0MltOVU1fRVhFQ19P QkpFQ1RTICsgMV07Cj4gKwl1aW50MzJfdCBiYXRjaF9idWZmZXJbQk9fU0laRV07Cj4gKwl1aW50 MzJfdCBiYXRjaF9idWZfaGFuZGxlLCBzaGFyZWRfYnVmX2hhbmRsZSwgc2hhcmVkX2J1Zl9oYW5k bGUxOwo+ICsJaW50IHJpbmcsIGxlbjsKPiArCWNvbnN0IHVpbnQzMl90IGRhdGEgPSAweDEyMzQ1 Njc4Owo+ICsKPiArCWZkID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9JTlRFTCk7Cj4gKwliYXRj aF9idWZfaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgQk9fU0laRSk7Cj4gKwo+ICsJc2hhcmVkX2J1 ZmZlciA9IGdlbV9jcmVhdGVfbWVtX2J1ZmZlcihCT19TSVpFKTsKPiArCXNoYXJlZF9idWZmZXIx ID0gZ2VtX2NyZWF0ZV9tZW1fYnVmZmVyKEJPX1NJWkUgKiAyKTsKPiArCj4gKwkvKiBzaGFyZSB3 aXRoIEdQVSAqLwo+ICsJdXNlcnB0ciA9IGdlbV9jcmVhdGVfdXNlcnB0cl9zdHJ1Y3Qoc2hhcmVk X2J1ZmZlciwgQk9fU0laRSwgMCk7Cj4gKwlyZXQgPSBnZW1fY2FsbF91c2VycHRyX2lvY3RsKGZk LCB1c2VycHRyKTsKPiArCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKPiArCj4gKwl1c2VycHRyMSA9 IGdlbV9jcmVhdGVfdXNlcnB0cl9zdHJ1Y3Qoc2hhcmVkX2J1ZmZlcjEsIEJPX1NJWkUgKiAyLCAw KTsKPiArCXJldCA9IGdlbV9jYWxsX3VzZXJwdHJfaW9jdGwoZmQsIHVzZXJwdHIxKTsKPiArCWln dF9hc3NlcnRfZXEocmV0LCAwKTsKPiArCj4gKwlzaGFyZWRfYnVmX2hhbmRsZSA9IHVzZXJwdHIt PmhhbmRsZTsKPiArCXNoYXJlZF9idWZfaGFuZGxlMSA9IHVzZXJwdHIxLT5oYW5kbGU7Cj4gKwlm cmVlKHVzZXJwdHIpOwo+ICsJZnJlZSh1c2VycHRyMSk7Cj4gKwo+ICsJbGVuID0gZ2VtX3N0b3Jl X2RhdGFfc3ZtKGZkLCBiYXRjaF9idWZmZXIsIHNoYXJlZF9idWZmZXIsIGRhdGEsIGZhbHNlKTsK PiArCWxlbiArPSBnZW1fc3RvcmVfZGF0YV9zdm0oZmQsIChiYXRjaF9idWZmZXIgKyBsZW4vNCks IHNoYXJlZF9idWZmZXIxLCBkYXRhLCB0cnVlKTsKPiArCWdlbV93cml0ZShmZCwgYmF0Y2hfYnVm X2hhbmRsZSwgMCwgYmF0Y2hfYnVmZmVyLCBsZW4pOwo+ICsKPiArCS8qIHN1Ym1pdCBjb21tYW5k IGJ1ZmZlciAqLwo+ICsJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlswXSwgc2hhcmVkX2J1 Zl9oYW5kbGUsIEVYRUNfT0JKRUNUX1BJTk5FRCwgc2hhcmVkX2J1ZmZlcik7Cj4gKwlzZXR1cF9l eGVjX29iaigmZXhlY19vYmplY3QyWzFdLCBzaGFyZWRfYnVmX2hhbmRsZTEsIEVYRUNfT0JKRUNU X1BJTk5FRCwgc2hhcmVkX2J1ZmZlcik7Cj4gKwlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3Qy WzJdLCBiYXRjaF9idWZfaGFuZGxlLCAwLCAwKTsKPiArCj4gKwlyaW5nID0gMDsKPiArCWlmIChI QVNfQkxUX1JJTkcoaW50ZWxfZ2V0X2RybV9kZXZpZChmZCkpKQo+ICsJCXJpbmcgPSBJOTE1X0VY RUNfQkxUOwo+ICsKPiArCWV4ZWNidWYuYnVmZmVyc19wdHIgPSAodWludHB0cl90KWV4ZWNfb2Jq ZWN0MjsKPiArCWV4ZWNidWYuYnVmZmVyX2NvdW50ID0gTlVNX0VYRUNfT0JKRUNUUyArIDE7Cj4g KwlleGVjYnVmLmJhdGNoX3N0YXJ0X29mZnNldCA9IDA7Cj4gKwlleGVjYnVmLmJhdGNoX2xlbiA9 IGxlbjsKPiArCWV4ZWNidWYuY2xpcHJlY3RzX3B0ciA9IDA7Cj4gKwlleGVjYnVmLm51bV9jbGlw cmVjdHMgPSAwOwo+ICsJZXhlY2J1Zi5EUjEgPSAwOwo+ICsJZXhlY2J1Zi5EUjQgPSAwOwo+ICsJ ZXhlY2J1Zi5mbGFncyA9IHJpbmc7Cj4gKwlpOTE1X2V4ZWNidWZmZXIyX3NldF9jb250ZXh0X2lk KGV4ZWNidWYsIDApOwo+ICsJZXhlY2J1Zi5yc3ZkMiA9IDA7Cj4gKwo+ICsJcmV0ID0gZHJtSW9j dGwoZmQsCj4gKwkgICAgICBEUk1fSU9DVExfSTkxNV9HRU1fRVhFQ0JVRkZFUjIsCj4gKwkgICAg ICAmZXhlY2J1Zik7Cj4gKwo+ICsJLyogZXhwZWN0IHRvIGZhaWwgKi8KPiArCWlndF9hc3NlcnQo ZXJybm8gPT0gMjIpOwo+ICsJaWd0X2Fzc2VydF9uZXEocmV0LCAwKTsKCnJldCBmaXJzdCwgZXJy bm8gc2Vjb25kLgoKPiArCj4gKwlnZW1fY2xvc2UoZmQsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICsJ Y2xvc2UoZmQpOwo+ICsKPiArCWZyZWUoc2hhcmVkX2J1ZmZlcik7Cj4gKwlmcmVlKHNoYXJlZF9i dWZmZXIxKTsKPiArfQo+ICsKPiArCj4gKy8qKiBnZW1fZXZpY3RfdGVzdAo+ICsgKiAgY3JlYXRl IHNoYXJlZCBidWZmZXIsIHBpbiBpdAo+ICsgKiAgY3JlYXRlIG5vcm1hbCBidWZmZXIKPiArICog IHRyeSBhbmQgcmVsb2NhdGUgdG8gc2hhcmVkIGxvY2F0aW9uCj4gKyAqICBPcGVuczogSG93IHRv IGRldGVjdCBldmljdGlvbiBvY2N1cmVkPwo+ICsgKiAgaTkxNV9nZW1fZ3R0IC0gZGVidWdmcyBh cGkgLSBncmVwIGl0IGZvciB0aGUgcGFnZT8KPiArCj4gK0Bjb2RlCj4gKyAgICBDcmVhdGUgYSBn ZW0gYnVmZmVyIG9mIDRLCj4gKyAgICBNYWxsb2MgYSA0SyBidWZmZXIKPiArICAgIFNoYXJlIGJ1 ZmZlciB3aXRoIEdQVSB1c2luZyB1c2VycHRyIGlvY3RsCj4gKyAgICBDcmVhdGUgYSBiYXRjaCBi dWZmZXIgdG8gd3JpdGUgMHgxMTExMTExMSBhbmQgMHgyMjIyMjIyMiBpbiBhYm92ZSAyIGJ1ZmZl cnMKPiArICAgIFBpbiBTaGFyZWQgYnVmZmVyIHRvIG9mZnNldCAnMCcgaW4gR1RUCgpXaHkgYXQg dGhhdCBhZGRyZXNzPwoKPiArICAgIENyZWF0ZSByZWxvYyBidWZmZXIgdG8gZW5zdXJlIGdlbSBi dWZmZXIgaXMgcmVsb2NhdGVkIHRvIEdUVAo+ICsgICAgU3VibWl0IGV4ZWNidWZmZXIKPiArICAg IFZlcmlmeSBzaGFyZWQgYnVmZmVyIGhhcyAweDIyMjIyMjIyIGFzIGV4cGVjdGVkCj4gKyAgICBP YnRhaW4gb2Zmc2V0IG9mIHdoZXJlIGdlbSBvYmplY3QgaGFzIGJlZW4gcGxhY2VkIGZyb20gZXhl YyBvYmplY3QgZmllbGQKPiArICAgIFRyeSB0byBwaW4gc2hhcmVkIGJ1ZmZlciBhdCB0aGF0IGFk ZHJlc3MgdXNpbmcgJ29mZnNldCcgZmllbGQgaW4gZXhlYyBvYmplY3QKPiArICAgIFByZXZlbnQg cmVsb2NhdGlvbiBieSBzZXR0aW5nIHJlbG9jYXRpb25fY291bnQgPSAwCj4gKyAgICBTdWJtaXQg ZXhlY2J1ZmZlcgo+ICsgICAgU2hhcmVkIGJ1ZmZlciB3aWxsIGJlIHBpbm5lZCB0byBwcmV2aW91 cyBhZGRyZXNzIG9mIGdlbSBvYmplY3QKPiArICAgIFVuc2hhcmVkIGJ1ZmZlciB3aWxsIGJlIGV2 aWN0ZWQsIHNpbmNlIHJlbG9jYXRpb24gaXMgbm90IGFsbG93ZWQKPiArICAgIFNlY29uZCBiYXRj aCBidWZmZXIgd2lsbCB3cml0ZSAweDExMTExMTExIHRvIHNoYXJlZCBidWZmZXIgaW5zdGVhZCBv ZiB1bnNoYXJlZAo+ICsgICAgVmVyaWZ5IHNoYXJlZCBidWZmZXIgY29udGFpbnMgMHgxMTExMTEx MQo+ICsgICAgUmV2ZXJzZSBvcmRlciBvZiBpbnN0cnVjdGlvbnMgaW4gYmF0Y2ggYnVmZmVyIHRv IHdyaXRlIHRvIHVuc2hhcmVkIGZpcnN0Cj4gK0BlbmRjb2RlCj4gKwo+ICsqKi8KPiArCj4gK3N0 YXRpYyB2b2lkIGdlbV9ldmljdF90ZXN0KHZvaWQpCj4gK3sKPiArCWk5MTVfZ2VtX3VzZXJwdHIq IHVzZXJwdHIgPSBOVUxMOwo+ICsJaW50IGZkLCByZXQ7Cj4gKwl1aW50MzJfdCogc2hhcmVkX2J1 ZmZlciA9IE5VTEw7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgcmVs b2NbNF07Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7Cj4gKwlz dHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBleGVjX29iamVjdDJbTlVNX0VYRUNfT0JK RUNUUyArIDFdOwo+ICsJdWludDMyX3QgYmF0Y2hfYnVmZmVyW1NUT1JFX0JBVENIX0JVRkZFUl9T SVpFICogMl07Cj4gKwl1aW50MzJfdCBiYXRjaF9idWZfaGFuZGxlLCBzaGFyZWRfYnVmX2hhbmRs ZSwgdW5zaGFyZWRfYnVmX2hhbmRsZTsKPiArCWludCByaW5nLCBsZW47Cj4gKwo+ICsJZmQgPSBk cm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKPiArCWJhdGNoX2J1Zl9oYW5kbGUgPSBnZW1f Y3JlYXRlKGZkLCBCT19TSVpFKTsKPiArCXVuc2hhcmVkX2J1Zl9oYW5kbGUgPSBnZW1fY3JlYXRl KGZkLCBCT19TSVpFKTsKPiArCj4gKwlzaGFyZWRfYnVmZmVyID0gZ2VtX2NyZWF0ZV9tZW1fYnVm ZmVyKEJPX1NJWkUpOwo+ICsJKnNoYXJlZF9idWZmZXIgPSAweEZGRkZGRkZGOwo+ICsKPiArCS8v IHNoYXJlIHdpdGggR1BVCj4gKwl1c2VycHRyID0gZ2VtX2NyZWF0ZV91c2VycHRyX3N0cnVjdChz aGFyZWRfYnVmZmVyLCBCT19TSVpFLCAwKTsKPiArCXJldCA9IGdlbV9jYWxsX3VzZXJwdHJfaW9j dGwoZmQsIHVzZXJwdHIpOwo+ICsJaWd0X2Fzc2VydF9lcShyZXQsIDApOwo+ICsKPiArCS8vIEdl dCBoYW5kbGUgZm9yIHNoYXJlZCBidWZmZXIKPiArCXNoYXJlZF9idWZfaGFuZGxlID0gdXNlcnB0 ci0+aGFuZGxlOwo+ICsJZnJlZSh1c2VycHRyKTsKPiArCj4gKwkvLyBjcmVhdGUgY29tbWFuZCBi dWZmZXIgd2l0aCB3cml0ZSBjb21tYW5kcwo+ICsJbGVuID0gZ2VtX3N0b3JlX2RhdGEoZmQsIGJh dGNoX2J1ZmZlciwgdW5zaGFyZWRfYnVmX2hhbmRsZSwgMHgxMTExMTExMSwgcmVsb2MsIGZhbHNl KTsKPiArCWxlbiArPSBnZW1fc3RvcmVfZGF0YV9zdm0oZmQsIGJhdGNoX2J1ZmZlciArIChsZW4v NCksIE5VTEwsIDB4MjIyMjIyMjIsIHRydWUpOwo+ICsJaWd0X2Fzc2VydF9sdGUobGVuLCBTVE9S RV9CQVRDSF9CVUZGRVJfU0laRSAqIDIgKiA0KTsKCkVsc2V3aGVyZSB5b3UgdXNlIHNpemVvZiBz byB0aGVzZSB0aW1lcyBmb3VyIHN0aWNrIG91dCA6KQoKQnR3LCBiYXRjaF9idWZmZXIgKyAobGVu LzQpIHdpbGwgYmUgYmF0Y2hfYnVmZmVyICsgKDE2LzQpLCByaWdodD8gVGhhdCAKd2lsbCB3cml0 ZSBvdXQgdGhlIHNlY29uZCBiYXRjaCBhdCBiYXRjaF9idWZmZXJbMTZdIHdoaWxlIGl0IHNob3Vs ZCBiZSAKYXQgYmF0Y2hfYnVmZmVyWzRdLCBubz8KCj4gKwlnZW1fd3JpdGUoZmQsIGJhdGNoX2J1 Zl9oYW5kbGUsIDAsIGJhdGNoX2J1ZmZlciwgbGVuKTsKPiArCj4gKwkvLyBzdWJtaXQgY29tbWFu ZCBidWZmZXIKPiArCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMF0sIHNoYXJlZF9idWZf aGFuZGxlLCBFWEVDX09CSkVDVF9QSU5ORUQsIDApOwo+ICsJc2V0dXBfZXhlY19vYmooJmV4ZWNf b2JqZWN0MlsxXSwgdW5zaGFyZWRfYnVmX2hhbmRsZSwgMCwgMCk7Cj4gKwlzZXR1cF9leGVjX29i aigmZXhlY19vYmplY3QyWzJdLCBiYXRjaF9idWZfaGFuZGxlLCAwLCAwKTsKPiArCj4gKwlleGVj X29iamVjdDJbMl0ucmVsb2NhdGlvbl9jb3VudCA9IDE7Cj4gKwlleGVjX29iamVjdDJbMl0ucmVs b2NzX3B0ciA9ICh1aW50cHRyX3QpcmVsb2M7Cj4gKwo+ICsJcmluZyA9IDA7Cj4gKwlpZiAoSEFT X0JMVF9SSU5HKGludGVsX2dldF9kcm1fZGV2aWQoZmQpKSkKPiArCQlyaW5nID0gSTkxNV9FWEVD X0JMVDsKPiArCj4gKwlleGVjYnVmLmJ1ZmZlcnNfcHRyID0gKHVpbnRwdHJfdClleGVjX29iamVj dDI7Cj4gKwlleGVjYnVmLmJ1ZmZlcl9jb3VudCA9IE5VTV9FWEVDX09CSkVDVFMgKyAxOwo+ICsJ ZXhlY2J1Zi5iYXRjaF9zdGFydF9vZmZzZXQgPSAwOwo+ICsJZXhlY2J1Zi5iYXRjaF9sZW4gPSBs ZW47Cj4gKwlleGVjYnVmLmNsaXByZWN0c19wdHIgPSAwOwo+ICsJZXhlY2J1Zi5udW1fY2xpcHJl Y3RzID0gMDsKPiArCWV4ZWNidWYuRFIxID0gMDsKPiArCWV4ZWNidWYuRFI0ID0gMDsKPiArCWV4 ZWNidWYuZmxhZ3MgPSByaW5nOwo+ICsJaTkxNV9leGVjYnVmZmVyMl9zZXRfY29udGV4dF9pZChl eGVjYnVmLCAwKTsKPiArCWV4ZWNidWYucnN2ZDIgPSAwOwo+ICsKPiArCWdlbV9leGVjYnVmKGZk LCAmZXhlY2J1Zik7Cj4gKwlnZW1fc3luYyhmZCwgYmF0Y2hfYnVmX2hhbmRsZSk7CiA+Cj4gKwlp Z3RfYXNzZXJ0KCpzaGFyZWRfYnVmZmVyID09IDB4MjIyMjIyMjIpOwoKWW91IGNvdWxkIGNoZWNr IGFsc28gdW5zaGFyZWRfYnVmZmVyIGZvciAweDExMTExMTExIGF0IHRoaXMgcG9pbnQsIHJpZ2h0 PwoKPiArCSpzaGFyZWRfYnVmZmVyID0gMHhmZmZmZmZmZjsKPiArCS8vIE5vdyBjYXVzZSBldmlj dGlvbiBvZiB1bnNoYXJlZCBidWZmZXIgYnkgcGlubmluZyBzaGFyZWQgYnVmZmVyIHRoZXJlCj4g KwlleGVjX29iamVjdDJbMF0ub2Zmc2V0ID0gZXhlY19vYmplY3QyWzFdLm9mZnNldDsKPiArCS8v IFByZXZlbnQgcmVsb2NhdGlvbgo+ICsJZXhlY19vYmplY3QyWzJdLnJlbG9jYXRpb25fY291bnQg PSAwOwoKV2hhdCBoYXBwZW5zIHRvIHRoZSBmaXJzdCBzdG9yZSBkYXRhIG5vdz8gSXQgd3JpdGVz IHRvIHRoZSBwcmV2aW91c2x5IApyZXNvbHZlZCBhZGRyZXNzIHdoaWNoIGlzIG5vdyB3aGVyZSB0 aGUgc2hhcmVkIGJ1ZiBWTUEgaXM/CgpBbmQgdGhlIHNlY29uZCBkYXRhIHN0b3JlIHN0aWxsIHdy aXRlcyB0byB6ZXJvIEdUVCBhZGRyZXNzIHdoZXJlIHRoZXJlIAppcyBub3RoaW5nIG5vdz8gV2h5 IGlzIHRoaXMgbm90IGJhZD8KCj4gKwo+ICsJZ2VtX2V4ZWNidWYoZmQsICZleGVjYnVmKTsKPiAr CWdlbV9zeW5jKGZkLCBiYXRjaF9idWZfaGFuZGxlKTsKPiArCWlndF9hc3NlcnQoKnNoYXJlZF9i dWZmZXIgPT0gMHgxMTExMTExMSk7Cj4gKwlpZ3RfYXNzZXJ0KGV4ZWNfb2JqZWN0MlswXS5vZmZz ZXQgIT0gZXhlY19vYmplY3QyWzFdLm9mZnNldCk7Cj4gKwo+ICsJLy8gTm93IGxldHMgZG8gaXQg YWdhaW4gd2l0aCB0aGUgb2JqZWN0cyBsaXN0ZWQgaW4gcmV2ZXJzZSBvcmRlci4uLgo+ICsJKnNo YXJlZF9idWZmZXIgPSAweGZmZmZmZmZmOwo+ICsJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0 MlswXSwgdW5zaGFyZWRfYnVmX2hhbmRsZSwgMCwgMCk7Cj4gKwlzZXR1cF9leGVjX29iaigmZXhl Y19vYmplY3QyWzFdLCBzaGFyZWRfYnVmX2hhbmRsZSwgRVhFQ19PQkpFQ1RfUElOTkVELCAwKTsK PiArCWV4ZWNfb2JqZWN0MlsyXS5yZWxvY2F0aW9uX2NvdW50ID0gMTsKPiArCWdlbV9leGVjYnVm KGZkLCAmZXhlY2J1Zik7Cj4gKwlnZW1fc3luYyhmZCwgYmF0Y2hfYnVmX2hhbmRsZSk7Cj4gKwlp Z3RfYXNzZXJ0KCpzaGFyZWRfYnVmZmVyID09IDB4MjIyMjIyMjIpOwo+ICsJKnNoYXJlZF9idWZm ZXIgPSAweGZmZmZmZmZmOwo+ICsJLy8gTm93IGNhdXNlIGV2aWN0aW9uIG9mIHVuc2hhcmVkIGJ1 ZmZlciBieSBwaW5uaW5nIHNoYXJlZCBidWZmZXIgdGhlcmUKPiArCWV4ZWNfb2JqZWN0MlsxXS5v ZmZzZXQgPSBleGVjX29iamVjdDJbMF0ub2Zmc2V0Owo+ICsJLy8gUHJldmVudCByZWxvY2F0aW9u Cj4gKwlleGVjX29iamVjdDJbMl0ucmVsb2NhdGlvbl9jb3VudCA9IDA7Cj4gKwo+ICsJZ2VtX2V4 ZWNidWYoZmQsICZleGVjYnVmKTsKPiArCWdlbV9zeW5jKGZkLCBiYXRjaF9idWZfaGFuZGxlKTsK PiArCWlndF9hc3NlcnQoKnNoYXJlZF9idWZmZXIgPT0gMHgxMTExMTExMSk7Cj4gKwlpZ3RfYXNz ZXJ0KGV4ZWNfb2JqZWN0MlswXS5vZmZzZXQgIT0gZXhlY19vYmplY3QyWzFdLm9mZnNldCk7Cj4g Kwo+ICsJZ2VtX2Nsb3NlKGZkLCBiYXRjaF9idWZfaGFuZGxlKTsKPiArCWNsb3NlKGZkKTsKPiAr Cj4gKwlmcmVlKHNoYXJlZF9idWZmZXIpOwo+ICt9Cj4gKwo+ICsvKiogZ2VtX3N0cmVzc190ZXN0 IC0gU3RyZXNzIHRlc3Qgd2hpY2ggY3JlYXRlcyAxMEsgYnVmZmVycyBhbmQgc2hhcmVzIHdpdGgg R1BVCj4gK0Bjb2RlCj4gKyAgIENyZWF0ZSAxMEsgdWludDMyIGJ1ZmZlcnMgb2Ygc2l6ZSA0SyBl YWNoCj4gKyAgIFNoYXJlIHdpdGggR1BVIHVzaW5nIHVzZXJwdHIgaW9jdGwKPiArICAgQ3JlYXRl IGJhdGNoIGJ1ZmZlciB0byB3cml0ZSBEQVRBIGluIGZpcnN0IGVsZW1lbnQgb2YgZWFjaCBidWZm ZXIKPiArICAgRXhlY3V0ZSBCYXRjaCBCdWZmZXIgb24gQmxpdCByaW5nIFNUUkVTU19OVU1fTE9P UFMgdGltZXMKPiArICAgVmFsaWRhdGUgZXZlcnkgYnVmZmVyIGhhcyBEQVRBIGluIGZpcnN0IGVs ZW1lbnQKPiArICAgUmVwZWF0IG9uIFJlbmRlciByaW5nCj4gK0BlbmRjb2RlCj4gKyoqLwo+ICsj ZGVmaW5lIFNUUkVTU19OVU1fQlVGRkVSUyAxMDI0MAo+ICsjZGVmaW5lIFNUUkVTU19OVU1fTE9P UFMgMTAwMAo+ICsKPiArc3RhdGljIHZvaWQgZ2VtX3N0cmVzc190ZXN0KHZvaWQpCj4gK3sKPiAr CWk5MTVfZ2VtX3VzZXJwdHIqIHVzZXJwdHIgPSBOVUxMOwo+ICsJaW50IGZkLCByZXQ7Cj4gKwl1 aW50MzJfdCogc2hhcmVkX2J1ZmZlcltTVFJFU1NfTlVNX0JVRkZFUlNdOwo+ICsJdWludDMyX3Qg c2hhcmVkX2hhbmRsZVtTVFJFU1NfTlVNX0JVRkZFUlNdOwo+ICsJc3RydWN0IGRybV9pOTE1X2dl bV9leGVjYnVmZmVyMiBleGVjYnVmOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVj dDIgZXhlY19vYmplY3QyW1NUUkVTU19OVU1fQlVGRkVSUyArIDFdOwo+ICsJdWludDMyX3QgYmF0 Y2hfYnVmZmVyWzQqU1RSRVNTX05VTV9CVUZGRVJTICsgMl07CgpNYXliZSByZXBsYWNlIHRoaXMg NCB3aXRoIGEgZGVmaW5lLgoKPiArCXVpbnQzMl90IGJhdGNoX2J1Zl9oYW5kbGU7Cj4gKwlpbnQg cmluZywgbGVuLCBpLCBqOwoKbG9vcCBhbmQgYm8gaW5zdGVhZCBvZiBpIGFuZCBqIHdvdWxkIGJl IG1vcmUgcmVhZGFibGUuCgo+ICsKPiArCWZkID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9JTlRF TCk7Cj4gKwliYXRjaF9idWZfaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgc2l6ZW9mKGJhdGNoX2J1 ZmZlcikpOwo+ICsKPiArCS8vIGNyZWF0ZSBjb21tYW5kIGJ1ZmZlciB3aXRoIHdyaXRlIGNvbW1h bmRzCj4gKwlsZW4gPSAwOwo+ICsJZm9yKGkgPSAwOyBpIDwgU1RSRVNTX05VTV9CVUZGRVJTOyBp KyspCj4gKwl7Cj4gKwkJc2hhcmVkX2J1ZmZlcltpXSA9IGdlbV9jcmVhdGVfbWVtX2J1ZmZlcihC T19TSVpFKTsKPiArCQkqc2hhcmVkX2J1ZmZlcltpXSA9IDB4RkZGRkZGRkY7Cj4gKwo+ICsJCS8v IHNoYXJlIHdpdGggR1BVCj4gKwkJdXNlcnB0ciA9IGdlbV9jcmVhdGVfdXNlcnB0cl9zdHJ1Y3Qo c2hhcmVkX2J1ZmZlcltpXSwgQk9fU0laRSwgMCk7Cj4gKwkJcmV0ID0gZ2VtX2NhbGxfdXNlcnB0 cl9pb2N0bChmZCwgdXNlcnB0cik7Cj4gKwkJaWd0X2Fzc2VydF9lcShyZXQsIDApOwo+ICsKPiAr CQkvLyBHZXQgaGFuZGxlIGZvciBzaGFyZWQgYnVmZmVyCj4gKwkJc2hhcmVkX2hhbmRsZVtpXSA9 IHVzZXJwdHItPmhhbmRsZTsKPiArCQlmcmVlKHVzZXJwdHIpOwo+ICsKPiArCQlzZXR1cF9leGVj X29iaigmZXhlY19vYmplY3QyW2ldLCBzaGFyZWRfaGFuZGxlW2ldLCBFWEVDX09CSkVDVF9QSU5O RUQsIHNoYXJlZF9idWZmZXJbaV0pOwo+ICsJCWxlbiArPSBnZW1fc3RvcmVfZGF0YV9zdm0oZmQs IGJhdGNoX2J1ZmZlciArIChsZW4vNCksIHNoYXJlZF9idWZmZXJbaV0sIGkgLCAoaSA9PSBTVFJF U1NfTlVNX0JVRkZFUlMtMSkgPyB0cnVlOmZhbHNlKTsKPiArCX0KPiArCWdlbV93cml0ZShmZCwg YmF0Y2hfYnVmX2hhbmRsZSwgMCwgYmF0Y2hfYnVmZmVyLCBsZW4pOwo+ICsKPiArCS8vIHN1Ym1p dCBjb21tYW5kIGJ1ZmZlcgo+ICsKPiArCWV4ZWNfb2JqZWN0MltTVFJFU1NfTlVNX0JVRkZFUlNd LmhhbmRsZSA9IGJhdGNoX2J1Zl9oYW5kbGU7Cj4gKwlleGVjX29iamVjdDJbU1RSRVNTX05VTV9C VUZGRVJTXS5yZWxvY2F0aW9uX2NvdW50ID0gMDsKPiArCWV4ZWNfb2JqZWN0MltTVFJFU1NfTlVN X0JVRkZFUlNdLnJlbG9jc19wdHIgPSAwOwo+ICsJZXhlY19vYmplY3QyW1NUUkVTU19OVU1fQlVG RkVSU10uYWxpZ25tZW50ID0gMDsKPiArCWV4ZWNfb2JqZWN0MltTVFJFU1NfTlVNX0JVRkZFUlNd Lm9mZnNldCA9IDA7Cj4gKwlleGVjX29iamVjdDJbU1RSRVNTX05VTV9CVUZGRVJTXS5mbGFncyA9 IDA7Cj4gKwlleGVjX29iamVjdDJbU1RSRVNTX05VTV9CVUZGRVJTXS5yc3ZkMSA9IDA7Cj4gKwll eGVjX29iamVjdDJbU1RSRVNTX05VTV9CVUZGRVJTXS5yc3ZkMiA9IDA7Cj4gKwo+ICsJcmluZyA9 IDA7Cj4gKwlpZiAoSEFTX0JMVF9SSU5HKGludGVsX2dldF9kcm1fZGV2aWQoZmQpKSkKPiArCQly aW5nID0gSTkxNV9FWEVDX0JMVDsKPiArCj4gKwlleGVjYnVmLmJ1ZmZlcnNfcHRyID0gKHVpbnRw dHJfdClleGVjX29iamVjdDI7Cj4gKwlleGVjYnVmLmJ1ZmZlcl9jb3VudCA9IFNUUkVTU19OVU1f QlVGRkVSUyArIDE7Cj4gKwlleGVjYnVmLmJhdGNoX3N0YXJ0X29mZnNldCA9IDA7Cj4gKwlleGVj YnVmLmJhdGNoX2xlbiA9IGxlbjsKPiArCWV4ZWNidWYuY2xpcHJlY3RzX3B0ciA9IDA7Cj4gKwll eGVjYnVmLm51bV9jbGlwcmVjdHMgPSAwOwo+ICsJZXhlY2J1Zi5EUjEgPSAwOwo+ICsJZXhlY2J1 Zi5EUjQgPSAwOwo+ICsJZXhlY2J1Zi5mbGFncyA9IHJpbmc7Cj4gKwlpOTE1X2V4ZWNidWZmZXIy X3NldF9jb250ZXh0X2lkKGV4ZWNidWYsIDApOwo+ICsJZXhlY2J1Zi5yc3ZkMiA9IDA7Cj4gKwo+ ICsJZm9yIChpID0gMDsgaSA8IFNUUkVTU19OVU1fTE9PUFM7IGkrKykKPiArCXsKPiArCQlnZW1f ZXhlY2J1ZihmZCwgJmV4ZWNidWYpOwo+ICsJCWdlbV9zeW5jKGZkLCBiYXRjaF9idWZfaGFuZGxl KTsKPiArCQlmb3IoaiA9IDA7IGogPCBTVFJFU1NfTlVNX0JVRkZFUlM7IGorKykKPiArCQl7Cj4g KwkJCWlndF9mYWlsX29uX2YoKnNoYXJlZF9idWZmZXJbal0gIT0gaiwKPiArCQkJCSAgICAgICJN aXNtYXRjaCBpbiBvYmplY3QgJWQsIGl0ZXJhdGlvbiAlZDogMHglMDhYXG4iLCBqLCBpLCAqc2hh cmVkX2J1ZmZlcltqXSk7Cj4gKwkJCSpzaGFyZWRfYnVmZmVyW2pdID0gKGo8PDIpKzE7CgpXaGF0 cyB0aGlzIHdyaXRlIGZvcj8KCj4gKwkJfQo+ICsJfQo+ICsKPiArCS8vIE5vdyBSZW5kZXIgUmlu Zwo+ICsJcmluZyA9IEk5MTVfRVhFQ19CTFQ7CgpCbGl0dGVyIGFnYWluLiA6KQoKPiArCWV4ZWNi dWYuZmxhZ3MgPSByaW5nOwo+ICsJZm9yIChpID0gMDsgaSA8IFNUUkVTU19OVU1fTE9PUFM7IGkr KykKPiArCXsKPiArCQlnZW1fZXhlY2J1ZihmZCwgJmV4ZWNidWYpOwo+ICsJCWdlbV9zeW5jKGZk LCBiYXRjaF9idWZfaGFuZGxlKTsKPiArCQlmb3IoaiA9IDA7IGogPCBTVFJFU1NfTlVNX0JVRkZF UlM7IGorKykKPiArCQl7Cj4gKwkJCWlndF9mYWlsX29uX2YoKnNoYXJlZF9idWZmZXJbal0gIT0g aiwKPiArCQkJCSAgICAgICJNaXNtYXRjaCBpbiBvYmplY3QgJWQsIGl0ZXJhdGlvbiAlZDogMHgl MDhYXG4iLCBqLCBpLCAqc2hhcmVkX2J1ZmZlcltqXSk7Cj4gKwkJCSpzaGFyZWRfYnVmZmVyW2pd ID0gKGo8PDIpKzE7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWdlbV9jbG9zZShmZCwgYmF0Y2hfYnVm X2hhbmRsZSk7Cj4gKwljbG9zZShmZCk7Cj4gKwo+ICsJZm9yKGkgPSAwOyBpIDwgU1RSRVNTX05V TV9CVUZGRVJTOyBpKyspCj4gKwl7Cj4gKwkJZnJlZShzaGFyZWRfYnVmZmVyW2ldKTsKPiArCX0K PiArfQo+ICsKPiArI2RlZmluZSBTVFJFU1MyX05VTV9CVUZGRVJTIDEKPiArI2RlZmluZSBTVFJF U1MyX05VTV9MT09QUyAyNTYKPiArCj4gKy8qKiBnZW1fd3JpdGVfbXVsdGlwYWdlX2J1ZmZlciAt IENyZWF0ZSBhIGJ1ZmZlciBzcGFubmluZyBtdWx0aXBsZQo+ICsgICAgcGFnZXMsIGFuZCBzaGFy ZSB3aXRoIEdQVS4gV3JpdGUgdG8gZXZlcnkgZWxlbWVudCBvZiB0aGUgYnVmZmVyCj4gKyAgICBh bmQgdmVyaWZ5IGNvcnJlY3QgY29udGVudHMuCj4gKwo+ICtAY29kZQo+ICsgICBDcmVhdGUgMTZL IHVpbnQzMiBidWZmZXIKPiArICAgU2hhcmUgd2l0aCBHUFUgdXNpbmcgdXNlcnB0ciBpb2N0bAo+ ICsgICBDcmVhdGUgYmF0Y2ggYnVmZmVyIHRvIHdyaXRlIERBVEEgaW4gYWxsIGVsZW1lbnRzIG9m IGJ1ZmZlcgo+ICsgICBFeGVjdXRlIEJhdGNoIEJ1ZmZlcgo+ICsgICBWYWxpZGF0ZSBldmVyeSBl bGVtZW50IGhhcyBEQVRBCj4gK0BlbmRjb2RlCj4gKyoqLwo+ICtzdGF0aWMgdm9pZCBnZW1fd3Jp dGVfbXVsdGlwYWdlX2J1ZmZlcl90ZXN0KHZvaWQpCj4gK3sKPiArCWk5MTVfZ2VtX3VzZXJwdHIq IHVzZXJwdHIgPSBOVUxMOwo+ICsJaW50IGZkLCByZXQ7Cj4gKwl1aW50MzJfdCogc2hhcmVkX2J1 ZmZlcjsKPiArCXVpbnQzMl90IHNoYXJlZF9oYW5kbGU7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X2V4ZWNidWZmZXIyIGV4ZWNidWY7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0 MiBleGVjX29iamVjdDJbTlVNX0VYRUNfT0JKRUNUU107Cj4gKwl1aW50MzJfdCBiYXRjaF9idWZm ZXJbKDQgKiBCT19TSVpFKSArIDJdOwo+ICsJdWludDMyX3QgYmF0Y2hfYnVmX2hhbmRsZTsKPiAr CWludCByaW5nLCBsZW4sIGksIGo7Cj4gKwo+ICsJZmQgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVS X0lOVEVMKTsKPiArCWJhdGNoX2J1Zl9oYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCBzaXplb2YoYmF0 Y2hfYnVmZmVyKSk7Cj4gKwo+ICsJLyogY3JlYXRlIGNvbW1hbmQgYnVmZmVyIHdpdGggd3JpdGUg Y29tbWFuZHMgKi8KPiArCWxlbiA9IDA7Cj4gKwlzaGFyZWRfYnVmZmVyID0gZ2VtX2NyZWF0ZV9t ZW1fYnVmZmVyKEJPX1NJWkUgKiA0KTsKCkl0IGlzIGNvbmZ1c2luZyB0byB1c2UgQk9fU0laRSBh bmQgaGFyZGNvZGVkIGZvdXIgaGVyZS4KCj4gKwltZW1zZXQoYmF0Y2hfYnVmZmVyLCAwLCBzaXpl b2YoYmF0Y2hfYnVmZmVyKSk7Cj4gKwo+ICsJZm9yKGkgPSAwOyBpPCBCT19TSVpFOyBpKyspCj4g Kwl7Cj4gKwkJc2hhcmVkX2J1ZmZlcltpXSA9IDA7Cj4gKwl9Cj4gKwoKU28gYSBtZW1zZXQ/IDop Cgo+ICsJLyogc2hhcmUgd2l0aCBHUFUgKi8KPiArCXVzZXJwdHIgPSBnZW1fY3JlYXRlX3VzZXJw dHJfc3RydWN0KHNoYXJlZF9idWZmZXIsIEJPX1NJWkUgKiA0LCAwKTsKPiArCXJldCA9IGdlbV9j YWxsX3VzZXJwdHJfaW9jdGwoZmQsIHVzZXJwdHIpOwo+ICsJaWd0X2Fzc2VydF9lcShyZXQsIDAp Owo+ICsKPiArCS8qIEdldCBoYW5kbGUgZm9yIHNoYXJlZCBidWZmZXIgKi8KPiArCXNoYXJlZF9o YW5kbGUgPSB1c2VycHRyLT5oYW5kbGU7Cj4gKwlmcmVlKHVzZXJwdHIpOwo+ICsKPiArCXNldHVw X2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMF0sIHNoYXJlZF9oYW5kbGUsIEVYRUNfT0JKRUNUX1BJ Tk5FRCwgc2hhcmVkX2J1ZmZlcik7Cj4gKwo+ICsJZm9yKGo9MDsgajwgKEJPX1NJWkUpOyBqKysp Cj4gKwl7Cj4gKwkJbGVuICs9IGdlbV9zdG9yZV9kYXRhX3N2bShmZCwgYmF0Y2hfYnVmZmVyICsg KGxlbi80KSwgJnNoYXJlZF9idWZmZXJbal0sIGosIChqID09ICgoQk9fU0laRSktMSkpID8gdHJ1 ZTpmYWxzZSk7Cj4gKwl9Cj4gKwkKPiArCWdlbV93cml0ZShmZCwgYmF0Y2hfYnVmX2hhbmRsZSwg MCwgYmF0Y2hfYnVmZmVyLCBsZW4pOwo+ICsKPiArCS8vIHN1Ym1pdCBjb21tYW5kIGJ1ZmZlcgo+ ICsJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlsxXSwgYmF0Y2hfYnVmX2hhbmRsZSwgMCwg MCk7Cj4gKwo+ICsJcmluZyA9IDA7Cj4gKwlpZiAoSEFTX0JMVF9SSU5HKGludGVsX2dldF9kcm1f ZGV2aWQoZmQpKSkKPiArCQlyaW5nID0gSTkxNV9FWEVDX0JMVDsKPiArCj4gKwlleGVjYnVmLmJ1 ZmZlcnNfcHRyID0gKHVpbnRwdHJfdClleGVjX29iamVjdDI7Cj4gKwlleGVjYnVmLmJ1ZmZlcl9j b3VudCA9IE5VTV9FWEVDX09CSkVDVFM7Cj4gKwlleGVjYnVmLmJhdGNoX3N0YXJ0X29mZnNldCA9 IDA7Cj4gKwlleGVjYnVmLmJhdGNoX2xlbiA9IGxlbjsKPiArCWV4ZWNidWYuY2xpcHJlY3RzX3B0 ciA9IDA7Cj4gKwlleGVjYnVmLm51bV9jbGlwcmVjdHMgPSAwOwo+ICsJZXhlY2J1Zi5EUjEgPSAw Owo+ICsJZXhlY2J1Zi5EUjQgPSAwOwo+ICsJZXhlY2J1Zi5mbGFncyA9IHJpbmc7Cj4gKwlpOTE1 X2V4ZWNidWZmZXIyX3NldF9jb250ZXh0X2lkKGV4ZWNidWYsIDApOwo+ICsJZXhlY2J1Zi5yc3Zk MiA9IDA7Cj4gKwo+ICsJZ2VtX2V4ZWNidWYoZmQsICZleGVjYnVmKTsKPiArCWdlbV9zeW5jKGZk LCBiYXRjaF9idWZfaGFuZGxlKTsKPiArCWZvcihqID0gMDsgaiA8IChCT19TSVpFKTsgaisrKQo+ ICsJewo+ICsJCWlndF9mYWlsX29uX2Yoc2hhcmVkX2J1ZmZlcltqXSAhPSBqLAo+ICsJCQkgICAg ICAiTWlzbWF0Y2ggaW4gb2JqZWN0ICVkOiAweCUwOFhcbiIsIGosIHNoYXJlZF9idWZmZXJbal0p OwoKcy9pbiBvYmplY3QvYXQgb2Zmc2V0LyA/Cgo+ICsJfQo+ICsKPiArCWdlbV9jbG9zZShmZCwg YmF0Y2hfYnVmX2hhbmRsZSk7Cj4gKwljbG9zZShmZCk7Cj4gKwo+ICsJZnJlZShzaGFyZWRfYnVm ZmVyKTsKPiArfQo+ICsKPiArLyoqIFRoaXMgdGVzdCB3aWxsIHJlcXVlc3QgdG8gcGluIGEgc2hh cmVkIGJ1ZmZlciB0byBhbiBpbnZhbGlkCj4gKyAgICBWTUEgID4gNDgtYml0IGFkZHJlc3MKPiAr Cj4gKyAgIENyZWF0ZSBzaGFyZWQgYnVmZmVyIG9mIHNpemUgNEsKPiArICAgVHJ5IGFuZCBQaW4g b2JqZWN0IHRvIGFkZHJlc3MgMHg5MDAwMDAwMDAwMDAwCj4gKyoqLwo+ICtzdGF0aWMgdm9pZCBn ZW1fcGluX2ludmFsaWRfdm1hX3Rlc3Qodm9pZCkKPiArewo+ICsJaTkxNV9nZW1fdXNlcnB0ciog dXNlcnB0ciA9IE5VTEw7Cj4gKwlpbnQgZmQsIHJldDsKPiArCXVpbnQzMl90KiBzaGFyZWRfYnVm ZmVyID0gTlVMTDsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZjsK PiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIGV4ZWNfb2JqZWN0MltOVU1fRVhF Q19PQkpFQ1RTXTsKPiArCXVpbnQzMl90IGJhdGNoX2J1ZmZlcltCT19TSVpFXTsKPiArCXVpbnQz Ml90IGJhdGNoX2J1Zl9oYW5kbGUsIHNoYXJlZF9idWZfaGFuZGxlOwo+ICsJaW50IHJpbmcsIGxl bjsKPiArCWNvbnN0IHVpbnQzMl90IGRhdGEgPSAweDEyMzQ1Njc4Owo+ICsJdWludDMyX3QqIGlu dmFsaWRfYWRkcmVzcyA9ICh1aW50MzJfdCopMHg5MDAwMDAwMDAwMDAwOwoKU2hvdWxkIGJlIHVp bnQ2NF90IEkgdGhpbmssIG5vdCBhIHBvaW50ZXIgdG8gdWludDMyX3QuCgpUaGF0IHdheSBpdCBj YW4gZXZlbiBydW4gb24gMzItYml0IHVzZXJzcGFjZS4KCj4gKwo+ICsJZmQgPSBkcm1fb3Blbl9k cml2ZXIoRFJJVkVSX0lOVEVMKTsKPiArCWJhdGNoX2J1Zl9oYW5kbGUgPSBnZW1fY3JlYXRlKGZk LCBCT19TSVpFKTsKPiArCj4gKwlzaGFyZWRfYnVmZmVyID0gZ2VtX2NyZWF0ZV9tZW1fYnVmZmVy KEJPX1NJWkUpOwo+ICsJKnNoYXJlZF9idWZmZXIgPSAweEZGRkZGRkZGOwo+ICsJCj4gKwkvLyBz aGFyZSB3aXRoIEdQVQo+ICsJdXNlcnB0ciA9IGdlbV9jcmVhdGVfdXNlcnB0cl9zdHJ1Y3Qoc2hh cmVkX2J1ZmZlciwgQk9fU0laRSwgMCk7Cj4gKwlyZXQgPSBnZW1fY2FsbF91c2VycHRyX2lvY3Rs KGZkLCB1c2VycHRyKTsKPiArCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKPiArCj4gKwlzaGFyZWRf YnVmX2hhbmRsZSA9IHVzZXJwdHItPmhhbmRsZTsKPiArCWZyZWUodXNlcnB0cik7Cj4gKwo+ICsJ bGVuID0gZ2VtX3N0b3JlX2RhdGFfc3ZtKGZkLCBiYXRjaF9idWZmZXIsIHNoYXJlZF9idWZmZXIs IGRhdGEsIHRydWUpOwo+ICsJZ2VtX3dyaXRlKGZkLCBiYXRjaF9idWZfaGFuZGxlLCAwLCBiYXRj aF9idWZmZXIsIGxlbik7Cj4gKwo+ICsJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlswXSwg c2hhcmVkX2J1Zl9oYW5kbGUsIEVYRUNfT0JKRUNUX1BJTk5FRCwgaW52YWxpZF9hZGRyZXNzKTsK PiArCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMV0sIGJhdGNoX2J1Zl9oYW5kbGUsIDAs IDApOwo+ICsKPiArCXJpbmcgPSAwOwo+ICsJaWYgKEhBU19CTFRfUklORyhpbnRlbF9nZXRfZHJt X2RldmlkKGZkKSkpCj4gKwkJcmluZyA9IEk5MTVfRVhFQ19CTFQ7Cj4gKwo+ICsJZXhlY2J1Zi5i dWZmZXJzX3B0ciA9ICh1aW50cHRyX3QpZXhlY19vYmplY3QyOwo+ICsJZXhlY2J1Zi5idWZmZXJf Y291bnQgPSBOVU1fRVhFQ19PQkpFQ1RTOwo+ICsJZXhlY2J1Zi5iYXRjaF9zdGFydF9vZmZzZXQg PSAwOwo+ICsJZXhlY2J1Zi5iYXRjaF9sZW4gPSBsZW47Cj4gKwlleGVjYnVmLmNsaXByZWN0c19w dHIgPSAwOwo+ICsJZXhlY2J1Zi5udW1fY2xpcHJlY3RzID0gMDsKPiArCWV4ZWNidWYuRFIxID0g MDsKPiArCWV4ZWNidWYuRFI0ID0gMDsKPiArCWV4ZWNidWYuZmxhZ3MgPSByaW5nOwo+ICsJaTkx NV9leGVjYnVmZmVyMl9zZXRfY29udGV4dF9pZChleGVjYnVmLCAwKTsKPiArCWV4ZWNidWYucnN2 ZDIgPSAwOwo+ICsKPiArCS8qIEV4cGVjdCBleGVjYnVmIHRvIGZhaWwgKi8KPiArCXJldCA9IGRy bUlvY3RsKGZkLAo+ICsJICAgICAgIERSTV9JT0NUTF9JOTE1X0dFTV9FWEVDQlVGRkVSMiwKPiAr CSAgICAgICAmZXhlY2J1Zik7Cj4gKwo+ICsJaWd0X2Fzc2VydF9uZXEocmV0LCAwKTsKPiArCQo+ ICsJZ2VtX3N5bmMoZmQsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICsJZ2VtX2Nsb3NlKGZkLCBiYXRj aF9idWZfaGFuZGxlKTsKPiArCWNsb3NlKGZkKTsKPiArCj4gKwlmcmVlKHNoYXJlZF9idWZmZXIp Owo+ICt9Cj4gKwo+ICsjZGVmaW5lIFNITV9LRVkgNTY3ODkKPiArI2RlZmluZSBTSE1FTV9TSVpF IDQwOTYKPiArLyoqIGdlbV9zaG1lbV9zdm1fdGVzdCAtIFRlc3QgdXNlcnB0ciBpb2N0bCB3aXRo IHNoYXJlZCBtZW1vcnkKPiArICogVGhpcyB0ZXN0IGNyZWF0ZXMgYSBzeXNWIElQQyBidWZmZXIg YW5kIHNoYXJlcyB3aXRoIEdQVS4KPiArICogSXQgd2lsbCBzZW5kIEdQVSBjb21tYW5kcyB0byB3 cml0ZSBEQVRBIGluIHRoZSBidWZmZXIgYW5kCj4gKyAqIHZhbGlkYXRlIGl0IG9uIHRoZSBDUFUg c2lkZSB3aGVuIHRoZSBjb21tYW5kIGNvbXBsZXRlcy4KPiArCj4gKyAqIENyZWF0ZSBhcmJpdHJh cnkgc2htZW0gaWQKPiArICogVXNlIHNobWF0IHRvIGF0dGFjaCBhIDRLIHVpbnQzMiBidWZmZXIg dG8gYWJvdmUgaWQKPiArICogU2hhcmUgYnVmZmVyIHdpdGggR1BVIHVzaW5nIHVzZXJwdHIgaW9j dGwKPiArICogQ3JlYXRlIEJhdGNoIGJ1ZmZlciB0byB3cml0ZSBEQVRBIGluIHRoZSBmaXJzdCBl bGVtZW50Cj4gKyAqIHN1Ym1pdCBleGVjYnVmZmVyCj4gKyAqIFZhbGlkYXRlIG9uIENQVSBzaWRl IHRoYXQgREFUQSB3YXMgaW5kZWVkIHdyaXR0ZW4KPiArICovCj4gK3N0YXRpYyB2b2lkIGdlbV9z aG1lbV90ZXN0KHZvaWQpCj4gK3sKPiArCWludCBzaG1pZDsKPiArCWk5MTVfZ2VtX3VzZXJwdHIq IHVzZXJwdHIgPSBOVUxMOwo+ICsJaW50IGZkLCByZXQ7Cj4gKwl1aW50MzJfdCogc2hhcmVkX2J1 ZmZlciA9IE5VTEw7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7 Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBleGVjX29iamVjdDJbTlVNX0VY RUNfT0JKRUNUU107Cj4gKwl1aW50MzJfdCBiYXRjaF9idWZmZXJbQk9fU0laRV07Cj4gKwl1aW50 MzJfdCBiYXRjaF9idWZfaGFuZGxlLCBzaGFyZWRfYnVmX2hhbmRsZTsKPiArCWludCByaW5nLCBs ZW47Cj4gKwljb25zdCB1aW50MzJfdCBkYXRhID0gMHgxMjM0NTY3ODsKPiArCj4gKwlzaG1pZCA9 IHNobWdldChTSE1fS0VZLCBTSE1FTV9TSVpFLCBJUENfQ1JFQVQpOwo+ICsJaWd0X2Fzc2VydF9u ZXEoc2htaWQsIC0xKTsKPiArCj4gKwlzaGFyZWRfYnVmZmVyID0gc2htYXQoc2htaWQsIE5VTEws IDApOwkKPiArCWlndF9hc3NlcnQoc2hhcmVkX2J1ZmZlciAhPSAodm9pZCopLTEpOwo+ICsKPiAr CW1lbXNldChzaGFyZWRfYnVmZmVyLCAwLCBTSE1FTV9TSVpFKTsKPiArCXNoYXJlZF9idWZmZXJb MF0gPSAweEZGRkZGRkZGOwo+ICsKPiArCWZkID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9JTlRF TCk7Cj4gKwliYXRjaF9idWZfaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgQk9fU0laRSk7Cj4gKwo+ ICsJdXNlcnB0ciA9IGdlbV9jcmVhdGVfdXNlcnB0cl9zdHJ1Y3Qoc2hhcmVkX2J1ZmZlciwgU0hN RU1fU0laRSwgMCk7Cj4gKwlyZXQgPSBnZW1fY2FsbF91c2VycHRyX2lvY3RsKGZkLCB1c2VycHRy KTsKPiArCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKPiArCj4gKwlzaGFyZWRfYnVmX2hhbmRsZSA9 IHVzZXJwdHItPmhhbmRsZTsKPiArCWZyZWUodXNlcnB0cik7Cj4gKwkKPiArCS8qIGNyZWF0ZSBj b21tYW5kIGJ1ZmZlciB3aXRoIHdyaXRlIGNvbW1hbmQgKi8KPiArCWxlbiA9IGdlbV9zdG9yZV9k YXRhX3N2bShmZCwgYmF0Y2hfYnVmZmVyLCBzaGFyZWRfYnVmZmVyLCBkYXRhLCB0cnVlKTsKPiAr CWdlbV93cml0ZShmZCwgYmF0Y2hfYnVmX2hhbmRsZSwgMCwgYmF0Y2hfYnVmZmVyLCBsZW4pOwo+ ICsKPiArCS8qIHN1Ym1pdCBjb21tYW5kIGJ1ZmZlciAqLwo+ICsJc2V0dXBfZXhlY19vYmooJmV4 ZWNfb2JqZWN0MlswXSwgc2hhcmVkX2J1Zl9oYW5kbGUsIEVYRUNfT0JKRUNUX1BJTk5FRCwgc2hh cmVkX2J1ZmZlcik7Cj4gKwlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzFdLCBiYXRjaF9i dWZfaGFuZGxlLCAwLCAwKTsKPiArCj4gKwlyaW5nID0gMDsKPiArCWlmIChIQVNfQkxUX1JJTkco aW50ZWxfZ2V0X2RybV9kZXZpZChmZCkpKQo+ICsJCXJpbmcgPSBJOTE1X0VYRUNfQkxUOwo+ICsK PiArCWV4ZWNidWYuYnVmZmVyc19wdHIgPSAodWludHB0cl90KWV4ZWNfb2JqZWN0MjsKPiArCWV4 ZWNidWYuYnVmZmVyX2NvdW50ID0gTlVNX0VYRUNfT0JKRUNUUzsKPiArCWV4ZWNidWYuYmF0Y2hf c3RhcnRfb2Zmc2V0ID0gMDsKPiArCWV4ZWNidWYuYmF0Y2hfbGVuID0gbGVuOwo+ICsJZXhlY2J1 Zi5jbGlwcmVjdHNfcHRyID0gMDsKPiArCWV4ZWNidWYubnVtX2NsaXByZWN0cyA9IDA7Cj4gKwll eGVjYnVmLkRSMSA9IDA7Cj4gKwlleGVjYnVmLkRSNCA9IDA7Cj4gKwlleGVjYnVmLmZsYWdzID0g cmluZzsKPiArCWk5MTVfZXhlY2J1ZmZlcjJfc2V0X2NvbnRleHRfaWQoZXhlY2J1ZiwgMCk7Cj4g KwlleGVjYnVmLnJzdmQyID0gMDsKPiArCj4gKwlnZW1fZXhlY2J1ZihmZCwgJmV4ZWNidWYpOwo+ ICsJZ2VtX3N5bmMoZmQsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICsKPiArCWdlbV9jbG9zZShmZCwg YmF0Y2hfYnVmX2hhbmRsZSk7Cj4gKwljbG9zZShmZCk7Cj4gKwo+ICsJLyogY2hlY2sgb24gQ1BV IHRvIHNlZSBpZiB2YWx1ZSBjaGFuZ2VzICovCj4gKwlpZ3RfZmFpbF9vbl9mKHNoYXJlZF9idWZm ZXJbMF0gIT0gZGF0YSwKPiArCQkgICAgICAiXG5DUFUgcmVhZCBkb2VzIG5vdCBtYXRjaCBHUFUg d3JpdGUsIGV4cGVjdGVkOiAweCV4LCBnb3Q6IDB4JXhcbiIsIGRhdGEsIHNoYXJlZF9idWZmZXJb MF0pOwo+ICsKPiArCXJldCA9IHNobWR0KHNoYXJlZF9idWZmZXIpOwo+ICsJaWd0X2Fzc2VydF9l cShyZXQsIDApOwo+ICsKPiArfQo+ICsKPiArLyoqIGdlbV9waW5faGlnaF9hZGRyZXNzX3Rlc3Qg LSBUaGlzIHRlc3Qgd2lsbCBjcmVhdGUgYSBzaGFyZWQgYnVmZmVyLCBhbmQgY3JlYXRlIGEgY29t bWFuZAo+ICsgKiAgZm9yIEdQVSB0byB3cml0ZSBkYXRhIGluIGl0LiBJdCB3aWxsIGF0dGVtcHQg dG8gcGluIHRoZSBidWZmZXIgYXQgYWRkcmVzcyA+IDMyIGJpdHMuCj4gKyAqICBDUFUgd2lsbCBy ZWFkIGFuZCBtYWtlIHN1cmUgZXhwZWN0ZWQgdmFsdWUgaXMgb2J0YWluZWQKPiArCj4gK0Bjb2Rl Cj4gKyAgIE1hbGxvYyBhIDRLIGJ1ZmZlcgo+ICsgICBTaGFyZSBidWZmZXIgd2l0aCB3aXRoIEdQ VSBieSB1c2luZyB1c2VycHRyIGlvY3RsCj4gKyAgIENyZWF0ZSBiYXRjaCBidWZmZXIgdG8gd3Jp dGUgREFUQSB0byBmaXJzdCBkd29yZCBvZiBidWZmZXIKPiArICAgVXNlIHZpcnR1YWwgYWRkcmVz cyBvZiBidWZmZXIgYXMgMHgxMTAwMDAwMDAwICg+IDMyIGJpdCkKPiArICAgU2V0IEVYRUNfT0JK RUNUX1BJTk5FRCBmbGFnIGluIGV4ZWMgb2JqZWN0Cj4gKyAgIFNldCAnb2Zmc2V0JyBpbiBleGVj IG9iamVjdCB0byBzaGFyZWQgYnVmZmVyIFZNQQo+ICsgICBTdWJtaXQgZXhlY2J1ZmZlcgo+ICsg ICBWZXJpZnkgdmFsdWUgb2YgZmlyc3QgRFdPUkQgaW4gc2hhcmVkIGJ1ZmZlciBtYXRjaGVzIERB VEEKPiArQGVuZGNvZGUKPiArKi8KPiArCj4gK3N0YXRpYyB2b2lkIGdlbV9waW5faGlnaF9hZGRy ZXNzX3Rlc3Qodm9pZCkKPiArewo+ICsJaTkxNV9nZW1fdXNlcnB0ciogdXNlcnB0ciA9IE5VTEw7 Cj4gKwlpbnQgZmQsIHJldDsKPiArCXVpbnQzMl90KiBzaGFyZWRfYnVmZmVyID0gTlVMTDsKPiAr CXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKPiArCXN0cnVjdCBkcm1f aTkxNV9nZW1fZXhlY19vYmplY3QyIGV4ZWNfb2JqZWN0MltOVU1fRVhFQ19PQkpFQ1RTXTsKPiAr CXVpbnQzMl90IGJhdGNoX2J1ZmZlcltCT19TSVpFXTsKPiArCXVpbnQzMl90IGJhdGNoX2J1Zl9o YW5kbGUsIHNoYXJlZF9idWZfaGFuZGxlOwo+ICsJaW50IHJpbmcsIGxlbjsKPiArCWNvbnN0IHVp bnQzMl90IGRhdGEgPSAweDEyMzQ1Njc4Owo+ICsgICAgICAgIHVpbnQzMl90KiBoaWdoX2FkZHJl c3MgPSAodWludDMyX3QqKTB4MTExMUZGRkYwMDA7CgpTdHJpY3RseSBzcGVha2luZyB5b3UgZG9u J3QgbmVlZCB1c2VycHRyIGZvciB0aGlzIHRlc3QsIGVzcGVjaWFsbHkgc2luY2UgCnlvdSBhcmUg bm90IHRyeWluZyB0byBzaGFyZSB0aGUgYWRkcmVzcy4gQW5kIHlvdSBldmVuIGNhbid0IG9uIDMy LWJpdCAKdXNlcnNwYWNlLgoKQnV0IGV2ZW4gaWYgeW91IGtlZXAgaXQgdXNpbmcgdXNlcnB0ciB5 b3UgY2FuIG1ha2UgaXQgd29yayBvbiAzMi1iaXQgCnVzZXJzcGFjZSBhcyBJIGRlc2NyaWJlZCBp biB0aGUgcHJldmlvdXMgdGVzdC4KCj4gKwo+ICsJZmQgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVS X0lOVEVMKTsKPiArCWJhdGNoX2J1Zl9oYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCBCT19TSVpFKTsK PiArCj4gKwkvKiBjcmVhdGUgY3B1IGJ1ZmZlciwgc2V0IHRvIGFsbCAweEYncyAqLwo+ICsJc2hh cmVkX2J1ZmZlciA9IGdlbV9jcmVhdGVfbWVtX2J1ZmZlcihCT19TSVpFKTsKPiArCSpzaGFyZWRf YnVmZmVyID0gMHhGRkZGRkZGRjsKPiArCj4gKwkvKiBzaGFyZSB3aXRoIEdQVSAqLwo+ICsJdXNl cnB0ciA9IGdlbV9jcmVhdGVfdXNlcnB0cl9zdHJ1Y3Qoc2hhcmVkX2J1ZmZlciwgQk9fU0laRSwg MCk7Cj4gKwlyZXQgPSBnZW1fY2FsbF91c2VycHRyX2lvY3RsKGZkLCB1c2VycHRyKTsKPiArCWln dF9hc3NlcnRfZXEocmV0LCAwKTsKPiArCj4gKwkvKiBHZXQgaGFuZGxlIGZvciBzaGFyZWQgYnVm ZmVyICovCj4gKwlzaGFyZWRfYnVmX2hhbmRsZSA9IHVzZXJwdHItPmhhbmRsZTsKPiArCWZyZWUo dXNlcnB0cik7Cj4gKwo+ICsJLyogY3JlYXRlIGNvbW1hbmQgYnVmZmVyIHdpdGggd3JpdGUgY29t bWFuZCAqLwo+ICsJbGVuID0gZ2VtX3N0b3JlX2RhdGFfc3ZtKGZkLCBiYXRjaF9idWZmZXIsIGhp Z2hfYWRkcmVzcywgZGF0YSwgdHJ1ZSk7Cj4gKwlnZW1fd3JpdGUoZmQsIGJhdGNoX2J1Zl9oYW5k bGUsIDAsIGJhdGNoX2J1ZmZlciwgbGVuKTsKPiArCj4gKwkvKiBzdWJtaXQgY29tbWFuZCBidWZm ZXIgKi8KPiArCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMF0sIHNoYXJlZF9idWZfaGFu ZGxlLCBFWEVDX09CSkVDVF9QSU5ORUQgfCBFWEVDX09CSkVDVF9TVVBQT1JUU180OEJfQUREUkVT UywgaGlnaF9hZGRyZXNzKTsKPiArCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMV0sIGJh dGNoX2J1Zl9oYW5kbGUsIDAsIDApOwo+ICsKPiArCXJpbmcgPSAwOwo+ICsJaWYgKEhBU19CTFRf UklORyhpbnRlbF9nZXRfZHJtX2RldmlkKGZkKSkpCj4gKwkJcmluZyA9IEk5MTVfRVhFQ19CTFQ7 Cj4gKwo+ICsJZXhlY2J1Zi5idWZmZXJzX3B0ciA9ICh1aW50cHRyX3QpZXhlY19vYmplY3QyOwo+ ICsJZXhlY2J1Zi5idWZmZXJfY291bnQgPSBOVU1fRVhFQ19PQkpFQ1RTOwo+ICsJZXhlY2J1Zi5i YXRjaF9zdGFydF9vZmZzZXQgPSAwOwo+ICsJZXhlY2J1Zi5iYXRjaF9sZW4gPSBsZW47Cj4gKwll eGVjYnVmLmNsaXByZWN0c19wdHIgPSAwOwo+ICsJZXhlY2J1Zi5udW1fY2xpcHJlY3RzID0gMDsK PiArCWV4ZWNidWYuRFIxID0gMDsKPiArCWV4ZWNidWYuRFI0ID0gMDsKPiArCWV4ZWNidWYuZmxh Z3MgPSByaW5nOwo+ICsJaTkxNV9leGVjYnVmZmVyMl9zZXRfY29udGV4dF9pZChleGVjYnVmLCAw KTsKPiArCWV4ZWNidWYucnN2ZDIgPSAwOwo+ICsKPiArCWdlbV9leGVjYnVmKGZkLCAmZXhlY2J1 Zik7Cj4gKwlnZW1fc3luYyhmZCwgYmF0Y2hfYnVmX2hhbmRsZSk7Cj4gKwo+ICsJLy8gY2hlY2sg b24gQ1BVIHRvIHNlZSBpZiB2YWx1ZSBjaGFuZ2VzCgpUb28gbXVjaCBDKysgc3R5bGUgY29tbWVu dHMuCgo+ICsJaWd0X2ZhaWxfb25fZihzaGFyZWRfYnVmZmVyWzBdICE9IGRhdGEsCj4gKwkJICAg ICAgIlxuQ1BVIHJlYWQgZG9lcyBub3QgbWF0Y2ggR1BVIHdyaXRlLCBleHBlY3RlZDogMHgleCwg Z290OiAweCV4XG4iLCBkYXRhLCBzaGFyZWRfYnVmZmVyWzBdKTsKPiArCj4gKwlnZW1fY2xvc2Uo ZmQsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICsJY2xvc2UoZmQpOwo+ICsJZnJlZShzaGFyZWRfYnVm ZmVyKTsKPiArfQo+ICsKPiArLyoqIGdlbV9waW5fbmVhcl80OEJpdF90ZXN0IC0gVGhpcyB0ZXN0 IHdpbGwgY3JlYXRlIGEgc2hhcmVkIGJ1ZmZlciwgYW5kIGNyZWF0ZSBhIGNvbW1hbmQKPiArICog IGZvciBHUFUgdG8gd3JpdGUgZGF0YSBpbiBpdC4gSXQgd2lsbCBhdHRlbXB0IHRvIHBpbiB0aGUg YnVmZmVyIGF0IGFkZHJlc3MgPiA0NyBiaXRzIDw9IDQ4LWJpdC4KPiArICogIENQVSB3aWxsIHJl YWQgYW5kIG1ha2Ugc3VyZSBleHBlY3RlZCB2YWx1ZSBpcyBvYnRhaW5lZAo+ICsKPiArQGNvZGUK PiArICAgTWFsbG9jIGEgNEsgYnVmZmVyCj4gKyAgIFNoYXJlIGJ1ZmZlciB3aXRoIHdpdGggR1BV IGJ5IHVzaW5nIHVzZXJwdHIgaW9jdGwKPiArICAgQ3JlYXRlIGJhdGNoIGJ1ZmZlciB0byB3cml0 ZSBEQVRBIHRvIGZpcnN0IGR3b3JkIG9mIGJ1ZmZlcgo+ICsgICBVc2UgdmlydHVhbCBhZGRyZXNz IG9mIGJ1ZmZlciBhcyByYW5nZSBiZXR3ZWVuIDQ3LWJpdCBhbmQgNDgtYml0Cj4gKyAgIFNldCBF WEVDX09CSkVDVF9QSU5ORUQgZmxhZyBpbiBleGVjIG9iamVjdAo+ICsgICBTZXQgJ29mZnNldCcg aW4gZXhlYyBvYmplY3QgdG8gc2hhcmVkIGJ1ZmZlciBWTUEKPiArICAgU3VibWl0IGV4ZWNidWZm ZXIKPiArICAgVmVyaWZ5IHZhbHVlIG9mIGZpcnN0IERXT1JEIGluIHNoYXJlZCBidWZmZXIgbWF0 Y2hlcyBEQVRBCj4gK0BlbmRjb2RlCj4gKyovCj4gKyNkZWZpbmUgQkVHSU5fSElHSF9BRERSRVNT IDB4N0ZGRkZGRkZGMDAwCj4gKyNkZWZpbmUgRU5EX0hJR0hfQUREUkVTUyAweEZGRkZGRkZGQzAw MAo+ICsjZGVmaW5lIEFERFJFU1NfSU5DUkVNRU5UIDB4MjAwMDAwMDAwMAo+ICtzdGF0aWMgdm9p ZCBnZW1fcGluX25lYXJfNDhCaXRfdGVzdCh2b2lkKQo+ICt7Cj4gKwlpOTE1X2dlbV91c2VycHRy KiB1c2VycHRyID0gTlVMTDsKPiArCWludCBmZCwgcmV0Owo+ICsJdWludDMyX3QqIHNoYXJlZF9i dWZmZXIgPSBOVUxMOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVm Owo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgZXhlY19vYmplY3QyW05VTV9F WEVDX09CSkVDVFNdOwo+ICsJdWludDMyX3QgYmF0Y2hfYnVmZmVyW0JPX1NJWkVdOwo+ICsJdWlu dDMyX3QgYmF0Y2hfYnVmX2hhbmRsZSwgc2hhcmVkX2J1Zl9oYW5kbGU7Cj4gKwlpbnQgcmluZywg bGVuOwo+ICsJY29uc3QgdWludDMyX3QgZGF0YSA9IDB4MTIzNDU2Nzg7Cj4gKyAgICAgICAgdWlu dDMyX3QqIGhpZ2hfYWRkcmVzczsKCldlaXJkIGluZGVudGF0aW9uLgoKPiArCj4gKwlmZCA9IGRy bV9vcGVuX2RyaXZlcihEUklWRVJfSU5URUwpOwo+ICsJYmF0Y2hfYnVmX2hhbmRsZSA9IGdlbV9j cmVhdGUoZmQsIEJPX1NJWkUpOwo+ICsKPiArCS8qIGNyZWF0ZSBjcHUgYnVmZmVyLCBzZXQgdG8g YWxsIDB4RidzICovCj4gKwlzaGFyZWRfYnVmZmVyID0gZ2VtX2NyZWF0ZV9tZW1fYnVmZmVyKEJP X1NJWkUpOwo+ICsJKnNoYXJlZF9idWZmZXIgPSAweEZGRkZGRkZGOwo+ICsKPiArCS8qIHNoYXJl IHdpdGggR1BVICovCj4gKwl1c2VycHRyID0gZ2VtX2NyZWF0ZV91c2VycHRyX3N0cnVjdChzaGFy ZWRfYnVmZmVyLCBCT19TSVpFLCAwKTsKPiArCXJldCA9IGdlbV9jYWxsX3VzZXJwdHJfaW9jdGwo ZmQsIHVzZXJwdHIpOwo+ICsJaWd0X2Fzc2VydF9lcShyZXQsIDApOwo+ICsKPiArCS8qIEdldCBo YW5kbGUgZm9yIHNoYXJlZCBidWZmZXIgKi8KPiArCXNoYXJlZF9idWZfaGFuZGxlID0gdXNlcnB0 ci0+aGFuZGxlOwo+ICsJZnJlZSh1c2VycHRyKTsKPiArCj4gKwlmb3IgKGhpZ2hfYWRkcmVzcyA9 ICh1aW50MzJfdCopQkVHSU5fSElHSF9BRERSRVNTOyBoaWdoX2FkZHJlc3MgPD0gKHVpbnQzMl90 KilFTkRfSElHSF9BRERSRVNTOwo+ICsJCQkJCQloaWdoX2FkZHJlc3MrPUFERFJFU1NfSU5DUkVN RU5UKQo+ICsJewo+ICsJCS8qIGNyZWF0ZSBjb21tYW5kIGJ1ZmZlciB3aXRoIHdyaXRlIGNvbW1h bmQgKi8KPiArCQlsZW4gPSBnZW1fc3RvcmVfZGF0YV9zdm0oZmQsIGJhdGNoX2J1ZmZlciwgKHVp bnQzMl90KiloaWdoX2FkZHJlc3MsCj4gKwkJCQkJZGF0YSwgdHJ1ZSk7Cj4gKwkJZ2VtX3dyaXRl KGZkLCBiYXRjaF9idWZfaGFuZGxlLCAwLCBiYXRjaF9idWZmZXIsIGxlbik7Cj4gKwo+ICsJCS8q IHN1Ym1pdCBjb21tYW5kIGJ1ZmZlciAqLwo+ICsJCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVj dDJbMF0sIHNoYXJlZF9idWZfaGFuZGxlLAo+ICsJCQkJRVhFQ19PQkpFQ1RfUElOTkVEIHwgRVhF Q19PQkpFQ1RfU1VQUE9SVFNfNDhCX0FERFJFU1MsCj4gKwkJCQloaWdoX2FkZHJlc3MpOwoKQWdh aW4gZG9lc24ndCBuZWVkIHVzZXJwdHIgYW5kIGNhbiBiZSBtYWRlIHRvIHdvcmsgb24gMzItYml0 IHVzZXJzcGFjZS4KCj4gKwkJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlsxXSwgYmF0Y2hf YnVmX2hhbmRsZSwgMCwgMCk7Cj4gKwo+ICsJCXJpbmcgPSAwOwo+ICsJCWlmIChIQVNfQkxUX1JJ TkcoaW50ZWxfZ2V0X2RybV9kZXZpZChmZCkpKQo+ICsJCQlyaW5nID0gSTkxNV9FWEVDX0JMVDsK PiArCj4gKwkJZXhlY2J1Zi5idWZmZXJzX3B0ciA9ICh1aW50cHRyX3QpZXhlY19vYmplY3QyOwo+ ICsJCWV4ZWNidWYuYnVmZmVyX2NvdW50ID0gTlVNX0VYRUNfT0JKRUNUUzsKPiArCQlleGVjYnVm LmJhdGNoX3N0YXJ0X29mZnNldCA9IDA7Cj4gKwkJZXhlY2J1Zi5iYXRjaF9sZW4gPSBsZW47Cj4g KwkJZXhlY2J1Zi5jbGlwcmVjdHNfcHRyID0gMDsKPiArCQlleGVjYnVmLm51bV9jbGlwcmVjdHMg PSAwOwo+ICsJCWV4ZWNidWYuRFIxID0gMDsKPiArCQlleGVjYnVmLkRSNCA9IDA7Cj4gKwkJZXhl Y2J1Zi5mbGFncyA9IHJpbmc7Cj4gKwkJaTkxNV9leGVjYnVmZmVyMl9zZXRfY29udGV4dF9pZChl eGVjYnVmLCAwKTsKPiArCQlleGVjYnVmLnJzdmQyID0gMDsKPiArCj4gKwkJZ2VtX2V4ZWNidWYo ZmQsICZleGVjYnVmKTsKPiArCQlnZW1fc3luYyhmZCwgYmF0Y2hfYnVmX2hhbmRsZSk7Cj4gKwo+ ICsJCS8vIGNoZWNrIG9uIENQVSB0byBzZWUgaWYgdmFsdWUgY2hhbmdlcwo+ICsJCWlmIChzaGFy ZWRfYnVmZmVyWzBdICE9IGRhdGEpCj4gKwkJewo+ICsJCQkjaWZkZWYgSVNfMzJCSVRfVVNFUgo+ ICsJCQlpZ3RfaW5mbygiXG5DUFUgcmVhZCBkb2VzIG5vdCBtYXRjaCBHUFUgd3JpdGUsIGV4cGVj dGVkOiAweCUiUFJJeDMyIiwgZ290OiAweCUiUFJJeDMyIiwgYWRkcmVzczogMHglIlBSSXgzMiJc biIsIGRhdGEsIHNoYXJlZF9idWZmZXJbMF0sICh1aW50cHRyX3QpaGlnaF9hZGRyZXNzKTsKPiAr CQkJI2Vsc2UKPiArCQkJaWd0X2luZm8oIlxuQ1BVIHJlYWQgZG9lcyBub3QgbWF0Y2ggR1BVIHdy aXRlLCBleHBlY3RlZDogMHglIlBSSXgzMiIsIGdvdDogMHglIlBSSXgzMiIsIGFkZHJlc3M6IDB4 JSJQUkl4NjQiXG4iLCBkYXRhLCBzaGFyZWRfYnVmZmVyWzBdLCAodWludHB0cl90KWhpZ2hfYWRk cmVzcyk7Cj4gKwkJCSNlbmRpZgoKSSB0aGluayBpZiB5b3UgbWFrZSBoaWdoX2FkZHJlc3MgdWlu dDY0X3QgdGhpcyBjYW4gYmUgc2ltcGxpZmllZC4KCj4gKwkJCWlndF9mYWlsKDEpOwo+ICsJCX0K PiArCX0KPiArCj4gKwlnZW1fY2xvc2UoZmQsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICsJY2xvc2Uo ZmQpOwo+ICsJZnJlZShzaGFyZWRfYnVmZmVyKTsKPiArfQo+ICsKPiArLyoqIGdlbV9waW5fbW1h cF9hbm9ueW1vdXNfdGVzdCAtIFRoaXMgdGVzdCB3aWxsIGNyZWF0ZSBhIG1tYXAgYW5vbnltb3Vz IGJ1ZmZlciBhbmQKPiArICogIHNoYXJlIHdpdGggR1BVLiBJdCB3aWxsIHJ1biBiYXNpYyB0ZXN0 IG9uIHRoaXMgYnVmZmVyLgoKVGhpcyBpcyB1bnVzdWFsIGNvbW1lbnQgZm9ybWF0LCBub3QgY29u c2lzdGVudCB3aXRoIHRoZSBjb2RlIGJhc2UuCgo+ICtAY29kZQo+ICsgICBDcmVhdGUgYSBhbm9u eW1vdXMgbW1hcCBidWZmZXIKPiArICAgU2hhcmUgYnVmZmVyIHdpdGggd2l0aCBHUFUgYnkgdXNp bmcgdXNlcnB0ciBpb2N0bAo+ICsgICBDcmVhdGUgYmF0Y2ggYnVmZmVyIHRvIHdyaXRlIERBVEEg dG8gZmlyc3QgZHdvcmQgb2YgYnVmZmVyCj4gKyAgIFNldCBFWEVDX09CSkVDVF9QSU5ORUQgZmxh ZyBpbiBleGVjIG9iamVjdAo+ICsgICBTZXQgJ29mZnNldCcgaW4gZXhlYyBvYmplY3QgdG8gc2hh cmVkIGJ1ZmZlciBWTUEKPiArICAgU3VibWl0IGV4ZWNidWZmZXIKPiArICAgVmVyaWZ5IHZhbHVl IG9mIGZpcnN0IERXT1JEIGluIHNoYXJlZCBidWZmZXIgbWF0Y2hlcyBEQVRBCj4gK0BlbmRjb2Rl Cj4gKyovCj4gK3ZvaWQgZ2VtX3Bpbl9tbWFwX2Fub255bW91c190ZXN0KHZvaWQpCj4gK3sKPiAr CWk5MTVfZ2VtX3VzZXJwdHIqIHVzZXJwdHIgPSBOVUxMOwo+ICsJaW50IGZkLCByZXQ7Cj4gKwl1 aW50MzJfdCogc2hhcmVkX2J1ZmZlciA9IE5VTEw7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4 ZWNidWZmZXIyIGV4ZWNidWY7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBl eGVjX29iamVjdDJbTlVNX0VYRUNfT0JKRUNUU107Cj4gKwl1aW50MzJfdCBiYXRjaF9idWZmZXJb Qk9fU0laRV07Cj4gKwl1aW50MzJfdCBiYXRjaF9idWZfaGFuZGxlLCBzaGFyZWRfYnVmX2hhbmRs ZTsKPiArCWludCByaW5nLCBsZW47Cj4gKwljb25zdCB1aW50MzJfdCBkYXRhID0gMHgxMjM0NTY3 ODsKPiArCj4gKwlmZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfSU5URUwpOwo+ICsJYmF0Y2hf YnVmX2hhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIEJPX1NJWkUpOwo+ICsKPiArCS8qIGNyZWF0ZSBh bm9ueW11cyBtbWFwIGJ1ZmZlciwgc2V0IHRvIGFsbCAweEYncyAqLwo+ICsJc2hhcmVkX2J1ZmZl ciA9IG1tYXAoTlVMTCwgQk9fU0laRSwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5P TllNT1VTLCAtMSwgMCk7Cj4gKwlpZ3RfZmFpbF9vbl9mKHNoYXJlZF9idWZmZXIgPT0gKHZvaWQg KiktMSwKPiArCQkgICAgICAibW1hcCBjYWxsIGZhaWxlZCB3aXRoICVzXG4iLCBzdHJlcnJvcihl cnJubykpOwoKTUFQX0ZBSUxFRAoKPiArCj4gKwkqc2hhcmVkX2J1ZmZlciA9IDB4RkZGRkZGRkY7 Cj4gKwo+ICsJLyogc2hhcmUgd2l0aCBHUFUgKi8KPiArCXVzZXJwdHIgPSBnZW1fY3JlYXRlX3Vz ZXJwdHJfc3RydWN0KHNoYXJlZF9idWZmZXIsIEJPX1NJWkUsIDApOwo+ICsJcmV0ID0gZ2VtX2Nh bGxfdXNlcnB0cl9pb2N0bChmZCwgdXNlcnB0cik7Cj4gKwlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7 Cj4gKwo+ICsJLyogR2V0IGhhbmRsZSBmb3Igc2hhcmVkIGJ1ZmZlciAqLwo+ICsJc2hhcmVkX2J1 Zl9oYW5kbGUgPSB1c2VycHRyLT5oYW5kbGU7Cj4gKwlmcmVlKHVzZXJwdHIpOwo+ICsKPiArCS8q IGNyZWF0ZSBjb21tYW5kIGJ1ZmZlciB3aXRoIHdyaXRlIGNvbW1hbmQgKi8KPiArCWxlbiA9IGdl bV9zdG9yZV9kYXRhX3N2bShmZCwgYmF0Y2hfYnVmZmVyLCBzaGFyZWRfYnVmZmVyLCBkYXRhLCB0 cnVlKTsKPiArCWdlbV93cml0ZShmZCwgYmF0Y2hfYnVmX2hhbmRsZSwgMCwgYmF0Y2hfYnVmZmVy LCBsZW4pOwo+ICsKPiArCS8qIHN1Ym1pdCBjb21tYW5kIGJ1ZmZlciAqLwo+ICsJc2V0dXBfZXhl Y19vYmooJmV4ZWNfb2JqZWN0MlswXSwgc2hhcmVkX2J1Zl9oYW5kbGUsIEVYRUNfT0JKRUNUX1BJ Tk5FRCwgc2hhcmVkX2J1ZmZlcik7Cj4gKwlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzFd LCBiYXRjaF9idWZfaGFuZGxlLCAwLCAwKTsKPiArCj4gKwlyaW5nID0gMDsKPiArCWlmIChIQVNf QkxUX1JJTkcoaW50ZWxfZ2V0X2RybV9kZXZpZChmZCkpKQo+ICsJCXJpbmcgPSBJOTE1X0VYRUNf QkxUOwo+ICsKPiArCWV4ZWNidWYuYnVmZmVyc19wdHIgPSAodWludHB0cl90KWV4ZWNfb2JqZWN0 MjsKPiArCWV4ZWNidWYuYnVmZmVyX2NvdW50ID0gTlVNX0VYRUNfT0JKRUNUUzsKPiArCWV4ZWNi dWYuYmF0Y2hfc3RhcnRfb2Zmc2V0ID0gMDsKPiArCWV4ZWNidWYuYmF0Y2hfbGVuID0gbGVuOwo+ ICsJZXhlY2J1Zi5jbGlwcmVjdHNfcHRyID0gMDsKPiArCWV4ZWNidWYubnVtX2NsaXByZWN0cyA9 IDA7Cj4gKwlleGVjYnVmLkRSMSA9IDA7Cj4gKwlleGVjYnVmLkRSNCA9IDA7Cj4gKwlleGVjYnVm LmZsYWdzID0gcmluZzsKPiArCWk5MTVfZXhlY2J1ZmZlcjJfc2V0X2NvbnRleHRfaWQoZXhlY2J1 ZiwgMCk7Cj4gKwlleGVjYnVmLnJzdmQyID0gMDsKPiArCj4gKwlnZW1fZXhlY2J1ZihmZCwgJmV4 ZWNidWYpOwo+ICsJZ2VtX3N5bmMoZmQsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICsKPiArCS8vIGNo ZWNrIG9uIENQVSB0byBzZWUgaWYgdmFsdWUgY2hhbmdlcwo+ICsJaWd0X2ZhaWxfb25fZihzaGFy ZWRfYnVmZmVyWzBdICE9IGRhdGEsCj4gKwkJICAgICAgIlxuQ1BVIHJlYWQgZG9lcyBub3QgbWF0 Y2ggR1BVIHdyaXRlLCBleHBlY3RlZDogMHgleCwgZ290OiAweCV4XG4iLCBkYXRhLCBzaGFyZWRf YnVmZmVyWzBdKTsKPiArCj4gKwlnZW1fY2xvc2UoZmQsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICsJ Y2xvc2UoZmQpOwo+ICsJaWd0X2ZhaWxfb25fZihtdW5tYXAoc2hhcmVkX2J1ZmZlciwgQk9fU0la RSkgIT0gMCwKPiArCQkgICAgICAibXVubWFwIGZhaWxlZCB3aXRoOiAlcyIsIHN0cmVycm9yKGVy cm5vKSk7Cj4gK30KCk9rIHNvIHlvdSBnb3QgdGhyZWUgdGVzdHMgSSBjYW4gdGhpbmsgb2Ygd2hp Y2ggZG8gdGhlIHNhbWUgdGhpbmcganVzdCAKd2l0aCBhIGRpZmZlcmVudCB0eXBlIG9mIG1lbW9y eSB1c2VkLiBNYXliZSB5b3UgY291bGQgcmVkdWNlIGNvZGUgCmR1cGxpY2F0aW9uIGEgYml0LCBi dXQgcGVyaGFwcywgaWYgeW91IGltcGxlbWVudCB0aGUgb3RoZXIgc3VnZ2VzdGlvbnMgCnRoZXkg d2lsbCBiZWNvbWUgcmVhbGx5IHNob3J0IGFueXdheS4gUHJvYmFibHkgdGhlIGxhdHRlci4KCk1v cmUgaW1wb3J0YW50bHkgdXNlcnB0ciBiYWNraW5nIG1lbW9yeSB0eXBlcyBhcmUgbm90IGRpcmVj dGx5IHJlbGF0ZWQgCnRvIHRoZSBzb2Z0cGluIGZlYXR1cmUuIEkgd291bGQgYmUgdGVtcHRlZCB0 byBhZGQgdGhlc2UgdG8gCmdlbV91c2VycHRyX2JsaXRzIChtYWxsb2NlZCwgc2htLCBhbm9uIG1t YXApIGFuZCBub3QgYm90aGVyIHdpdGggdGhhdCBoZXJlLgoKPiArCj4gKy8qKiBnZW1fcGluX21t YXBfZmlsZV90ZXN0IC0gVGhpcyB0ZXN0IHdpbGwgdXNlIG1tYXAgY29tbWFuZCB0byBtYXAKPiAr ICogIGEgZmlsZSBpbiBtZW1vcnkuIEl0IHdpbGwgdGhlbiBhdHRlbXB0IHRvIHNoYXJlIHRoZSBi dWZmZXIgd2l0aCBHUFUKPiArICogIHVzaW5nIHRoZSB1c2VycHRyIGlvY3RsLiBJdCB3aWxsIHZl cmlmeSBpZiBDUFUvR1BVIHdyaXRlcyBhcmUgY29uc2lzdGVudAo+ICsKPiArQGNvZGUKPiArICAg b3Blbi9jcmVhdGUgYSBmaWxlCj4gKyAgIGxzZWVrIGludG8gdGhlIGZpbGUgYW5kIHdyaXRlIHNv bWUgYXJiaXRyYXJ5IGRhdGEKPiArICAgdGhpcyBhbGxvd3MgdGhlIG1tYXAnZCBwYWdlIHRvIGJl Y29tZSByZXNpZGVudAo+ICsgICB1c2UgbW1hcCBjb21tYW5kIHRvIG1hcCB0aGUgZmlsZSBpbnRv IG1lbW9yeQo+ICsgICBTaGFyZSBidWZmZXIgd2l0aCB3aXRoIEdQVSBieSB1c2luZyB1c2VycHRy IGlvY3RsCj4gKyAgIENyZWF0ZSBiYXRjaCBidWZmZXIgdG8gd3JpdGUgREFUQSB0byBmaXJzdCBk d29yZCBvZiBidWZmZXIKPiArICAgU2V0IEVYRUNfT0JKRUNUX1BJTk5FRCBmbGFnIGluIGV4ZWMg b2JqZWN0Cj4gKyAgIFNldCAnb2Zmc2V0JyBpbiBleGVjIG9iamVjdCB0byBzaGFyZWQgYnVmZmVy IFZNQQo+ICsgICBTdWJtaXQgZXhlY2J1ZmZlcgo+ICsgICBWZXJpZnkgdmFsdWUgb2YgZmlyc3Qg RFdPUkQgaW4gc2hhcmVkIGJ1ZmZlciBtYXRjaGVzIERBVEEKPiArICAgQ2xvc2UgZmlsZQo+ICtA ZW5kY29kZQo+ICsqLwo+ICt2b2lkIGdlbV9waW5fbW1hcF9maWxlX3Rlc3Qodm9pZCkKPiArewo+ ICsJaTkxNV9nZW1fdXNlcnB0ciogdXNlcnB0ciA9IE5VTEw7Cj4gKwlpbnQgZmQsIHJldDsKPiAr CXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKPiArCXN0cnVjdCBkcm1f aTkxNV9nZW1fZXhlY19vYmplY3QyIGV4ZWNfb2JqZWN0MltOVU1fRVhFQ19PQkpFQ1RTXTsKPiAr CXVpbnQzMl90IGJhdGNoX2J1ZmZlcltCT19TSVpFXTsKPiArCXVpbnQzMl90IGJhdGNoX2J1Zl9o YW5kbGUsIGRlc3RfYnVmX2hhbmRsZTsKPiArCWludCByaW5nLCBsZW47Cj4gKwljb25zdCB1aW50 MzJfdCBkYXRhID0gMHgxMjM0NTY3ODsKPiArICAgICAgICBpbnQgZmRvdXQ7Cj4gKwl1aW50MzJf dCAqZGVzdDsKPiArCWNvbnN0IGNoYXIgZmlsZW5hbWVbXSA9ICJzdm1fbW1hcC50eHQiOwo+ICsK PiArCWZkb3V0ID0gb3BlbihmaWxlbmFtZSwgT19SRFdSIHwgT19DUkVBVCB8IE9fVFJVTkMsIDA2 NDApOwo+ICsJaWd0X2ZhaWxfb25fZihmZG91dCA8IDAsICJDYW5ub3Qgb3BlbiBvdXRwdXQgZmls ZVxuIik7CgpJIGFtIG5vdCBzdXJlIGlmIHRoaXMgaXMgYWNjZXB0YWJsZSBpbiBJR1QuIFByb2Jh Ymx5IGF0IGxlYXN0IGhhdmUgdG8gCnVzZSAvdG1wIHJhdGhlciB0aGFuIHdoYXRldmVyIGN1cnJl bnQgZGlyZWN0b3J5IGlzLgoKQnV0IGFsc28gaXMgbm90IGFib3V0IHNvZnQgcGlubmluZyBzbyBw cmV2aW91cyBjb21tZW50IGFwcGxpZXMuCgo+ICsKPiArCS8vIERvIHRoaXMgdG8gZW5zdXJlIGJh Y2tpbmcgcGh5c2ljYWwgbWVtb3J5IGZvciB0aGUgZmlsZQo+ICsJLyogZ28gdG8gdGhlIGxvY2F0 aW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGxhc3QgYnl0ZSAqLwo+ICsJaWYgKGxzZWVrIChmZG91 dCwgQk9fU0laRSwgU0VFS19TRVQpID09IC0xKQo+ICsJCWlndF9pbmZvKCJsc2VlayBlcnJvciIp Owo+ICsKPiArCS8qIHdyaXRlIGEgZHVtbXkgYnl0ZSBhdCB0aGUgbGFzdCBsb2NhdGlvbiAqLwo+ ICsJaWYgKHdyaXRlIChmZG91dCwgIiIsIDEpICE9IDEpCj4gKwkJaWd0X2luZm8oIndyaXRlIGVy cm9yIik7Cj4gKwo+ICsJZmQgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKPiArCWJh dGNoX2J1Zl9oYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCBCT19TSVpFKTsKPiArCj4gKwkvKiBjcmVh dGUgYW5vbnltdXMgbW1hcCBidWZmZXIsIHNldCB0byBhbGwgMHhGJ3MgKi8KPiArCWRlc3QgPSBt bWFwKDAsIEJPX1NJWkUsIFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkb3V0LCAwKTsKPiArCWln dF9mYWlsX29uX2YoZGVzdCA9PSAodm9pZCAqKS0xLAo+ICsJCSAgICAgICJtbWFwIGNhbGwgZmFp bGVkIHdpdGggJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Cj4gKwkqZGVzdCA9IDB4MTExMTExMTE7 Cj4gKwo+ICsJdXNlcnB0ciA9IGdlbV9jcmVhdGVfdXNlcnB0cl9zdHJ1Y3QoZGVzdCwgQk9fU0la RSwgMCk7Cj4gKwlyZXQgPSBnZW1fY2FsbF91c2VycHRyX2lvY3RsKGZkLCB1c2VycHRyKTsKPiAr CWlndF9hc3NlcnRfZXEocmV0LCAwKTsKPiArCWRlc3RfYnVmX2hhbmRsZSA9IHVzZXJwdHItPmhh bmRsZTsKPiArCWZyZWUodXNlcnB0cik7Cj4gKwo+ICsJLyogY3JlYXRlIGNvbW1hbmQgYnVmZmVy IHdpdGggd3JpdGUgY29tbWFuZCAqLwo+ICsJbGVuID0gZ2VtX3N0b3JlX2RhdGFfc3ZtKGZkLCBi YXRjaF9idWZmZXIsIGRlc3QsIGRhdGEsIHRydWUpOwo+ICsJZ2VtX3dyaXRlKGZkLCBiYXRjaF9i dWZfaGFuZGxlLCAwLCBiYXRjaF9idWZmZXIsIGxlbik7Cj4gKwo+ICsJLyogc3VibWl0IGNvbW1h bmQgYnVmZmVyICovCj4gKwlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzBdLCBkZXN0X2J1 Zl9oYW5kbGUsIEVYRUNfT0JKRUNUX1BJTk5FRCwgZGVzdCk7Cj4gKwlzZXR1cF9leGVjX29iaigm ZXhlY19vYmplY3QyWzFdLCBiYXRjaF9idWZfaGFuZGxlLCAwLCAwKTsKPiArCj4gKwlyaW5nID0g MDsKPiArCWlmIChIQVNfQkxUX1JJTkcoaW50ZWxfZ2V0X2RybV9kZXZpZChmZCkpKQo+ICsJCXJp bmcgPSBJOTE1X0VYRUNfUkVOREVSOwo+ICsKPiArCWV4ZWNidWYuYnVmZmVyc19wdHIgPSAodWlu dHB0cl90KWV4ZWNfb2JqZWN0MjsKPiArCWV4ZWNidWYuYnVmZmVyX2NvdW50ID0gTlVNX0VYRUNf T0JKRUNUUzsKPiArCWV4ZWNidWYuYmF0Y2hfc3RhcnRfb2Zmc2V0ID0gMDsKPiArCWV4ZWNidWYu YmF0Y2hfbGVuID0gbGVuOwo+ICsJZXhlY2J1Zi5jbGlwcmVjdHNfcHRyID0gMDsKPiArCWV4ZWNi dWYubnVtX2NsaXByZWN0cyA9IDA7Cj4gKwlleGVjYnVmLkRSMSA9IDA7Cj4gKwlleGVjYnVmLkRS NCA9IDA7Cj4gKwlleGVjYnVmLmZsYWdzID0gcmluZzsKPiArCWk5MTVfZXhlY2J1ZmZlcjJfc2V0 X2NvbnRleHRfaWQoZXhlY2J1ZiwgMCk7Cj4gKwlleGVjYnVmLnJzdmQyID0gMDsKPiArCj4gKwln ZW1fZXhlY2J1ZihmZCwgJmV4ZWNidWYpOwo+ICsJZ2VtX3N5bmMoZmQsIGJhdGNoX2J1Zl9oYW5k bGUpOwo+ICsKPiArCS8vIGNoZWNrIG9uIENQVSB0byBzZWUgaWYgdmFsdWUgY2hhbmdlcwo+ICsJ aWd0X2ZhaWxfb25fZigqZGVzdCAhPSBkYXRhLAo+ICsJCSAgICAgICJcbkNQVSByZWFkIGRvZXMg bm90IG1hdGNoIEdQVSB3cml0ZSwgZXhwZWN0ZWQ6IDB4JXgsIGdvdDogMHgleFxuIiwgZGF0YSwg ZGVzdFswXSk7Cj4gKwo+ICsJZ2VtX2Nsb3NlKGZkLCBiYXRjaF9idWZfaGFuZGxlKTsKPiArCWNs b3NlKGZkKTsKPiArCWlndF9mYWlsX29uX2YobXVubWFwKGRlc3QsIEJPX1NJWkUpICE9IDAsCj4g KwkJICAgICAgIm11bm1hcCBmYWlsZWQgd2l0aDogJXMiLCBzdHJlcnJvcihlcnJubykpOwo+ICsJ Y2xvc2UoZmRvdXQpOwo+ICt9Cj4gKwo+ICsKPiAraW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFy Z3ZbXSkKPiArewo+ICsJaWd0X3N1YnRlc3RfaW5pdChhcmdjLCBhcmd2KTsKPiArCWlndF9za2lw X29uX3NpbXVsYXRpb24oKTsKPiArCj4gKwlpZ3Rfc3VidGVzdCgiZ2VtX251bGxfYnVmZmVyIil7 Cj4gKwkJZ2VtX2Jhc2ljX3Rlc3QoZmFsc2UpOwo+ICsJfQo+ICsJaWd0X3N1YnRlc3QoImdlbV9p bnZhbGlkX3VzZXJwdHIiKXsKPiArCQlnZW1faW52YWxpZF91c2VycHRyX3Rlc3QoKTsKPiArCX0K PiArCWlndF9zdWJ0ZXN0KCJnZW1fYmFzaWMiKXsKPiArCQlnZW1fYmFzaWNfdGVzdCh0cnVlKTsK PiArCX0KPiArCWlndF9zdWJ0ZXN0KCJnZW1fbXVsdGlwbGVfcHJvY2VzcyIpewo+ICsJCWdlbV9t dWx0aXBsZV9wcm9jZXNzX3Rlc3QoKTsKPiArCX0KPiArCWlndF9zdWJ0ZXN0KCJnZW1fcmVwaW4i KXsKPiArCQlnZW1fcmVwaW5fdGVzdCgpOwo+ICsJfQo+ICsJaWd0X3N1YnRlc3QoImdlbV9ldmlj dCIpewo+ICsJCWdlbV9ldmljdF90ZXN0KCk7Cj4gKwl9Cj4gKwlpZ3Rfc3VidGVzdCgiZ2VtX3N0 cmVzcyIpewo+ICsJCWdlbV9zdHJlc3NfdGVzdCgpOwo+ICsJfQo+ICsJaWd0X3N1YnRlc3QoImdl bV9waW5fb3ZlcmxhcCIpewo+ICsJCWdlbV9waW5fb3ZlcmxhcF90ZXN0KCk7Cj4gKwl9Cj4gKwlp Z3Rfc3VidGVzdCgiZ2VtX3NobWVtIil7Cj4gKwkJZ2VtX3NobWVtX3Rlc3QoKTsKPiArCX0KPiAr CWlndF9zdWJ0ZXN0KCJnZW1fd3JpdGVfbXVsdGlwYWdlX2J1ZmZlciIpewo+ICsJCWdlbV93cml0 ZV9tdWx0aXBhZ2VfYnVmZmVyX3Rlc3QoKTsKPiArCX0KPiArI2lmbmRlZiBJU18zMkJJVF9VU0VS Cj4gKwlpZ3Rfc3VidGVzdCgiZ2VtX3Bpbl9oaWdoX2FkZHJlc3MiKXsKPiArCQlnZW1fcGluX2hp Z2hfYWRkcmVzc190ZXN0KCk7Cj4gKwl9Cj4gKwlpZ3Rfc3VidGVzdCgiZ2VtX3Bpbl9uZWFyXzQ4 Qml0Iil7Cj4gKwkJZ2VtX3Bpbl9uZWFyXzQ4Qml0X3Rlc3QoKTsKPiArCX0KPiArCWlndF9zdWJ0 ZXN0KCJnZW1fcGluX2ludmFsaWRfdm1hIil7Cj4gKwkJZ2VtX3Bpbl9pbnZhbGlkX3ZtYV90ZXN0 KCk7Cj4gKwl9Cj4gKyNlbmRpZgoKU28gSSB0aGluayBhbGwgb2YgdGhvc2UgY2FuIGJlIGltcGxl bWVudGVkIHRvIHdvcmsgb24gMzItYml0IHVzZXJzcGFjZSAKYXMgY29tbWVudGVkIGFib3ZlLgoK SW4gZ2VuZXJhbCBxdWl0ZSBzb21lIGFtb3VudCBvZiBjb2RlIHNvIEkgZG9uJ3QgZ3VhcmFudGVl IEkgY2F1Z2h0IGFsbCAKcHJvYmxlbXMuCgpJIHRoaW5rIHJlbW92aW5nIHNvbWUgdGVzdHMgaXMg dGhlIHdheSB0byBnbyBieSBhZGRpbmcgbmV3IHRlc3QgY2FzZXMgdG8gCmdlbV91c2VycHRyX2Js aXRzLiBUaGV5IHdvdWxkIG5vdCB1c2Ugc29mdCBwaW5uaW5nIHRoZXJlIGJ1dCBqc3V0IApleGNl cmNpc2UgYmFja2luZyBzdG9yZS4KCkluIHRoaXMgZmlsZSB5b3UgY2FuIGtlZXAgdXNpbmcgdXNl cnB0ciBidXQgeW91IGhhdmUgdG8gYWxzbyBleGNlcmNpc2UgCnRoZSBub3JtYWwgQk8gYSBiaXQu CgpXaGVuIHlvdSBjbGVhbiBpdCB1cCBpdCB3aWxsIGJlY29tZSBjbGVhcmVyIGlmIGFueSB0ZXN0 IHNjZW5hcmlvcyBhcmUgCm1pc3NpbmcuCgpGb3IgcGxhY2VzIHdoZXJlIEkgbWFkZSBjb21tZW50 cyBvbiBkYXRhIHR5cGVzIGFuZCBjb2Rpbmcgc3R5bGVzIHRoZXkgCm9idmlvdXNseSBhcHBseSB0 aHJvdWdob3V0LgoKUmVnYXJkcywKClR2cnRrbwpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2ludGVsLWdmeAo=