From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH i-g-t 09/12] i915: Add gem_exec_balancer Date: Wed, 22 May 2019 13:13:25 +0100 Message-ID: References: <20190522113712.23512-1-chris@chris-wilson.co.uk> <20190522113712.23512-9-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190522113712.23512-9-chris@chris-wilson.co.uk> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org Cc: igt-dev@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDIyLzA1LzIwMTkgMTI6MzcsIENocmlzIFdpbHNvbiB3cm90ZToKPiBFeGVyY2lzZSB0aGUg aW4ta2VybmVsIGxvYWQgYmFsYW5jZXIgY2hlY2tpbmcgdGhhdCB3ZSBjYW4gZGlzdHJpYnV0ZQo+ IGJhdGNoZXMgYWNyb3NzIHRoZSBzZXQgb2YgY3R4LT5lbmdpbmVzIHRvIGF2b2lkIGxvYWQuCj4g Cj4gdjI6IE1hbnkgYXNzb3J0ZWQgaW1wcm92ZW1lbnRzIGZyb20gVHZydGtvLgo+IAo+IFNpZ25l ZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+IC0tLQo+ ICAgdGVzdHMvTWFrZWZpbGUuYW0gICAgICAgICAgICAgIHwgICAgMSArCj4gICB0ZXN0cy9NYWtl ZmlsZS5zb3VyY2VzICAgICAgICAgfCAgICAxICsKPiAgIHRlc3RzL2k5MTUvZ2VtX2V4ZWNfYmFs YW5jZXIuYyB8IDEwNTIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgIHRlc3Rz L21lc29uLmJ1aWxkICAgICAgICAgICAgICB8ICAgIDcgKwo+ICAgNCBmaWxlcyBjaGFuZ2VkLCAx MDYxIGluc2VydGlvbnMoKykKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9pOTE1L2dlbV9l eGVjX2JhbGFuY2VyLmMKPiAKPiBkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuYW0gYi90ZXN0 cy9NYWtlZmlsZS5hbQo+IGluZGV4IDUwOTdkZWJmNi4uYzZhZjBhZWFmIDEwMDY0NAo+IC0tLSBh L3Rlc3RzL01ha2VmaWxlLmFtCj4gKysrIGIvdGVzdHMvTWFrZWZpbGUuYW0KPiBAQCAtOTYsNiAr OTYsNyBAQCBnZW1fY2xvc2VfcmFjZV9MREFERCA9ICQoTERBREQpIC1scHRocmVhZAo+ICAgZ2Vt X2N0eF90aHJhc2hfQ0ZMQUdTID0gJChBTV9DRkxBR1MpICQoVEhSRUFEX0NGTEFHUykKPiAgIGdl bV9jdHhfdGhyYXNoX0xEQUREID0gJChMREFERCkgLWxwdGhyZWFkCj4gICBnZW1fY3R4X3NzZXVf TERBREQgPSAkKExEQUREKSAkKHRvcF9idWlsZGRpcikvbGliL2xpYmlndF9wZXJmLmxhCj4gK2k5 MTVfZ2VtX2V4ZWNfYmFsYW5jZXJfTERBREQgPSAkKExEQUREKSAkKHRvcF9idWlsZGRpcikvbGli L2xpYmlndF9wZXJmLmxhCj4gICBnZW1fZXhlY19jYXB0dXJlX0xEQUREID0gJChMREFERCkgLWx6 Cj4gICBnZW1fZXhlY19wYXJhbGxlbF9DRkxBR1MgPSAkKEFNX0NGTEFHUykgJChUSFJFQURfQ0ZM QUdTKQo+ICAgZ2VtX2V4ZWNfcGFyYWxsZWxfTERBREQgPSAkKExEQUREKSAtbHB0aHJlYWQKPiBk aWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJj ZXMKPiBpbmRleCAyZWY2ODkwMjMuLjE3ZmNhNmQ3NyAxMDA2NDQKPiAtLS0gYS90ZXN0cy9NYWtl ZmlsZS5zb3VyY2VzCj4gKysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+IEBAIC0yNCw2ICsy NCw3IEBAIFRFU1RTX3Byb2dzID0gXAo+ICAgCWk5MTUvZ2VtX2N0eF9jbG9uZSBcCj4gICAJaTkx NS9nZW1fY3R4X2VuZ2luZXMgXAo+ICAgCWk5MTUvZ2VtX2N0eF9zaGFyZWQgXAo+ICsJaTkxNS9n ZW1fZXhlY19iYWxhbmNlciBcCj4gICAJaTkxNS9nZW1fdm1fY3JlYXRlIFwKPiAgIAlrbXNfM2Qg XAo+ICAgCWttc19hZGRmYl9iYXNpYyBcCj4gZGlmZiAtLWdpdCBhL3Rlc3RzL2k5MTUvZ2VtX2V4 ZWNfYmFsYW5jZXIuYyBiL3Rlc3RzL2k5MTUvZ2VtX2V4ZWNfYmFsYW5jZXIuYwo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwLi40MGEyNzE5YzAKPiAtLS0gL2Rldi9udWxs Cj4gKysrIGIvdGVzdHMvaTkxNS9nZW1fZXhlY19iYWxhbmNlci5jCj4gQEAgLTAsMCArMSwxMDUy IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCDCqSAyMDE4LTIwMTkgSW50ZWwgQ29ycG9yYXRpb24K PiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2Us IHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFu ZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICog dG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdp dGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBt ZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwg Y29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhl Cj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFy YWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBv cnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElT IFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Mg T1IKPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUg QVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFN QUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENP TlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1Ig SU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJ TkdTCj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8c2NoZWQu aD4KPiArCj4gKyNpbmNsdWRlICJpZ3QuaCIKPiArI2luY2x1ZGUgImlndF9wZXJmLmgiCj4gKyNp bmNsdWRlICJpOTE1L2dlbV9yaW5nLmgiCj4gKyNpbmNsdWRlICJzd19zeW5jLmgiCj4gKwo+ICtJ R1RfVEVTVF9ERVNDUklQVElPTigiRXhlcmNpc2UgaW4ta2VybmVsIGxvYWQtYmFsYW5jaW5nIik7 Cj4gKwo+ICsjZGVmaW5lIElOU1RBTkNFX0NPVU5UICgxIDw8IEk5MTVfUE1VX1NBTVBMRV9JTlNU QU5DRV9CSVRTKQo+ICsKPiArc3RhdGljIGJvb2wgaGFzX2NsYXNzX2luc3RhbmNlKGludCBpOTE1 LCB1aW50MTZfdCBjbGFzcywgdWludDE2X3QgaW5zdGFuY2UpCj4gK3sKPiArCWludCBmZDsKPiAr Cj4gKwlmZCA9IHBlcmZfaTkxNV9vcGVuKEk5MTVfUE1VX0VOR0lORV9CVVNZKGNsYXNzLCBpbnN0 YW5jZSkpOwo+ICsJaWYgKGZkICE9IC0xKSB7Cj4gKwkJY2xvc2UoZmQpOwo+ICsJCXJldHVybiB0 cnVlOwo+ICsJfQo+ICsKPiArCXJldHVybiBmYWxzZTsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVj dCBpOTE1X2VuZ2luZV9jbGFzc19pbnN0YW5jZSAqCj4gK2xpc3RfZW5naW5lcyhpbnQgaTkxNSwg dWludDMyX3QgY2xhc3NfbWFzaywgdW5zaWduZWQgaW50ICpvdXQpCj4gK3sKPiArCXVuc2lnbmVk IGludCBjb3VudCA9IDAsIHNpemUgPSA2NDsKPiArCXN0cnVjdCBpOTE1X2VuZ2luZV9jbGFzc19p bnN0YW5jZSAqZW5naW5lczsKPiArCj4gKwllbmdpbmVzID0gbWFsbG9jKHNpemUgKiBzaXplb2Yo KmVuZ2luZXMpKTsKPiArCWlmICghZW5naW5lcykgewo+ICsJCSpvdXQgPSAwOwo+ICsJCXJldHVy biBOVUxMOwo+ICsJfQo+ICsKPiArCWZvciAoZW51bSBkcm1faTkxNV9nZW1fZW5naW5lX2NsYXNz IGNsYXNzID0gSTkxNV9FTkdJTkVfQ0xBU1NfUkVOREVSOwo+ICsJICAgICBjbGFzc19tYXNrOwo+ ICsJICAgICBjbGFzcysrLCBjbGFzc19tYXNrID4+PSAxKSB7Cj4gKwkJaWYgKCEoY2xhc3NfbWFz ayAmIDEpKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJZm9yICh1bnNpZ25lZCBpbnQgaW5zdGFu Y2UgPSAwOwo+ICsJCSAgICAgaW5zdGFuY2UgPCBJTlNUQU5DRV9DT1VOVDsKPiArCQkgICAgIGlu c3RhbmNlKyspIHsKPiArCQkJaWYgKCFoYXNfY2xhc3NfaW5zdGFuY2UoaTkxNSwgY2xhc3MsIGlu c3RhbmNlKSkKPiArCQkJCWNvbnRpbnVlOwo+ICsKPiArCQkJaWYgKGNvdW50ID09IHNpemUpIHsK PiArCQkJCXN0cnVjdCBpOTE1X2VuZ2luZV9jbGFzc19pbnN0YW5jZSAqZTsKPiArCj4gKwkJCQlz aXplICo9IDI7Cj4gKwkJCQllID0gcmVhbGxvYyhlbmdpbmVzLCBzaXplKnNpemVvZigqZW5naW5l cykpOwo+ICsJCQkJaWYgKCFlKSB7Cj4gKwkJCQkJKm91dCA9IGNvdW50Owo+ICsJCQkJCXJldHVy biBlbmdpbmVzOwo+ICsJCQkJfQo+ICsKPiArCQkJCWVuZ2luZXMgPSBlOwo+ICsJCQl9Cj4gKwo+ ICsJCQllbmdpbmVzW2NvdW50KytdID0gKHN0cnVjdCBpOTE1X2VuZ2luZV9jbGFzc19pbnN0YW5j ZSl7Cj4gKwkJCQkuZW5naW5lX2NsYXNzID0gY2xhc3MsCj4gKwkJCQkJLmVuZ2luZV9pbnN0YW5j ZSA9IGluc3RhbmNlLAo+ICsJCQl9Owo+ICsJCX0KPiArCX0KPiArCj4gKwlpZiAoIWNvdW50KSB7 Cj4gKwkJZnJlZShlbmdpbmVzKTsKPiArCQllbmdpbmVzID0gTlVMTDsKPiArCX0KPiArCj4gKwkq b3V0ID0gY291bnQ7Cj4gKwlyZXR1cm4gZW5naW5lczsKPiArfQo+ICsKPiArc3RhdGljIGludCBf X3NldF9sb2FkX2JhbGFuY2VyKGludCBpOTE1LCB1aW50MzJfdCBjdHgsCj4gKwkJCSAgICAgICBj b25zdCBzdHJ1Y3QgaTkxNV9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgKmNpLAo+ICsJCQkgICAgICAg dW5zaWduZWQgaW50IGNvdW50KQo+ICt7Cj4gKwlJOTE1X0RFRklORV9DT05URVhUX0VOR0lORVNf TE9BRF9CQUxBTkNFKGJhbGFuY2VyLCBjb3VudCk7Cj4gKwlJOTE1X0RFRklORV9DT05URVhUX1BB UkFNX0VOR0lORVMoZW5naW5lcywgMSArIGNvdW50KTsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1f Y29udGV4dF9wYXJhbSBwID0gewo+ICsJCS5jdHhfaWQgPSBjdHgsCj4gKwkJLnBhcmFtID0gSTkx NV9DT05URVhUX1BBUkFNX0VOR0lORVMsCj4gKwkJLnNpemUgPSBzaXplb2YoZW5naW5lcyksCj4g KwkJLnZhbHVlID0gdG9fdXNlcl9wb2ludGVyKCZlbmdpbmVzKQo+ICsJfTsKPiArCj4gKwltZW1z ZXQoJmJhbGFuY2VyLCAwLCBzaXplb2YoYmFsYW5jZXIpKTsKPiArCWJhbGFuY2VyLmJhc2UubmFt ZSA9IEk5MTVfQ09OVEVYVF9FTkdJTkVTX0VYVF9MT0FEX0JBTEFOQ0U7Cj4gKwo+ICsJaWd0X2Fz c2VydChjb3VudCk7Cj4gKwliYWxhbmNlci5udW1fc2libGluZ3MgPSBjb3VudDsKPiArCW1lbWNw eShiYWxhbmNlci5lbmdpbmVzLCBjaSwgY291bnQgKiBzaXplb2YoKmNpKSk7Cj4gKwo+ICsJbWVt c2V0KCZlbmdpbmVzLCAwLCBzaXplb2YoZW5naW5lcykpOwo+ICsJZW5naW5lcy5leHRlbnNpb25z ID0gdG9fdXNlcl9wb2ludGVyKCZiYWxhbmNlcik7Cj4gKwllbmdpbmVzLmVuZ2luZXNbMF0uZW5n aW5lX2NsYXNzID0KPiArCQlJOTE1X0VOR0lORV9DTEFTU19JTlZBTElEOwo+ICsJZW5naW5lcy5l bmdpbmVzWzBdLmVuZ2luZV9pbnN0YW5jZSA9Cj4gKwkJSTkxNV9FTkdJTkVfQ0xBU1NfSU5WQUxJ RF9OT05FOwo+ICsJbWVtY3B5KGVuZ2luZXMuZW5naW5lcyArIDEsIGNpLCBjb3VudCAqIHNpemVv ZigqY2kpKTsKPiArCj4gKwlyZXR1cm4gX19nZW1fY29udGV4dF9zZXRfcGFyYW0oaTkxNSwgJnAp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBzZXRfbG9hZF9iYWxhbmNlcihpbnQgaTkxNSwgdWlu dDMyX3QgY3R4LAo+ICsJCQkgICAgICBjb25zdCBzdHJ1Y3QgaTkxNV9lbmdpbmVfY2xhc3NfaW5z dGFuY2UgKmNpLAo+ICsJCQkgICAgICB1bnNpZ25lZCBpbnQgY291bnQpCj4gK3sKPiArCWlndF9h c3NlcnRfZXEoX19zZXRfbG9hZF9iYWxhbmNlcihpOTE1LCBjdHgsIGNpLCBjb3VudCksIDApOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdWludDMyX3QgbG9hZF9iYWxhbmNlcl9jcmVhdGUoaW50IGk5MTUs Cj4gKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBpOTE1X2VuZ2luZV9jbGFzc19pbnN0YW5jZSAqY2ks Cj4gKwkJCQkgICAgIHVuc2lnbmVkIGludCBjb3VudCkKPiArewo+ICsJdWludDMyX3QgY3R4Owo+ ICsKPiArCWN0eCA9IGdlbV9jb250ZXh0X2NyZWF0ZShpOTE1KTsKPiArCXNldF9sb2FkX2JhbGFu Y2VyKGk5MTUsIGN0eCwgY2ksIGNvdW50KTsKPiArCj4gKwlyZXR1cm4gY3R4Owo+ICt9Cj4gKwo+ ICtzdGF0aWMgdWludDMyX3QgX19iYXRjaF9jcmVhdGUoaW50IGk5MTUsIHVpbnQzMl90IG9mZnNl dCkKPiArewo+ICsJY29uc3QgdWludDMyX3QgYmJlID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsKPiAr CXVpbnQzMl90IGhhbmRsZTsKPiArCj4gKwloYW5kbGUgPSBnZW1fY3JlYXRlKGk5MTUsIEFMSUdO KG9mZnNldCArIDQsIDQwOTYpKTsKPiArCWdlbV93cml0ZShpOTE1LCBoYW5kbGUsIG9mZnNldCwg JmJiZSwgc2l6ZW9mKGJiZSkpOwo+ICsKPiArCXJldHVybiBoYW5kbGU7Cj4gK30KPiArCj4gK3N0 YXRpYyB1aW50MzJfdCBiYXRjaF9jcmVhdGUoaW50IGk5MTUpCj4gK3sKPiArCXJldHVybiBfX2Jh dGNoX2NyZWF0ZShpOTE1LCAwKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaW52YWxpZF9iYWxh bmNlcihpbnQgaTkxNSkKPiArewo+ICsJSTkxNV9ERUZJTkVfQ09OVEVYVF9FTkdJTkVTX0xPQURf QkFMQU5DRShiYWxhbmNlciwgNjQpOwo+ICsJSTkxNV9ERUZJTkVfQ09OVEVYVF9QQVJBTV9FTkdJ TkVTKGVuZ2luZXMsIDY0KTsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbSBw ID0gewo+ICsJCS5wYXJhbSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9FTkdJTkVTLAo+ICsJCS52YWx1 ZSA9IHRvX3VzZXJfcG9pbnRlcigmZW5naW5lcykKPiArCX07Cj4gKwl1aW50MzJfdCBoYW5kbGU7 Cj4gKwl2b2lkICpwdHI7Cj4gKwo+ICsJLyoKPiArCSAqIEFzc3VtZSB0aGF0IEk5MTVfQ09OVEVY VF9QQVJBTV9FTkdJTkUgdmFsaWRhdGVzIHRoZSBhcnJheQo+ICsJICogb2YgZW5naW5lc1tdLCBv dXIgam9iIGlzIHRvIGRldGVybWluZSBpZiB0aGUgbG9hZF9iYWxhbmNlcgo+ICsJICogZXh0ZW5z aW9uIGV4cGxvZGVzLgo+ICsJICovCj4gKwo+ICsJZm9yIChpbnQgY2xhc3MgPSAwOyBjbGFzcyA8 IDMyOyBjbGFzcysrKSB7Cj4gKwkJc3RydWN0IGk5MTVfZW5naW5lX2NsYXNzX2luc3RhbmNlICpj aTsKPiArCQl1bnNpZ25lZCBpbnQgY291bnQ7Cj4gKwo+ICsJCWNpID0gbGlzdF9lbmdpbmVzKGk5 MTUsIDEgPDwgY2xhc3MsICZjb3VudCk7Cj4gKwkJaWYgKCFjaSkKPiArCQkJY29udGludWU7CgpJ IGtub3cgaXQgaXMgYSBodWdlIHN0cmV0Y2gsIGJ1dCBJIGRvIHRoaW5rIGNvcnJlY3QgcGF0dGVy biBmb3IgCmxpc3RfZW5naW5lcyBpcyB0byBhc3NlcnQgb24gYWxsb2NhdGlvbiAobWFsbG9jICsg cmVhbGxvYykgZmFpbHVyZXMgCnJhdGhlciB0aGFuIGVxdWFsIHRoYXQgdG8gbm8gZW5naW5lcyBv ZiB0aGlzIGNsYXNzIGFuZCBqdXN0IGNhcnJ5IGFuZCAKdGhlIHBhc3MgdGhlIHRlc3QuCgpXaXRo IHRoYXQgY2hhbmdlOgoKUmV2aWV3ZWQtYnk6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxp bkBpbnRlbC5jb20+CgpSZWdhcmRzLAoKVHZydGtvCgo+ICsKPiArCQlpZ3RfYXNzZXJ0X2x0ZShj b3VudCwgNjQpOwo+ICsKPiArCQlwLmN0eF9pZCA9IGdlbV9jb250ZXh0X2NyZWF0ZShpOTE1KTsK PiArCQlwLnNpemUgPSAoc2l6ZW9mKHN0cnVjdCBpOTE1X2NvbnRleHRfcGFyYW1fZW5naW5lcykg Kwo+ICsJCQkgIChjb3VudCArIDEpICogc2l6ZW9mKCplbmdpbmVzLmVuZ2luZXMpKTsKPiArCj4g KwkJbWVtc2V0KCZlbmdpbmVzLCAwLCBzaXplb2YoZW5naW5lcykpOwo+ICsJCWVuZ2luZXMuZW5n aW5lc1swXS5lbmdpbmVfY2xhc3MgPSBJOTE1X0VOR0lORV9DTEFTU19JTlZBTElEOwo+ICsJCWVu Z2luZXMuZW5naW5lc1swXS5lbmdpbmVfaW5zdGFuY2UgPSBJOTE1X0VOR0lORV9DTEFTU19JTlZB TElEX05PTkU7Cj4gKwkJbWVtY3B5KGVuZ2luZXMuZW5naW5lcyArIDEsIGNpLCBjb3VudCAqIHNp emVvZigqY2kpKTsKPiArCQlnZW1fY29udGV4dF9zZXRfcGFyYW0oaTkxNSwgJnApOwo+ICsKPiAr CQllbmdpbmVzLmV4dGVuc2lvbnMgPSAtMXVsbDsKPiArCQlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2Nv bnRleHRfc2V0X3BhcmFtKGk5MTUsICZwKSwgLUVGQVVMVCk7Cj4gKwo+ICsJCWVuZ2luZXMuZXh0 ZW5zaW9ucyA9IDF1bGw7Cj4gKwkJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9wYXJh bShpOTE1LCAmcCksIC1FRkFVTFQpOwo+ICsKPiArCQltZW1zZXQoJmJhbGFuY2VyLCAwLCBzaXpl b2YoYmFsYW5jZXIpKTsKPiArCQliYWxhbmNlci5iYXNlLm5hbWUgPSBJOTE1X0NPTlRFWFRfRU5H SU5FU19FWFRfTE9BRF9CQUxBTkNFOwo+ICsJCWJhbGFuY2VyLm51bV9zaWJsaW5ncyA9IGNvdW50 Owo+ICsJCW1lbWNweShiYWxhbmNlci5lbmdpbmVzLCBjaSwgY291bnQgKiBzaXplb2YoKmNpKSk7 Cj4gKwo+ICsJCWVuZ2luZXMuZXh0ZW5zaW9ucyA9IHRvX3VzZXJfcG9pbnRlcigmYmFsYW5jZXIp Owo+ICsJCWdlbV9jb250ZXh0X3NldF9wYXJhbShpOTE1LCAmcCk7Cj4gKwo+ICsJCWJhbGFuY2Vy LmVuZ2luZV9pbmRleCA9IDE7Cj4gKwkJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9w YXJhbShpOTE1LCAmcCksIC1FRVhJU1QpOwo+ICsKPiArCQliYWxhbmNlci5lbmdpbmVfaW5kZXgg PSBjb3VudDsKPiArCQlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGk5MTUs ICZwKSwgLUVFWElTVCk7Cj4gKwo+ICsJCWJhbGFuY2VyLmVuZ2luZV9pbmRleCA9IGNvdW50ICsg MTsKPiArCQlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGk5MTUsICZwKSwg LUVJTlZBTCk7Cj4gKwo+ICsJCWJhbGFuY2VyLmVuZ2luZV9pbmRleCA9IDA7Cj4gKwkJZ2VtX2Nv bnRleHRfc2V0X3BhcmFtKGk5MTUsICZwKTsKPiArCj4gKwkJYmFsYW5jZXIuYmFzZS5uZXh0X2V4 dGVuc2lvbiA9IHRvX3VzZXJfcG9pbnRlcigmYmFsYW5jZXIpOwo+ICsJCWlndF9hc3NlcnRfZXEo X19nZW1fY29udGV4dF9zZXRfcGFyYW0oaTkxNSwgJnApLCAtRUVYSVNUKTsKPiArCj4gKwkJYmFs YW5jZXIuYmFzZS5uZXh0X2V4dGVuc2lvbiA9IC0xdWxsOwo+ICsJCWlndF9hc3NlcnRfZXEoX19n ZW1fY29udGV4dF9zZXRfcGFyYW0oaTkxNSwgJnApLCAtRUZBVUxUKTsKPiArCj4gKwkJaGFuZGxl ID0gZ2VtX2NyZWF0ZShpOTE1LCA0MDk2ICogMyk7Cj4gKwkJcHRyID0gZ2VtX21tYXBfX2d0dChp OTE1LCBoYW5kbGUsIDQwOTYgKiAzLCBQUk9UX1dSSVRFKTsKPiArCQlnZW1fY2xvc2UoaTkxNSwg aGFuZGxlKTsKPiArCj4gKwkJbWVtc2V0KCZlbmdpbmVzLCAwLCBzaXplb2YoZW5naW5lcykpOwo+ ICsJCWVuZ2luZXMuZW5naW5lc1swXS5lbmdpbmVfY2xhc3MgPSBJOTE1X0VOR0lORV9DTEFTU19J TlZBTElEOwo+ICsJCWVuZ2luZXMuZW5naW5lc1swXS5lbmdpbmVfaW5zdGFuY2UgPSBJOTE1X0VO R0lORV9DTEFTU19JTlZBTElEX05PTkU7Cj4gKwkJZW5naW5lcy5lbmdpbmVzWzFdLmVuZ2luZV9j bGFzcyA9IEk5MTVfRU5HSU5FX0NMQVNTX0lOVkFMSUQ7Cj4gKwkJZW5naW5lcy5lbmdpbmVzWzFd LmVuZ2luZV9pbnN0YW5jZSA9IEk5MTVfRU5HSU5FX0NMQVNTX0lOVkFMSURfTk9ORTsKPiArCQlt ZW1jcHkoZW5naW5lcy5lbmdpbmVzICsgMiwgY2ksIGNvdW50ICogc2l6ZW9mKGNpKSk7Cj4gKwkJ cC5zaXplID0gKHNpemVvZihzdHJ1Y3QgaTkxNV9jb250ZXh0X3BhcmFtX2VuZ2luZXMpICsKPiAr CQkJICAoY291bnQgKyAyKSAqIHNpemVvZigqZW5naW5lcy5lbmdpbmVzKSk7Cj4gKwkJZ2VtX2Nv bnRleHRfc2V0X3BhcmFtKGk5MTUsICZwKTsKPiArCj4gKwkJYmFsYW5jZXIuYmFzZS5uZXh0X2V4 dGVuc2lvbiA9IDA7Cj4gKwkJYmFsYW5jZXIuZW5naW5lX2luZGV4ID0gMTsKPiArCQllbmdpbmVz LmV4dGVuc2lvbnMgPSB0b191c2VyX3BvaW50ZXIoJmJhbGFuY2VyKTsKPiArCQlnZW1fY29udGV4 dF9zZXRfcGFyYW0oaTkxNSwgJnApOwo+ICsKPiArCQltZW1jcHkocHRyICsgNDA5NiAtIDgsICZi YWxhbmNlciwgc2l6ZW9mKGJhbGFuY2VyKSk7Cj4gKwkJbWVtY3B5KHB0ciArIDgxOTIgLSA4LCAm YmFsYW5jZXIsIHNpemVvZihiYWxhbmNlcikpOwo+ICsJCWJhbGFuY2VyLmVuZ2luZV9pbmRleCA9 IDA7Cj4gKwo+ICsJCWVuZ2luZXMuZXh0ZW5zaW9ucyA9IHRvX3VzZXJfcG9pbnRlcihwdHIpICsg NDA5NiAtIDg7Cj4gKwkJZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGk5MTUsICZwKTsKPiArCj4gKwkJ YmFsYW5jZXIuYmFzZS5uZXh0X2V4dGVuc2lvbiA9IGVuZ2luZXMuZXh0ZW5zaW9uczsKPiArCQll bmdpbmVzLmV4dGVuc2lvbnMgPSB0b191c2VyX3BvaW50ZXIoJmJhbGFuY2VyKTsKPiArCQlnZW1f Y29udGV4dF9zZXRfcGFyYW0oaTkxNSwgJnApOwo+ICsKPiArCQltdW5tYXAocHRyLCA0MDk2KTsK PiArCQlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGk5MTUsICZwKSwgLUVG QVVMVCk7Cj4gKwkJZW5naW5lcy5leHRlbnNpb25zID0gdG9fdXNlcl9wb2ludGVyKHB0cikgKyA0 MDk2IC0gODsKPiArCQlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGk5MTUs ICZwKSwgLUVGQVVMVCk7Cj4gKwo+ICsJCWVuZ2luZXMuZXh0ZW5zaW9ucyA9IHRvX3VzZXJfcG9p bnRlcihwdHIpICsgODE5MiAtIDg7Cj4gKwkJZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGk5MTUsICZw KTsKPiArCj4gKwkJYmFsYW5jZXIuYmFzZS5uZXh0X2V4dGVuc2lvbiA9IGVuZ2luZXMuZXh0ZW5z aW9uczsKPiArCQllbmdpbmVzLmV4dGVuc2lvbnMgPSB0b191c2VyX3BvaW50ZXIoJmJhbGFuY2Vy KTsKPiArCQlnZW1fY29udGV4dF9zZXRfcGFyYW0oaTkxNSwgJnApOwo+ICsKPiArCQltdW5tYXAo cHRyICsgODE5MiwgNDA5Nik7Cj4gKwkJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9w YXJhbShpOTE1LCAmcCksIC1FRkFVTFQpOwo+ICsJCWVuZ2luZXMuZXh0ZW5zaW9ucyA9IHRvX3Vz ZXJfcG9pbnRlcihwdHIpICsgODE5MiAtIDg7Cj4gKwkJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250 ZXh0X3NldF9wYXJhbShpOTE1LCAmcCksIC1FRkFVTFQpOwo+ICsKPiArCQltdW5tYXAocHRyICsg NDA5NiwgNDA5Nik7Cj4gKwo+ICsJCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgcC5jdHhfaWQp Owo+ICsJCWZyZWUoY2kpOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBraWNrX2t0aHJl YWRzKHZvaWQpCj4gK3sKPiArCXVzbGVlcCgyMCAqIDEwMDApOyAvKiAyMG1zIHNob3VsZCBiZSBl bm91Z2ggZm9yIGtzb2Z0aXJxZCEgKi8KPiArfQo+ICsKPiArc3RhdGljIGRvdWJsZSBtZWFzdXJl X2xvYWQoaW50IHBtdSwgaW50IHBlcmlvZF91cykKPiArewo+ICsJdWludDY0X3QgZGF0YVsyXTsK PiArCXVpbnQ2NF90IGRfdCwgZF92Owo+ICsKPiArCWtpY2tfa3RocmVhZHMoKTsKPiArCj4gKwlp Z3RfYXNzZXJ0X2VxKHJlYWQocG11LCBkYXRhLCBzaXplb2YoZGF0YSkpLCBzaXplb2YoZGF0YSkp Owo+ICsJZF92ID0gLWRhdGFbMF07Cj4gKwlkX3QgPSAtZGF0YVsxXTsKPiArCj4gKwl1c2xlZXAo cGVyaW9kX3VzKTsKPiArCj4gKwlpZ3RfYXNzZXJ0X2VxKHJlYWQocG11LCBkYXRhLCBzaXplb2Yo ZGF0YSkpLCBzaXplb2YoZGF0YSkpOwo+ICsJZF92ICs9IGRhdGFbMF07Cj4gKwlkX3QgKz0gZGF0 YVsxXTsKPiArCj4gKwlyZXR1cm4gZF92IC8gKGRvdWJsZSlkX3Q7Cj4gK30KPiArCj4gK3N0YXRp YyBkb3VibGUgbWVhc3VyZV9taW5fbG9hZChpbnQgcG11LCB1bnNpZ25lZCBpbnQgbnVtLCBpbnQg cGVyaW9kX3VzKQo+ICt7Cj4gKwl1aW50NjRfdCBkYXRhWzIgKyBudW1dOwo+ICsJdWludDY0X3Qg ZF90LCBkX3ZbbnVtXTsKPiArCXVpbnQ2NF90IG1pbiA9IC0xLCBtYXggPSAwOwo+ICsKPiArCWtp Y2tfa3RocmVhZHMoKTsKPiArCj4gKwlpZ3RfYXNzZXJ0X2VxKHJlYWQocG11LCBkYXRhLCBzaXpl b2YoZGF0YSkpLCBzaXplb2YoZGF0YSkpOwo+ICsJZm9yICh1bnNpZ25lZCBpbnQgbiA9IDA7IG4g PCBudW07IG4rKykKPiArCQlkX3Zbbl0gPSAtZGF0YVsyICsgbl07Cj4gKwlkX3QgPSAtZGF0YVsx XTsKPiArCj4gKwl1c2xlZXAocGVyaW9kX3VzKTsKPiArCj4gKwlpZ3RfYXNzZXJ0X2VxKHJlYWQo cG11LCBkYXRhLCBzaXplb2YoZGF0YSkpLCBzaXplb2YoZGF0YSkpOwo+ICsKPiArCWRfdCArPSBk YXRhWzFdOwo+ICsJZm9yICh1bnNpZ25lZCBpbnQgbiA9IDA7IG4gPCBudW07IG4rKykgewo+ICsJ CWRfdltuXSArPSBkYXRhWzIgKyBuXTsKPiArCQlpZ3RfZGVidWcoImVuZ2luZVslZF06ICUuMWYl JVxuIiwKPiArCQkJICBuLCBkX3Zbbl0gLyAoZG91YmxlKWRfdCAqIDEwMCk7Cj4gKwkJaWYgKGRf dltuXSA8IG1pbikKPiArCQkJbWluID0gZF92W25dOwo+ICsJCWlmIChkX3Zbbl0gPiBtYXgpCj4g KwkJCW1heCA9IGRfdltuXTsKPiArCX0KPiArCj4gKwlpZ3RfZGVidWcoImVsYXBzZWQ6ICUiUFJJ dTY0Im5zLCBsb2FkIFslLjFmLCAlLjFmXSUlXG4iLAo+ICsJCSAgZF90LCBtaW4gLyAoZG91Ymxl KWRfdCAqIDEwMCwgIG1heCAvIChkb3VibGUpZF90ICogMTAwKTsKPiArCj4gKwlyZXR1cm4gbWlu IC8gKGRvdWJsZSlkX3Q7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGNoZWNrX2luZGl2aWR1YWxf ZW5naW5lKGludCBpOTE1LAo+ICsJCQkJICAgIHVpbnQzMl90IGN0eCwKPiArCQkJCSAgICBjb25z dCBzdHJ1Y3QgaTkxNV9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgKmNpLAo+ICsJCQkJICAgIGludCBp ZHgpCj4gK3sKPiArCWlndF9zcGluX3QgKnNwaW47Cj4gKwlkb3VibGUgbG9hZDsKPiArCWludCBw bXU7Cj4gKwo+ICsJcG11ID0gcGVyZl9pOTE1X29wZW4oSTkxNV9QTVVfRU5HSU5FX0JVU1koY2lb aWR4XS5lbmdpbmVfY2xhc3MsCj4gKwkJCQkJCSAgY2lbaWR4XS5lbmdpbmVfaW5zdGFuY2UpKTsK PiArCj4gKwlzcGluID0gaWd0X3NwaW5fbmV3KGk5MTUsIC5jdHggPSBjdHgsIC5lbmdpbmUgPSBp ZHggKyAxKTsKPiArCWxvYWQgPSBtZWFzdXJlX2xvYWQocG11LCAxMDAwMCk7Cj4gKwlpZ3Rfc3Bp bl9mcmVlKGk5MTUsIHNwaW4pOwo+ICsKPiArCWNsb3NlKHBtdSk7Cj4gKwo+ICsJaWd0X2Fzc2Vy dF9mKGxvYWQgPiAwLjkwLAo+ICsJCSAgICAgImVuZ2luZSAlZCAoY2xhc3M6aW5zdGFuY2UgJWQ6 JWQpIHdhcyBmb3VuZCB0byBiZSBvbmx5ICUuMWYlJSBidXN5XG4iLAo+ICsJCSAgICAgaWR4LCBj aVtpZHhdLmVuZ2luZV9jbGFzcywgY2lbaWR4XS5lbmdpbmVfaW5zdGFuY2UsIGxvYWQqMTAwKTsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgaW5kaXZpZHVhbChpbnQgaTkxNSkKPiArewo+ICsJdWlu dDMyX3QgY3R4Owo+ICsKPiArCS8qCj4gKwkgKiBJOTE1X0NPTlRFWFRfUEFSQU1fRU5HSU5FIGFs bG93cyB1cyB0byBpbmRleCBpbnRvIHRoZSB1c2VyCj4gKwkgKiBzdXBwbGllZCBhcnJheSBmcm9t IGdlbV9leGVjYnVmKCkuIE91ciBjaGVjayBpcyB0byBidWlsZCB0aGUKPiArCSAqIGN0eC0+ZW5n aW5lW10gd2l0aCB2YXJpb3VzIGRpZmZlcmVudCBlbmdpbmUgY2xhc3NlcywgZmVlZCBpbgo+ICsJ ICogYSBzcGlubmVyIGFuZCB0aGVuIGFzayBwbXUgdG8gY29uZmlybSBpdCB0aGUgZXhwZWN0ZWQg ZW5naW5lCj4gKwkgKiB3YXMgYnVzeS4KPiArCSAqLwo+ICsKPiArCWN0eCA9IGdlbV9jb250ZXh0 X2NyZWF0ZShpOTE1KTsKPiArCj4gKwlmb3IgKGludCBjbGFzcyA9IDA7IGNsYXNzIDwgMzI7IGNs YXNzKyspIHsKPiArCQlzdHJ1Y3QgaTkxNV9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgKmNpOwo+ICsJ CXVuc2lnbmVkIGludCBjb3VudDsKPiArCj4gKwkJY2kgPSBsaXN0X2VuZ2luZXMoaTkxNSwgMXUg PDwgY2xhc3MsICZjb3VudCk7Cj4gKwkJaWYgKCFjaSkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJ CWZvciAoaW50IHBhc3MgPSAwOyBwYXNzIDwgY291bnQ7IHBhc3MrKykgeyAvKiBhcHByb3guIGNv dW50ISAqLwo+ICsJCQlpZ3RfYXNzZXJ0KHNpemVvZigqY2kpID09IHNpemVvZihpbnQpKTsKPiAr CQkJaWd0X3Blcm11dGVfYXJyYXkoY2ksIGNvdW50LCBpZ3RfZXhjaGFuZ2VfaW50KTsKPiArCQkJ c2V0X2xvYWRfYmFsYW5jZXIoaTkxNSwgY3R4LCBjaSwgY291bnQpOwo+ICsJCQlmb3IgKHVuc2ln bmVkIGludCBuID0gMDsgbiA8IGNvdW50OyBuKyspCj4gKwkJCQljaGVja19pbmRpdmlkdWFsX2Vu Z2luZShpOTE1LCBjdHgsIGNpLCBuKTsKPiArCQl9Cj4gKwo+ICsJCWZyZWUoY2kpOwo+ICsJfQo+ ICsKPiArCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgY3R4KTsKPiArCWdlbV9xdWllc2NlbnRf Z3B1KGk5MTUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpbmRpY2VzKGludCBpOTE1KQo+ICt7 Cj4gKwlJOTE1X0RFRklORV9DT05URVhUX1BBUkFNX0VOR0lORVMoZW5naW5lcywgSTkxNV9FWEVD X1JJTkdfTUFTSyArIDEpOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIHAg PSB7Cj4gKwkJLmN0eF9pZCA9IGdlbV9jb250ZXh0X2NyZWF0ZShpOTE1KSwKPiArCQkucGFyYW0g PSBJOTE1X0NPTlRFWFRfUEFSQU1fRU5HSU5FUywKPiArCQkudmFsdWUgPSB0b191c2VyX3BvaW50 ZXIoJmVuZ2luZXMpCj4gKwl9Owo+ICsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmpl Y3QyIGJhdGNoID0gewo+ICsJCS5oYW5kbGUgPSBiYXRjaF9jcmVhdGUoaTkxNSksCj4gKwl9Owo+ ICsKPiArCXVuc2lnbmVkIGludCBuZW5naW5lcyA9IDA7Cj4gKwl2b2lkICpiYWxhbmNlcnMgPSBO VUxMOwo+ICsKPiArCS8qCj4gKwkgKiBXZSBjYW4gcG9wdWxhdGUgb3VyIGVuZ2luZSBtYXAgd2l0 aCBtdWx0aXBsZSB2aXJ0dWFsIGVuZ2luZXMuCj4gKwkgKiBEbyBzby4KPiArCSAqLwo+ICsKPiAr CWZvciAoaW50IGNsYXNzID0gMDsgY2xhc3MgPCAzMjsgY2xhc3MrKykgewo+ICsJCXN0cnVjdCBp OTE1X2VuZ2luZV9jbGFzc19pbnN0YW5jZSAqY2k7Cj4gKwkJdW5zaWduZWQgaW50IGNvdW50Owo+ ICsKPiArCQljaSA9IGxpc3RfZW5naW5lcyhpOTE1LCAxdSA8PCBjbGFzcywgJmNvdW50KTsKPiAr CQlpZiAoIWNpKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJZm9yIChpbnQgbiA9IDA7IG4gPCBj b3VudDsgbisrKSB7Cj4gKwkJCUk5MTVfREVGSU5FX0NPTlRFWFRfRU5HSU5FU19MT0FEX0JBTEFO Q0UoKmJhbGFuY2VyLAo+ICsJCQkJCQkJCSBjb3VudCk7Cj4gKwo+ICsJCQllbmdpbmVzLmVuZ2lu ZXNbbmVuZ2luZXNdLmVuZ2luZV9jbGFzcyA9Cj4gKwkJCQlJOTE1X0VOR0lORV9DTEFTU19JTlZB TElEOwo+ICsJCQllbmdpbmVzLmVuZ2luZXNbbmVuZ2luZXNdLmVuZ2luZV9pbnN0YW5jZSA9Cj4g KwkJCQlJOTE1X0VOR0lORV9DTEFTU19JTlZBTElEX05PTkU7Cj4gKwo+ICsJCQliYWxhbmNlciA9 IGNhbGxvYyhzaXplb2YoKmJhbGFuY2VyKSwgMSk7Cj4gKwkJCWlndF9hc3NlcnQoYmFsYW5jZXIp Owo+ICsKPiArCQkJYmFsYW5jZXItPmJhc2UubmFtZSA9Cj4gKwkJCQlJOTE1X0NPTlRFWFRfRU5H SU5FU19FWFRfTE9BRF9CQUxBTkNFOwo+ICsJCQliYWxhbmNlci0+YmFzZS5uZXh0X2V4dGVuc2lv biA9Cj4gKwkJCQl0b191c2VyX3BvaW50ZXIoYmFsYW5jZXJzKTsKPiArCQkJYmFsYW5jZXJzID0g YmFsYW5jZXI7Cj4gKwo+ICsJCQliYWxhbmNlci0+ZW5naW5lX2luZGV4ID0gbmVuZ2luZXMrKzsK PiArCQkJYmFsYW5jZXItPm51bV9zaWJsaW5ncyA9IGNvdW50Owo+ICsKPiArCQkJbWVtY3B5KGJh bGFuY2VyLT5lbmdpbmVzLAo+ICsJCQkgICAgICAgY2ksIGNvdW50ICogc2l6ZW9mKCpjaSkpOwo+ ICsJCX0KPiArCQlmcmVlKGNpKTsKPiArCX0KPiArCj4gKwlpZ3RfcmVxdWlyZShiYWxhbmNlcnMp Owo+ICsJZW5naW5lcy5leHRlbnNpb25zID0gdG9fdXNlcl9wb2ludGVyKGJhbGFuY2Vycyk7Cj4g KwlwLnNpemUgPSAoc2l6ZW9mKHN0cnVjdCBpOTE1X2VuZ2luZV9jbGFzc19pbnN0YW5jZSkgKiBu ZW5naW5lcyArCj4gKwkJICBzaXplb2Yoc3RydWN0IGk5MTVfY29udGV4dF9wYXJhbV9lbmdpbmVz KSk7Cj4gKwlnZW1fY29udGV4dF9zZXRfcGFyYW0oaTkxNSwgJnApOwo+ICsKPiArCWZvciAodW5z aWduZWQgaW50IG4gPSAwOyBuIDwgbmVuZ2luZXM7IG4rKykgewo+ICsJCXN0cnVjdCBkcm1faTkx NV9nZW1fZXhlY2J1ZmZlcjIgZWIgPSB7Cj4gKwkJCS5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9p bnRlcigmYmF0Y2gpLAo+ICsJCQkuYnVmZmVyX2NvdW50ID0gMSwKPiArCQkJLmZsYWdzID0gbiwK PiArCQkJLnJzdmQxID0gcC5jdHhfaWQsCj4gKwkJfTsKPiArCQlpZ3RfZGVidWcoIkV4ZWN1dGlu ZyBvbiBpbmRleD0lZFxuIiwgbik7Cj4gKwkJZ2VtX2V4ZWNidWYoaTkxNSwgJmViKTsKPiArCX0K PiArCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgcC5jdHhfaWQpOwo+ICsKPiArCWdlbV9zeW5j KGk5MTUsIGJhdGNoLmhhbmRsZSk7Cj4gKwlnZW1fY2xvc2UoaTkxNSwgYmF0Y2guaGFuZGxlKTsK PiArCj4gKwl3aGlsZSAoYmFsYW5jZXJzKSB7Cj4gKwkJc3RydWN0IGk5MTVfY29udGV4dF9lbmdp bmVzX2xvYWRfYmFsYW5jZSAqYiwgKm47Cj4gKwo+ICsJCWIgPSBiYWxhbmNlcnM7Cj4gKwkJbiA9 IGZyb21fdXNlcl9wb2ludGVyKGItPmJhc2UubmV4dF9leHRlbnNpb24pOwo+ICsJCWZyZWUoYik7 Cj4gKwo+ICsJCWJhbGFuY2VycyA9IG47Cj4gKwl9Cj4gKwo+ICsJZ2VtX3F1aWVzY2VudF9ncHUo aTkxNSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGJ1c3koaW50IGk5MTUpCj4gK3sKPiArCXVp bnQzMl90IHNjcmF0Y2ggPSBnZW1fY3JlYXRlKGk5MTUsIDQwOTYpOwo+ICsKPiArCS8qCj4gKwkg KiBDaGVjayB0aGF0IHZpcnR1YWwgZW5naW5lcyBhcmUgcmVwb3J0ZWQgdmlhIEdFTV9CVVNZLgo+ ICsJICoKPiArCSAqIFdoZW4gcnVubmluZywgdGhlIGJhdGNoIHdpbGwgYmUgb24gdGhlIHJlYWwg ZW5naW5lIGFuZCByZXBvcnQKPiArCSAqIHRoZSBhY3R1YWwgY2xhc3MuCj4gKwkgKgo+ICsJICog UHJpb3IgdG8gcnVubmluZywgaWYgdGhlIGxvYWQtYmFsYW5jZXIgaXMgYWNyb3NzIG11bHRpcGxl Cj4gKwkgKiBjbGFzc2VzIHdlIGRvbid0IGtub3cgd2hpY2ggZW5naW5lIHRoZSBiYXRjaCB3aWxs Cj4gKwkgKiBleGVjdXRlIG9uLCBzbyB3ZSByZXBvcnQgdGhlbSBhbGwhCj4gKwkgKgo+ICsJICog SG93ZXZlciwgYXMgd2Ugb25seSBzdXBwb3J0IChhbmQgdGVzdCkgY3JlYXRpbmcgYSBsb2FkLWJh bGFuY2VyCj4gKwkgKiBmcm9tIGVuZ2luZXMgb2Ygb25seSBvbmUgY2xhc3MsIHRoYXQgY2FuIGJl IHByb3BhZ2F0ZWQgYWNjdXJhdGVseQo+ICsJICogdGhyb3VnaCB0byBHRU1fQlVTWS4KPiArCSAq Lwo+ICsKPiArCWZvciAoaW50IGNsYXNzID0gMDsgY2xhc3MgPCAxNjsgY2xhc3MrKykgewo+ICsJ CXN0cnVjdCBkcm1faTkxNV9nZW1fYnVzeSBidXN5Owo+ICsJCXN0cnVjdCBpOTE1X2VuZ2luZV9j bGFzc19pbnN0YW5jZSAqY2k7Cj4gKwkJdW5zaWduZWQgaW50IGNvdW50Owo+ICsJCWlndF9zcGlu X3QgKnNwaW5bMl07Cj4gKwkJdWludDMyX3QgY3R4Owo+ICsKPiArCQljaSA9IGxpc3RfZW5naW5l cyhpOTE1LCAxdSA8PCBjbGFzcywgJmNvdW50KTsKPiArCQlpZiAoIWNpKQo+ICsJCQljb250aW51 ZTsKPiArCj4gKwkJY3R4ID0gbG9hZF9iYWxhbmNlcl9jcmVhdGUoaTkxNSwgY2ksIGNvdW50KTsK PiArCQlmcmVlKGNpKTsKPiArCj4gKwkJc3BpblswXSA9IF9faWd0X3NwaW5fbmV3KGk5MTUsCj4g KwkJCQkJIC5jdHggPSBjdHgsCj4gKwkJCQkJIC5mbGFncyA9IElHVF9TUElOX1BPTExfUlVOKTsK PiArCQlzcGluWzFdID0gX19pZ3Rfc3Bpbl9uZXcoaTkxNSwKPiArCQkJCQkgLmN0eCA9IGN0eCwK PiArCQkJCQkgLmRlcGVuZGVuY3kgPSBzY3JhdGNoKTsKPiArCj4gKwkJaWd0X3NwaW5fYnVzeXdh aXRfdW50aWxfc3RhcnRlZChzcGluWzBdKTsKPiArCj4gKwkJLyogUnVubmluZzogYWN0dWFsIGNs YXNzICovCj4gKwkJYnVzeS5oYW5kbGUgPSBzcGluWzBdLT5oYW5kbGU7Cj4gKwkJZG9faW9jdGwo aTkxNSwgRFJNX0lPQ1RMX0k5MTVfR0VNX0JVU1ksICZidXN5KTsKPiArCQlpZ3RfYXNzZXJ0X2Vx X3UzMihidXN5LmJ1c3ksIDF1IDw8IChjbGFzcyArIDE2KSk7Cj4gKwo+ICsJCS8qIFF1ZXVlZChy ZWFkKTogZXhwZWN0ZWQgY2xhc3MgKi8KPiArCQlidXN5LmhhbmRsZSA9IHNwaW5bMV0tPmhhbmRs ZTsKPiArCQlkb19pb2N0bChpOTE1LCBEUk1fSU9DVExfSTkxNV9HRU1fQlVTWSwgJmJ1c3kpOwo+ ICsJCWlndF9hc3NlcnRfZXFfdTMyKGJ1c3kuYnVzeSwgMXUgPDwgKGNsYXNzICsgMTYpKTsKPiAr Cj4gKwkJLyogUXVldWVkKHdyaXRlKTogZXhwZWN0ZWQgY2xhc3MgKi8KPiArCQlidXN5LmhhbmRs ZSA9IHNjcmF0Y2g7Cj4gKwkJZG9faW9jdGwoaTkxNSwgRFJNX0lPQ1RMX0k5MTVfR0VNX0JVU1ks ICZidXN5KTsKPiArCQlpZ3RfYXNzZXJ0X2VxX3UzMihidXN5LmJ1c3ksCj4gKwkJCQkgICgxdSA8 PCAoY2xhc3MgKyAxNikpIHwgKGNsYXNzICsgMSkpOwo+ICsKPiArCQlpZ3Rfc3Bpbl9mcmVlKGk5 MTUsIHNwaW5bMV0pOwo+ICsJCWlndF9zcGluX2ZyZWUoaTkxNSwgc3BpblswXSk7Cj4gKwo+ICsJ CWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgY3R4KTsKPiArCX0KPiArCj4gKwlnZW1fY2xvc2Uo aTkxNSwgc2NyYXRjaCk7Cj4gKwlnZW1fcXVpZXNjZW50X2dwdShpOTE1KTsKPiArfQo+ICsKPiAr c3RhdGljIGludCBhZGRfcG11KGludCBwbXUsIGNvbnN0IHN0cnVjdCBpOTE1X2VuZ2luZV9jbGFz c19pbnN0YW5jZSAqY2kpCj4gK3sKPiArCXJldHVybiBwZXJmX2k5MTVfb3Blbl9ncm91cChJOTE1 X1BNVV9FTkdJTkVfQlVTWShjaS0+ZW5naW5lX2NsYXNzLAo+ICsJCQkJCQkJIGNpLT5lbmdpbmVf aW5zdGFuY2UpLAo+ICsJCQkJICAgIHBtdSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGZ1bGwo aW50IGk5MTUsIHVuc2lnbmVkIGludCBmbGFncykKPiArI2RlZmluZSBQVUxTRSAweDEKPiArI2Rl ZmluZSBMQVRFIDB4Mgo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBi YXRjaCA9IHsKPiArCQkuaGFuZGxlID0gYmF0Y2hfY3JlYXRlKGk5MTUpLAo+ICsJfTsKPiArCj4g KwlpZiAoZmxhZ3MgJiBMQVRFKQo+ICsJCWlndF9yZXF1aXJlX3N3X3N5bmMoKTsKPiArCj4gKwkv Kgo+ICsJICogSTkxNV9DT05URVhUX1BBUkFNX0VOR0lORSBjaGFuZ2VzIHRoZSBtZWFuaW5nIG9m IGVuZ2luZSBzZWxlY3RvciBpbgo+ICsJICogZXhlY2J1ZiB0byB1dGlsaXplIG91ciBvd24gbWFw LCBpbnRvIHdoaWNoIHdlIHJlcGxhY2UgSTkxNV9FWEVDX0RFRkFVTFQKPiArCSAqIHRvIHByb3Zp ZGUgYW4gYXV0b21hdGljIHNlbGVjdGlvbiBmcm9tIHRoZSBvdGhlciBjdHgtPmVuZ2luZVtdLiBJ dAo+ICsJICogZW1wbG95cyBsb2FkLWJhbGFuY2luZyB0byBldmVubHkgZGlzdHJpYnV0ZSB0aGUg d29ya2xvYWQgdGhlCj4gKwkgKiBhcnJheS4gSWYgd2Ugc3VibWl0IE4gc3Bpbm5lcnMsIHdlIGV4 cGVjdCB0aGVtIHRvIGJlIHNpbXVsdGFuZW91c2x5Cj4gKwkgKiBydW5uaW5nIGFjcm9zcyBOIGVu Z2luZXMgYW5kIHVzZSBQTVUgdG8gY29uZmlybSB0aGF0IHRoZSBlbnRpcmUKPiArCSAqIHNldCBv ZiBlbmdpbmVzIGFyZSBidXN5Lgo+ICsJICoKPiArCSAqIFdlIGNvbXBsaWNhdGUgbWF0dGVycyBi eSBpbnRlcnNwZXJzaW5nIHNob3J0LWxpdmVkIHRhc2tzIHRvCj4gKwkgKiBjaGFsbGVuZ2UgdGhl IGtlcm5lbCB0byBzZWFyY2ggZm9yIHNwYWNlIGluIHdoaWNoIHRvIGluc2VydCBuZXcKPiArCSAq IGJhdGNoZXMuCj4gKwkgKi8KPiArCj4gKwlmb3IgKGludCBjbGFzcyA9IDA7IGNsYXNzIDwgMzI7 IGNsYXNzKyspIHsKPiArCQlzdHJ1Y3QgaTkxNV9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgKmNpOwo+ ICsJCWlndF9zcGluX3QgKnNwaW4gPSBOVUxMOwo+ICsJCUlHVF9DT1JLX0ZFTkNFKGNvcmspOwo+ ICsJCXVuc2lnbmVkIGludCBjb3VudDsKPiArCQlkb3VibGUgbG9hZDsKPiArCQlpbnQgZmVuY2Ug PSAtMTsKPiArCQlpbnQgKnBtdTsKPiArCj4gKwkJY2kgPSBsaXN0X2VuZ2luZXMoaTkxNSwgMXUg PDwgY2xhc3MsICZjb3VudCk7Cj4gKwkJaWYgKCFjaSkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJ CXBtdSA9IG1hbGxvYyhzaXplb2YoKnBtdSkgKiBjb3VudCk7Cj4gKwkJaWd0X2Fzc2VydChwbXUp Owo+ICsKPiArCQlpZiAoZmxhZ3MgJiBMQVRFKQo+ICsJCQlmZW5jZSA9IGlndF9jb3JrX3BsdWco JmNvcmssIGk5MTUpOwo+ICsKPiArCQlwbXVbMF0gPSAtMTsKPiArCQlmb3IgKHVuc2lnbmVkIGlu dCBuID0gMDsgbiA8IGNvdW50OyBuKyspIHsKPiArCQkJdWludDMyX3QgY3R4Owo+ICsKPiArCQkJ cG11W25dID0gYWRkX3BtdShwbXVbMF0sICZjaVtuXSk7Cj4gKwo+ICsJCQlpZiAoZmxhZ3MgJiBQ VUxTRSkgewo+ICsJCQkJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBlYiA9IHsKPiAr CQkJCQkuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIoJmJhdGNoKSwKPiArCQkJCQkuYnVm ZmVyX2NvdW50ID0gMSwKPiArCQkJCQkucnN2ZDIgPSBmZW5jZSwKPiArCQkJCQkuZmxhZ3MgPSBm bGFncyAmIExBVEUgPyBJOTE1X0VYRUNfRkVOQ0VfSU4gOiAwLAo+ICsJCQkJfTsKPiArCQkJCWdl bV9leGVjYnVmKGk5MTUsICZlYik7Cj4gKwkJCX0KPiArCj4gKwkJCS8qCj4gKwkJCSAqIEVhY2gg c3Bpbm5lciBuZWVkcyB0byBiZSBvbmUgYSBuZXcgdGltZWxpbmUsCj4gKwkJCSAqIG90aGVyd2lz ZSB0aGV5IHdpbGwganVzdCBzaXQgaW4gdGhlIHNpbmdsZSBxdWV1ZQo+ICsJCQkgKiBhbmQgbm90 IHJ1biBjb25jdXJyZW50bHkuCj4gKwkJCSAqLwo+ICsJCQljdHggPSBsb2FkX2JhbGFuY2VyX2Ny ZWF0ZShpOTE1LCBjaSwgY291bnQpOwo+ICsKPiArCQkJaWYgKHNwaW4gPT0gTlVMTCkgewo+ICsJ CQkJc3BpbiA9IF9faWd0X3NwaW5fbmV3KGk5MTUsIC5jdHggPSBjdHgpOwo+ICsJCQl9IGVsc2Ug ewo+ICsJCQkJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBlYiA9IHsKPiArCQkJCQku YnVmZmVyc19wdHIgPSBzcGluLT5leGVjYnVmLmJ1ZmZlcnNfcHRyLAo+ICsJCQkJCS5idWZmZXJf Y291bnQgPSBzcGluLT5leGVjYnVmLmJ1ZmZlcl9jb3VudCwKPiArCQkJCQkucnN2ZDEgPSBjdHgs Cj4gKwkJCQkJLnJzdmQyID0gZmVuY2UsCj4gKwkJCQkJLmZsYWdzID0gZmxhZ3MgJiBMQVRFID8g STkxNV9FWEVDX0ZFTkNFX0lOIDogMCwKPiArCQkJCX07Cj4gKwkJCQlnZW1fZXhlY2J1ZihpOTE1 LCAmZWIpOwo+ICsJCQl9Cj4gKwo+ICsJCQlnZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIGN0eCk7 Cj4gKwkJfQo+ICsKPiArCQlpZiAoZmxhZ3MgJiBMQVRFKSB7Cj4gKwkJCWlndF9jb3JrX3VucGx1 ZygmY29yayk7Cj4gKwkJCWNsb3NlKGZlbmNlKTsKPiArCQl9Cj4gKwo+ICsJCWxvYWQgPSBtZWFz dXJlX21pbl9sb2FkKHBtdVswXSwgY291bnQsIDEwMDAwKTsKPiArCQlpZ3Rfc3Bpbl9mcmVlKGk5 MTUsIHNwaW4pOwo+ICsKPiArCQljbG9zZShwbXVbMF0pOwo+ICsJCWZyZWUocG11KTsKPiArCj4g KwkJZnJlZShjaSk7Cj4gKwo+ICsJCWlndF9hc3NlcnRfZihsb2FkID4gMC45MCwKPiArCQkJICAg ICAibWluaW11bSBsb2FkIGZvciAlZCB4IGNsYXNzOiVkIHdhcyBmb3VuZCB0byBiZSBvbmx5ICUu MWYlJSBidXN5XG4iLAo+ICsJCQkgICAgIGNvdW50LCBjbGFzcywgbG9hZCoxMDApOwo+ICsJCWdl bV9xdWllc2NlbnRfZ3B1KGk5MTUpOwo+ICsJfQo+ICsKPiArCWdlbV9jbG9zZShpOTE1LCBiYXRj aC5oYW5kbGUpOwo+ICsJZ2VtX3F1aWVzY2VudF9ncHUoaTkxNSk7Cj4gK30KPiArCj4gK3N0YXRp YyBjb25zdCBjaGFyICpjbGFzc190b19zdHIoaW50IGNsYXNzKQo+ICt7Cj4gKwljb25zdCBjaGFy ICpzdHJbXSA9IHsKPiArCQlbSTkxNV9FTkdJTkVfQ0xBU1NfUkVOREVSXSA9ICJyY3MiLAo+ICsJ CVtJOTE1X0VOR0lORV9DTEFTU19DT1BZXSA9ICJiY3MiLAo+ICsJCVtJOTE1X0VOR0lORV9DTEFT U19WSURFT10gPSAidmNzIiwKPiArCQlbSTkxNV9FTkdJTkVfQ0xBU1NfVklERU9fRU5IQU5DRV0g PSAidmVjcyIsCj4gKwl9Owo+ICsKPiArCWlmIChjbGFzcyA8IEFSUkFZX1NJWkUoc3RyKSkKPiAr CQlyZXR1cm4gc3RyW2NsYXNzXTsKPiArCj4gKwlyZXR1cm4gInVuayI7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIG5vcChpbnQgaTkxNSkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVj X29iamVjdDIgYmF0Y2ggPSB7Cj4gKwkJLmhhbmRsZSA9IGJhdGNoX2NyZWF0ZShpOTE1KSwKPiAr CX07Cj4gKwo+ICsJZm9yIChpbnQgY2xhc3MgPSAwOyBjbGFzcyA8IDMyOyBjbGFzcysrKSB7Cj4g KwkJc3RydWN0IGk5MTVfZW5naW5lX2NsYXNzX2luc3RhbmNlICpjaTsKPiArCQl1bnNpZ25lZCBp bnQgY291bnQ7Cj4gKwkJdWludDMyX3QgY3R4Owo+ICsKPiArCQljaSA9IGxpc3RfZW5naW5lcyhp OTE1LCAxdSA8PCBjbGFzcywgJmNvdW50KTsKPiArCQlpZiAoIWNpKQo+ICsJCQljb250aW51ZTsK PiArCj4gKwkJY3R4ID0gbG9hZF9iYWxhbmNlcl9jcmVhdGUoaTkxNSwgY2ksIGNvdW50KTsKPiAr Cj4gKwkJZm9yIChpbnQgbiA9IDA7IG4gPCBjb3VudDsgbisrKSB7Cj4gKwkJCXN0cnVjdCBkcm1f aTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZiA9IHsKPiArCQkJCS5idWZmZXJzX3B0ciA9IHRv X3VzZXJfcG9pbnRlcigmYmF0Y2gpLAo+ICsJCQkJLmJ1ZmZlcl9jb3VudCA9IDEsCj4gKwkJCQku ZmxhZ3MgPSBuICsgMSwKPiArCQkJCS5yc3ZkMSA9IGN0eCwKPiArCQkJfTsKPiArCQkJc3RydWN0 IHRpbWVzcGVjIHR2ID0ge307Cj4gKwkJCXVuc2lnbmVkIGxvbmcgbm9wczsKPiArCQkJZG91Ymxl IHQ7Cj4gKwo+ICsJCQlpZ3RfbnNlY19lbGFwc2VkKCZ0dik7Cj4gKwkJCW5vcHMgPSAwOwo+ICsJ CQlkbyB7Cj4gKwkJCQlmb3IgKGludCByID0gMDsgciA8IDEwMjQ7IHIrKykKPiArCQkJCQlnZW1f ZXhlY2J1ZihpOTE1LCAmZXhlY2J1Zik7Cj4gKwkJCQlub3BzICs9IDEwMjQ7Cj4gKwkJCX0gd2hp bGUgKGlndF9zZWNvbmRzX2VsYXBzZWQoJnR2KSA8IDIpOwo+ICsJCQlnZW1fc3luYyhpOTE1LCBi YXRjaC5oYW5kbGUpOwo+ICsKPiArCQkJdCA9IGlndF9uc2VjX2VsYXBzZWQoJnR2KSAqIDFlLTMg LyBub3BzOwo+ICsJCQlpZ3RfaW5mbygiJXM6JWQgJS4zZnVzXG4iLCBjbGFzc190b19zdHIoY2xh c3MpLCBuLCB0KTsKPiArCQl9Cj4gKwo+ICsJCXsKPiArCQkJc3RydWN0IGRybV9pOTE1X2dlbV9l eGVjYnVmZmVyMiBleGVjYnVmID0gewo+ICsJCQkJLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2lu dGVyKCZiYXRjaCksCj4gKwkJCQkuYnVmZmVyX2NvdW50ID0gMSwKPiArCQkJCS5yc3ZkMSA9IGN0 eCwKPiArCQkJfTsKPiArCQkJc3RydWN0IHRpbWVzcGVjIHR2ID0ge307Cj4gKwkJCXVuc2lnbmVk IGxvbmcgbm9wczsKPiArCQkJZG91YmxlIHQ7Cj4gKwo+ICsJCQlpZ3RfbnNlY19lbGFwc2VkKCZ0 dik7Cj4gKwkJCW5vcHMgPSAwOwo+ICsJCQlkbyB7Cj4gKwkJCQlmb3IgKGludCByID0gMDsgciA8 IDEwMjQ7IHIrKykKPiArCQkJCQlnZW1fZXhlY2J1ZihpOTE1LCAmZXhlY2J1Zik7Cj4gKwkJCQlu b3BzICs9IDEwMjQ7Cj4gKwkJCX0gd2hpbGUgKGlndF9zZWNvbmRzX2VsYXBzZWQoJnR2KSA8IDIp Owo+ICsJCQlnZW1fc3luYyhpOTE1LCBiYXRjaC5oYW5kbGUpOwo+ICsKPiArCQkJdCA9IGlndF9u c2VjX2VsYXBzZWQoJnR2KSAqIDFlLTMgLyBub3BzOwo+ICsJCQlpZ3RfaW5mbygiJXM6KiAlLjNm dXNcbiIsIGNsYXNzX3RvX3N0cihjbGFzcyksIHQpOwo+ICsJCX0KPiArCj4gKwo+ICsJCWlndF9m b3JrKGNoaWxkLCBjb3VudCkgewo+ICsJCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIy IGV4ZWNidWYgPSB7Cj4gKwkJCQkuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIoJmJhdGNo KSwKPiArCQkJCS5idWZmZXJfY291bnQgPSAxLAo+ICsJCQkJLmZsYWdzID0gY2hpbGQgKyAxLAo+ ICsJCQkJLnJzdmQxID0gZ2VtX2NvbnRleHRfY2xvbmUoaTkxNSwgY3R4LAo+ICsJCQkJCQkJICAg STkxNV9DT05URVhUX0NMT05FX0VOR0lORVMsIDApLAo+ICsJCQl9Owo+ICsJCQlzdHJ1Y3QgdGlt ZXNwZWMgdHYgPSB7fTsKPiArCQkJdW5zaWduZWQgbG9uZyBub3BzOwo+ICsJCQlkb3VibGUgdDsK PiArCj4gKwkJCWlndF9uc2VjX2VsYXBzZWQoJnR2KTsKPiArCQkJbm9wcyA9IDA7Cj4gKwkJCWRv IHsKPiArCQkJCWZvciAoaW50IHIgPSAwOyByIDwgMTAyNDsgcisrKQo+ICsJCQkJCWdlbV9leGVj YnVmKGk5MTUsICZleGVjYnVmKTsKPiArCQkJCW5vcHMgKz0gMTAyNDsKPiArCQkJfSB3aGlsZSAo aWd0X3NlY29uZHNfZWxhcHNlZCgmdHYpIDwgMik7Cj4gKwkJCWdlbV9zeW5jKGk5MTUsIGJhdGNo LmhhbmRsZSk7Cj4gKwo+ICsJCQl0ID0gaWd0X25zZWNfZWxhcHNlZCgmdHYpICogMWUtMyAvIG5v cHM7Cj4gKwkJCWlndF9pbmZvKCJbJWRdICVzOiVkICUuM2Z1c1xuIiwKPiArCQkJCSBjaGlsZCwg Y2xhc3NfdG9fc3RyKGNsYXNzKSwgY2hpbGQsIHQpOwo+ICsKPiArCQkJbWVtc2V0KCZ0diwgMCwg c2l6ZW9mKHR2KSk7Cj4gKwkJCWV4ZWNidWYuZmxhZ3MgPSAwOwo+ICsKPiArCQkJaWd0X25zZWNf ZWxhcHNlZCgmdHYpOwo+ICsJCQlub3BzID0gMDsKPiArCQkJZG8gewo+ICsJCQkJZm9yIChpbnQg ciA9IDA7IHIgPCAxMDI0OyByKyspCj4gKwkJCQkJZ2VtX2V4ZWNidWYoaTkxNSwgJmV4ZWNidWYp Owo+ICsJCQkJbm9wcyArPSAxMDI0Owo+ICsJCQl9IHdoaWxlIChpZ3Rfc2Vjb25kc19lbGFwc2Vk KCZ0dikgPCAyKTsKPiArCQkJZ2VtX3N5bmMoaTkxNSwgYmF0Y2guaGFuZGxlKTsKPiArCj4gKwkJ CXQgPSBpZ3RfbnNlY19lbGFwc2VkKCZ0dikgKiAxZS0zIC8gbm9wczsKPiArCQkJaWd0X2luZm8o IlslZF0gJXM6KiAlLjNmdXNcbiIsCj4gKwkJCQkgY2hpbGQsIGNsYXNzX3RvX3N0cihjbGFzcyks IHQpOwo+ICsKPiArCQkJZ2VtX2NvbnRleHRfZGVzdHJveShpOTE1LCBleGVjYnVmLnJzdmQxKTsK PiArCQl9Cj4gKwo+ICsJCWlndF93YWl0Y2hpbGRyZW4oKTsKPiArCj4gKwkJZ2VtX2NvbnRleHRf ZGVzdHJveShpOTE1LCBjdHgpOwo+ICsJCWZyZWUoY2kpOwo+ICsJfQo+ICsKPiArCWdlbV9jbG9z ZShpOTE1LCBiYXRjaC5oYW5kbGUpOwo+ICsJZ2VtX3F1aWVzY2VudF9ncHUoaTkxNSk7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIHBpbmcoaW50IGk5MTUsIHVpbnQzMl90IGN0eCwgdW5zaWduZWQg aW50IGVuZ2luZSkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2Jq ID0gewo+ICsJCS5oYW5kbGUgPSBiYXRjaF9jcmVhdGUoaTkxNSksCj4gKwl9Owo+ICsJc3RydWN0 IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmID0gewo+ICsJCS5idWZmZXJzX3B0ciA9 IHRvX3VzZXJfcG9pbnRlcigmb2JqKSwKPiArCQkuYnVmZmVyX2NvdW50ID0gMSwKPiArCQkuZmxh Z3MgPSBlbmdpbmUsCj4gKwkJLnJzdmQxID0gY3R4LAo+ICsJfTsKPiArCWdlbV9leGVjYnVmKGk5 MTUsICZleGVjYnVmKTsKPiArCWdlbV9zeW5jKGk5MTUsIG9iai5oYW5kbGUpOwo+ICsJZ2VtX2Ns b3NlKGk5MTUsIG9iai5oYW5kbGUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBzZW1hcGhvcmUo aW50IGk5MTUpCj4gK3sKPiArCXVpbnQzMl90IGJsb2NrWzJdLCBzY3JhdGNoOwo+ICsJaWd0X3Nw aW5fdCAqc3BpblszXTsKPiArCj4gKwkvKgo+ICsJICogSWYgd2UgYXJlIHVzaW5nIEhXIHNlbWFw aG9yZXMgdG8gbGF1bmNoIHNlcmlhbGlzZWQgcmVxdWVzdHMKPiArCSAqIG9uIGRpZmZlcmVudCBl bmdpbmUgY29uY3VycmVudGx5LCB3ZSB3YW50IHRvIHZlcmlmeSB0aGF0IHJlYWwKPiArCSAqIHdv cmsgaXMgdW5pbXBlZGVkLgo+ICsJICovCj4gKwlpZ3RfcmVxdWlyZShnZW1fc2NoZWR1bGVyX2hh c19wcmVlbXB0aW9uKGk5MTUpKTsKPiArCj4gKwlibG9ja1swXSA9IGdlbV9jb250ZXh0X2NyZWF0 ZShpOTE1KTsKPiArCWJsb2NrWzFdID0gZ2VtX2NvbnRleHRfY3JlYXRlKGk5MTUpOwo+ICsKPiAr CXNjcmF0Y2ggPSBnZW1fY3JlYXRlKGk5MTUsIDQwOTYpOwo+ICsJc3BpblsyXSA9IGlndF9zcGlu X25ldyhpOTE1LCAuZGVwZW5kZW5jeSA9IHNjcmF0Y2gpOwo+ICsJZm9yIChpbnQgY2xhc3MgPSAx OyBjbGFzcyA8IDMyOyBjbGFzcysrKSB7Cj4gKwkJc3RydWN0IGk5MTVfZW5naW5lX2NsYXNzX2lu c3RhbmNlICpjaTsKPiArCQl1bnNpZ25lZCBpbnQgY291bnQ7Cj4gKwkJdWludDMyX3QgdmlwOwo+ ICsKPiArCQljaSA9IGxpc3RfZW5naW5lcyhpOTE1LCAxdSA8PCBjbGFzcywgJmNvdW50KTsKPiAr CQlpZiAoIWNpKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJaWYgKGNvdW50IDwgQVJSQVlfU0la RShibG9jaykpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQkvKiBFbnN1cmUgdGhhdCB3ZSBjb21w bGV0ZWx5IG9jY3VweSBhbGwgZW5naW5lcyBpbiB0aGlzIGdyb3VwICovCj4gKwkJY291bnQgPSBB UlJBWV9TSVpFKGJsb2NrKTsKPiArCj4gKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsr KSB7Cj4gKwkJCXNldF9sb2FkX2JhbGFuY2VyKGk5MTUsIGJsb2NrW2ldLCBjaSwgY291bnQpOwo+ ICsJCQlzcGluW2ldID0gX19pZ3Rfc3Bpbl9uZXcoaTkxNSwKPiArCQkJCQkJIC5jdHggPSBibG9j a1tpXSwKPiArCQkJCQkJIC5kZXBlbmRlbmN5ID0gc2NyYXRjaCk7Cj4gKwkJfQo+ICsKPiArCQkv Kgo+ICsJCSAqIEVpdGhlciB3ZSBoYXZlbid0IGJsb2NrZWQgYm90aCBlbmdpbmVzIHdpdGggc2Vt YXBob3JlcywKPiArCQkgKiBvciB3ZSBsZXQgdGhlIHZpcCB0aHJvdWdoLiBJZiBub3QsIHdlIGhh bmcuCj4gKwkJICovCj4gKwkJdmlwID0gZ2VtX2NvbnRleHRfY3JlYXRlKGk5MTUpOwo+ICsJCXNl dF9sb2FkX2JhbGFuY2VyKGk5MTUsIHZpcCwgY2ksIGNvdW50KTsKPiArCQlwaW5nKGk5MTUsIHZp cCwgMCk7Cj4gKwkJZ2VtX2NvbnRleHRfZGVzdHJveShpOTE1LCB2aXApOwo+ICsKPiArCQlmb3Ig KGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCj4gKwkJCWlndF9zcGluX2ZyZWUoaTkxNSwgc3Bp bltpXSk7Cj4gKwo+ICsJCWZyZWUoY2kpOwo+ICsJfQo+ICsJaWd0X3NwaW5fZnJlZShpOTE1LCBz cGluWzJdKTsKPiArCWdlbV9jbG9zZShpOTE1LCBzY3JhdGNoKTsKPiArCj4gKwlnZW1fY29udGV4 dF9kZXN0cm95KGk5MTUsIGJsb2NrWzFdKTsKPiArCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwg YmxvY2tbMF0pOwo+ICsKPiArCWdlbV9xdWllc2NlbnRfZ3B1KGk5MTUpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBzbW9rZXRlc3QoaW50IGk5MTUsIGludCB0aW1lb3V0KQo+ICt7Cj4gKwlzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBiYXRjaFsyXSA9IHsKPiArCQl7IC5oYW5kbGUg PSBfX2JhdGNoX2NyZWF0ZShpOTE1LCAxNjM4MCkgfQo+ICsJfTsKPiArCXVuc2lnbmVkIGludCBu Y29udGV4dCA9IDA7Cj4gKwl1aW50MzJfdCAqY29udGV4dHMgPSBOVUxMOwo+ICsJdWludDMyX3Qg KmhhbmRsZXMgPSBOVUxMOwo+ICsKPiArCWlndF9yZXF1aXJlX3N3X3N5bmMoKTsKPiArCj4gKwlm b3IgKGludCBjbGFzcyA9IDA7IGNsYXNzIDwgMzI7IGNsYXNzKyspIHsKPiArCQlzdHJ1Y3QgaTkx NV9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgKmNpOwo+ICsJCXVuc2lnbmVkIGludCBjb3VudCA9IDA7 Cj4gKwo+ICsJCWNpID0gbGlzdF9lbmdpbmVzKGk5MTUsIDF1IDw8IGNsYXNzLCAmY291bnQpOwo+ ICsJCWlmICghY2kgfHwgY291bnQgPCAyKSB7Cj4gKwkJCWZyZWUoY2kpOwo+ICsJCQljb250aW51 ZTsKPiArCQl9Cj4gKwo+ICsJCW5jb250ZXh0ICs9IDEyODsKPiArCQljb250ZXh0cyA9IHJlYWxs b2MoY29udGV4dHMsIHNpemVvZigqY29udGV4dHMpICogbmNvbnRleHQpOwo+ICsJCWlndF9hc3Nl cnQoY29udGV4dHMpOwo+ICsKPiArCQlmb3IgKHVuc2lnbmVkIGludCBuID0gbmNvbnRleHQgLSAx Mjg7IG4gPCBuY29udGV4dDsgbisrKSB7Cj4gKwkJCWNvbnRleHRzW25dID0gbG9hZF9iYWxhbmNl cl9jcmVhdGUoaTkxNSwgY2ksIGNvdW50KTsKPiArCQkJaWd0X2Fzc2VydChjb250ZXh0c1tuXSk7 Cj4gKwkJfQo+ICsKPiArCQlmcmVlKGNpKTsKPiArCX0KPiArCWlndF9kZWJ1ZygiQ3JlYXRlZCAl ZCB2aXJ0dWFsIGVuZ2luZXMgKG9uZSBwZXIgY29udGV4dClcbiIsIG5jb250ZXh0KTsKPiArCWln dF9yZXF1aXJlKG5jb250ZXh0KTsKPiArCj4gKwljb250ZXh0cyA9IHJlYWxsb2MoY29udGV4dHMs IHNpemVvZigqY29udGV4dHMpICogbmNvbnRleHQgKiA0KTsKPiArCWlndF9hc3NlcnQoY29udGV4 dHMpOwo+ICsJbWVtY3B5KGNvbnRleHRzICsgbmNvbnRleHQsIGNvbnRleHRzLCBuY29udGV4dCAq IHNpemVvZigqY29udGV4dHMpKTsKPiArCW5jb250ZXh0ICo9IDI7Cj4gKwltZW1jcHkoY29udGV4 dHMgKyBuY29udGV4dCwgY29udGV4dHMsIG5jb250ZXh0ICogc2l6ZW9mKCpjb250ZXh0cykpOwo+ ICsJbmNvbnRleHQgKj0gMjsKPiArCj4gKwloYW5kbGVzID0gbWFsbG9jKHNpemVvZigqaGFuZGxl cykgKiBuY29udGV4dCk7Cj4gKwlpZ3RfYXNzZXJ0KGhhbmRsZXMpOwo+ICsJZm9yICh1bnNpZ25l ZCBpbnQgbiA9IDA7IG4gPCBuY29udGV4dDsgbisrKQo+ICsJCWhhbmRsZXNbbl0gPSBnZW1fY3Jl YXRlKGk5MTUsIDQwOTYpOwo+ICsKPiArCWlndF91bnRpbF90aW1lb3V0KHRpbWVvdXQpIHsKPiAr CQl1bnNpZ25lZCBpbnQgY291bnQgPSAxICsgKHJhbmQoKSAlIChuY29udGV4dCAtIDEpKTsKPiAr CQlJR1RfQ09SS19GRU5DRShjb3JrKTsKPiArCQlpbnQgZmVuY2UgPSBpZ3RfY29ya19wbHVnKCZj b3JrLCBpOTE1KTsKPiArCj4gKwkJZm9yICh1bnNpZ25lZCBpbnQgbiA9IDA7IG4gPCBjb3VudDsg bisrKSB7Cj4gKwkJCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZWIgPSB7Cj4gKwkJ CQkuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIoYmF0Y2gpLAo+ICsJCQkJLmJ1ZmZlcl9j b3VudCA9IEFSUkFZX1NJWkUoYmF0Y2gpLAo+ICsJCQkJLnJzdmQxID0gY29udGV4dHNbbl0sCj4g KwkJCQkucnN2ZDIgPSBmZW5jZSwKPiArCQkJCS5mbGFncyA9IEk5MTVfRVhFQ19CQVRDSF9GSVJT VCB8IEk5MTVfRVhFQ19GRU5DRV9JTiwKPiArCQkJfTsKPiArCQkJYmF0Y2hbMV0uaGFuZGxlID0g aGFuZGxlc1tuXTsKPiArCQkJZ2VtX2V4ZWNidWYoaTkxNSwgJmViKTsKPiArCQl9Cj4gKwkJaWd0 X3Blcm11dGVfYXJyYXkoaGFuZGxlcywgY291bnQsIGlndF9leGNoYW5nZV9pbnQpOwo+ICsKPiAr CQlpZ3RfY29ya191bnBsdWcoJmNvcmspOwo+ICsJCWZvciAodW5zaWduZWQgaW50IG4gPSAwOyBu IDwgY291bnQ7IG4rKykKPiArCQkJZ2VtX3N5bmMoaTkxNSwgaGFuZGxlc1tuXSk7Cj4gKwo+ICsJ CWNsb3NlKGZlbmNlKTsKPiArCX0KPiArCj4gKwlmb3IgKHVuc2lnbmVkIGludCBuID0gMDsgbiA8 IG5jb250ZXh0OyBuKyspIHsKPiArCQlnZW1fY2xvc2UoaTkxNSwgaGFuZGxlc1tuXSk7Cj4gKwkJ X19nZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIGNvbnRleHRzW25dKTsKPiArCX0KPiArCWZyZWUo aGFuZGxlcyk7Cj4gKwlmcmVlKGNvbnRleHRzKTsKPiArCWdlbV9jbG9zZShpOTE1LCBiYXRjaFsw XS5oYW5kbGUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBoYXNfY29udGV4dF9lbmdpbmVzKGlu dCBpOTE1KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0gcCA9IHsK PiArCQkucGFyYW0gPSBJOTE1X0NPTlRFWFRfUEFSQU1fRU5HSU5FUywKPiArCX07Cj4gKwo+ICsJ cmV0dXJuIF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGk5MTUsICZwKSA9PSAwOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgYm9vbCBoYXNfbG9hZF9iYWxhbmNlcihpbnQgaTkxNSkKPiArewo+ICsJc3RydWN0 IGk5MTVfZW5naW5lX2NsYXNzX2luc3RhbmNlIGNpID0ge307Cj4gKwl1aW50MzJfdCBjdHg7Cj4g KwlpbnQgZXJyOwo+ICsKPiArCWN0eCA9IGdlbV9jb250ZXh0X2NyZWF0ZShpOTE1KTsKPiArCWVy ciA9IF9fc2V0X2xvYWRfYmFsYW5jZXIoaTkxNSwgY3R4LCAmY2ksIDEpOwo+ICsJZ2VtX2NvbnRl eHRfZGVzdHJveShpOTE1LCBjdHgpOwo+ICsKPiArCXJldHVybiBlcnIgPT0gMDsKPiArfQo+ICsK PiAraWd0X21haW4KPiArewo+ICsJaW50IGk5MTUgPSAtMTsKPiArCj4gKwlpZ3Rfc2tpcF9vbl9z aW11bGF0aW9uKCk7Cj4gKwo+ICsJaWd0X2ZpeHR1cmUgewo+ICsJCWk5MTUgPSBkcm1fb3Blbl9k cml2ZXIoRFJJVkVSX0lOVEVMKTsKPiArCQlpZ3RfcmVxdWlyZV9nZW0oaTkxNSk7Cj4gKwo+ICsJ CWdlbV9yZXF1aXJlX2NvbnRleHRzKGk5MTUpOwo+ICsJCWlndF9yZXF1aXJlKGhhc19jb250ZXh0 X2VuZ2luZXMoaTkxNSkpOwo+ICsJCWlndF9yZXF1aXJlKGhhc19sb2FkX2JhbGFuY2VyKGk5MTUp KTsKPiArCj4gKwkJaWd0X2ZvcmtfaGFuZ19kZXRlY3RvcihpOTE1KTsKPiArCX0KPiArCj4gKwlp Z3Rfc3VidGVzdCgiaW52YWxpZC1iYWxhbmNlciIpCj4gKwkJaW52YWxpZF9iYWxhbmNlcihpOTE1 KTsKPiArCj4gKwlpZ3Rfc3VidGVzdCgiaW5kaXZpZHVhbCIpCj4gKwkJaW5kaXZpZHVhbChpOTE1 KTsKPiArCj4gKwlpZ3Rfc3VidGVzdCgiaW5kaWNlcyIpCj4gKwkJaW5kaWNlcyhpOTE1KTsKPiAr Cj4gKwlpZ3Rfc3VidGVzdCgiYnVzeSIpCj4gKwkJYnVzeShpOTE1KTsKPiArCj4gKwlpZ3Rfc3Vi dGVzdF9ncm91cCB7Cj4gKwkJc3RhdGljIGNvbnN0IHN0cnVjdCB7Cj4gKwkJCWNvbnN0IGNoYXIg Km5hbWU7Cj4gKwkJCXVuc2lnbmVkIGludCBmbGFnczsKPiArCQl9IHBoYXNlc1tdID0gewo+ICsJ CQl7ICIiLCAwIH0sCj4gKwkJCXsgIi1wdWxzZSIsIFBVTFNFIH0sCj4gKwkJCXsgIi1sYXRlIiwg TEFURSB9LAo+ICsJCQl7ICItbGF0ZS1wdWxzZSIsIFBVTFNFIHwgTEFURSB9LAo+ICsJCQl7IH0K PiArCQl9Owo+ICsJCWZvciAodHlwZW9mKCpwaGFzZXMpICpwID0gcGhhc2VzOyBwLT5uYW1lOyBw KyspCj4gKwkJCWlndF9zdWJ0ZXN0X2YoImZ1bGwlcyIsIHAtPm5hbWUpCj4gKwkJCQlmdWxsKGk5 MTUsIHAtPmZsYWdzKTsKPiArCX0KPiArCj4gKwlpZ3Rfc3VidGVzdCgibm9wIikKPiArCQlub3Ao aTkxNSk7Cj4gKwo+ICsJaWd0X3N1YnRlc3QoInNlbWFwaG9yZSIpCj4gKwkJc2VtYXBob3JlKGk5 MTUpOwo+ICsKPiArCWlndF9zdWJ0ZXN0KCJzbW9rZSIpCj4gKwkJc21va2V0ZXN0KGk5MTUsIDIw KTsKPiArCj4gKwlpZ3RfZml4dHVyZSB7Cj4gKwkJaWd0X3N0b3BfaGFuZ19kZXRlY3RvcigpOwo+ ICsJfQo+ICt9Cj4gZGlmZiAtLWdpdCBhL3Rlc3RzL21lc29uLmJ1aWxkIGIvdGVzdHMvbWVzb24u YnVpbGQKPiBpbmRleCBiN2U1NjEwM2QuLjIwMzY2YjY4YiAxMDA2NDQKPiAtLS0gYS90ZXN0cy9t ZXNvbi5idWlsZAo+ICsrKyBiL3Rlc3RzL21lc29uLmJ1aWxkCj4gQEAgLTI5Myw2ICsyOTMsMTMg QEAgdGVzdF9leGVjdXRhYmxlcyArPSBleGVjdXRhYmxlKCdnZW1fZWlvJywKPiAgIAkgICBpbnN0 YWxsIDogdHJ1ZSkKPiAgIHRlc3RfbGlzdCArPSAnZ2VtX2VpbycKPiAgIAo+ICt0ZXN0X2V4ZWN1 dGFibGVzICs9IGV4ZWN1dGFibGUoJ2dlbV9leGVjX2JhbGFuY2VyJywgJ2k5MTUvZ2VtX2V4ZWNf YmFsYW5jZXIuYycsCj4gKwkgICBkZXBlbmRlbmNpZXMgOiB0ZXN0X2RlcHMgKyBbIGxpYl9pZ3Rf cGVyZiBdLAo+ICsJICAgaW5zdGFsbF9kaXIgOiBsaWJleGVjZGlyLAo+ICsJICAgaW5zdGFsbF9y cGF0aCA6IGxpYmV4ZWNkaXJfcnBhdGhkaXIsCj4gKwkgICBpbnN0YWxsIDogdHJ1ZSkKPiArdGVz dF9wcm9ncyArPSAnZ2VtX2V4ZWNfYmFsYW5jZXInCj4gKwo+ICAgdGVzdF9leGVjdXRhYmxlcyAr PSBleGVjdXRhYmxlKCdnZW1fbW9jc19zZXR0aW5ncycsCj4gICAJICAgam9pbl9wYXRocygnaTkx NScsICdnZW1fbW9jc19zZXR0aW5ncy5jJyksCj4gICAJICAgZGVwZW5kZW5jaWVzIDogdGVzdF9k ZXBzICsgWyBsaWJfaWd0X3BlcmYgXSwKPiAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vaW50ZWwtZ2Z4 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: References: <20190522113712.23512-1-chris@chris-wilson.co.uk> <20190522113712.23512-9-chris@chris-wilson.co.uk> From: Tvrtko Ursulin Message-ID: Date: Wed, 22 May 2019 13:13:25 +0100 MIME-Version: 1.0 In-Reply-To: <20190522113712.23512-9-chris@chris-wilson.co.uk> Content-Language: en-US Subject: Re: [igt-dev] [PATCH i-g-t 09/12] i915: Add gem_exec_balancer List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Chris Wilson , intel-gfx@lists.freedesktop.org Cc: igt-dev@lists.freedesktop.org List-ID: Ck9uIDIyLzA1LzIwMTkgMTI6MzcsIENocmlzIFdpbHNvbiB3cm90ZToKPiBFeGVyY2lzZSB0aGUg aW4ta2VybmVsIGxvYWQgYmFsYW5jZXIgY2hlY2tpbmcgdGhhdCB3ZSBjYW4gZGlzdHJpYnV0ZQo+ IGJhdGNoZXMgYWNyb3NzIHRoZSBzZXQgb2YgY3R4LT5lbmdpbmVzIHRvIGF2b2lkIGxvYWQuCj4g Cj4gdjI6IE1hbnkgYXNzb3J0ZWQgaW1wcm92ZW1lbnRzIGZyb20gVHZydGtvLgo+IAo+IFNpZ25l ZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+IC0tLQo+ ICAgdGVzdHMvTWFrZWZpbGUuYW0gICAgICAgICAgICAgIHwgICAgMSArCj4gICB0ZXN0cy9NYWtl ZmlsZS5zb3VyY2VzICAgICAgICAgfCAgICAxICsKPiAgIHRlc3RzL2k5MTUvZ2VtX2V4ZWNfYmFs YW5jZXIuYyB8IDEwNTIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgIHRlc3Rz L21lc29uLmJ1aWxkICAgICAgICAgICAgICB8ICAgIDcgKwo+ICAgNCBmaWxlcyBjaGFuZ2VkLCAx MDYxIGluc2VydGlvbnMoKykKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9pOTE1L2dlbV9l eGVjX2JhbGFuY2VyLmMKPiAKPiBkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuYW0gYi90ZXN0 cy9NYWtlZmlsZS5hbQo+IGluZGV4IDUwOTdkZWJmNi4uYzZhZjBhZWFmIDEwMDY0NAo+IC0tLSBh L3Rlc3RzL01ha2VmaWxlLmFtCj4gKysrIGIvdGVzdHMvTWFrZWZpbGUuYW0KPiBAQCAtOTYsNiAr OTYsNyBAQCBnZW1fY2xvc2VfcmFjZV9MREFERCA9ICQoTERBREQpIC1scHRocmVhZAo+ICAgZ2Vt X2N0eF90aHJhc2hfQ0ZMQUdTID0gJChBTV9DRkxBR1MpICQoVEhSRUFEX0NGTEFHUykKPiAgIGdl bV9jdHhfdGhyYXNoX0xEQUREID0gJChMREFERCkgLWxwdGhyZWFkCj4gICBnZW1fY3R4X3NzZXVf TERBREQgPSAkKExEQUREKSAkKHRvcF9idWlsZGRpcikvbGliL2xpYmlndF9wZXJmLmxhCj4gK2k5 MTVfZ2VtX2V4ZWNfYmFsYW5jZXJfTERBREQgPSAkKExEQUREKSAkKHRvcF9idWlsZGRpcikvbGli L2xpYmlndF9wZXJmLmxhCj4gICBnZW1fZXhlY19jYXB0dXJlX0xEQUREID0gJChMREFERCkgLWx6 Cj4gICBnZW1fZXhlY19wYXJhbGxlbF9DRkxBR1MgPSAkKEFNX0NGTEFHUykgJChUSFJFQURfQ0ZM QUdTKQo+ICAgZ2VtX2V4ZWNfcGFyYWxsZWxfTERBREQgPSAkKExEQUREKSAtbHB0aHJlYWQKPiBk aWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJj ZXMKPiBpbmRleCAyZWY2ODkwMjMuLjE3ZmNhNmQ3NyAxMDA2NDQKPiAtLS0gYS90ZXN0cy9NYWtl ZmlsZS5zb3VyY2VzCj4gKysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+IEBAIC0yNCw2ICsy NCw3IEBAIFRFU1RTX3Byb2dzID0gXAo+ICAgCWk5MTUvZ2VtX2N0eF9jbG9uZSBcCj4gICAJaTkx NS9nZW1fY3R4X2VuZ2luZXMgXAo+ICAgCWk5MTUvZ2VtX2N0eF9zaGFyZWQgXAo+ICsJaTkxNS9n ZW1fZXhlY19iYWxhbmNlciBcCj4gICAJaTkxNS9nZW1fdm1fY3JlYXRlIFwKPiAgIAlrbXNfM2Qg XAo+ICAgCWttc19hZGRmYl9iYXNpYyBcCj4gZGlmZiAtLWdpdCBhL3Rlc3RzL2k5MTUvZ2VtX2V4 ZWNfYmFsYW5jZXIuYyBiL3Rlc3RzL2k5MTUvZ2VtX2V4ZWNfYmFsYW5jZXIuYwo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwLi40MGEyNzE5YzAKPiAtLS0gL2Rldi9udWxs Cj4gKysrIGIvdGVzdHMvaTkxNS9nZW1fZXhlY19iYWxhbmNlci5jCj4gQEAgLTAsMCArMSwxMDUy IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCDCqSAyMDE4LTIwMTkgSW50ZWwgQ29ycG9yYXRpb24K PiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2Us IHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFu ZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICog dG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdp dGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBt ZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwg Y29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhl Cj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFy YWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBv cnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElT IFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Mg T1IKPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUg QVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFN QUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENP TlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1Ig SU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJ TkdTCj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8c2NoZWQu aD4KPiArCj4gKyNpbmNsdWRlICJpZ3QuaCIKPiArI2luY2x1ZGUgImlndF9wZXJmLmgiCj4gKyNp bmNsdWRlICJpOTE1L2dlbV9yaW5nLmgiCj4gKyNpbmNsdWRlICJzd19zeW5jLmgiCj4gKwo+ICtJ R1RfVEVTVF9ERVNDUklQVElPTigiRXhlcmNpc2UgaW4ta2VybmVsIGxvYWQtYmFsYW5jaW5nIik7 Cj4gKwo+ICsjZGVmaW5lIElOU1RBTkNFX0NPVU5UICgxIDw8IEk5MTVfUE1VX1NBTVBMRV9JTlNU QU5DRV9CSVRTKQo+ICsKPiArc3RhdGljIGJvb2wgaGFzX2NsYXNzX2luc3RhbmNlKGludCBpOTE1 LCB1aW50MTZfdCBjbGFzcywgdWludDE2X3QgaW5zdGFuY2UpCj4gK3sKPiArCWludCBmZDsKPiAr Cj4gKwlmZCA9IHBlcmZfaTkxNV9vcGVuKEk5MTVfUE1VX0VOR0lORV9CVVNZKGNsYXNzLCBpbnN0 YW5jZSkpOwo+ICsJaWYgKGZkICE9IC0xKSB7Cj4gKwkJY2xvc2UoZmQpOwo+ICsJCXJldHVybiB0 cnVlOwo+ICsJfQo+ICsKPiArCXJldHVybiBmYWxzZTsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVj dCBpOTE1X2VuZ2luZV9jbGFzc19pbnN0YW5jZSAqCj4gK2xpc3RfZW5naW5lcyhpbnQgaTkxNSwg dWludDMyX3QgY2xhc3NfbWFzaywgdW5zaWduZWQgaW50ICpvdXQpCj4gK3sKPiArCXVuc2lnbmVk IGludCBjb3VudCA9IDAsIHNpemUgPSA2NDsKPiArCXN0cnVjdCBpOTE1X2VuZ2luZV9jbGFzc19p bnN0YW5jZSAqZW5naW5lczsKPiArCj4gKwllbmdpbmVzID0gbWFsbG9jKHNpemUgKiBzaXplb2Yo KmVuZ2luZXMpKTsKPiArCWlmICghZW5naW5lcykgewo+ICsJCSpvdXQgPSAwOwo+ICsJCXJldHVy biBOVUxMOwo+ICsJfQo+ICsKPiArCWZvciAoZW51bSBkcm1faTkxNV9nZW1fZW5naW5lX2NsYXNz IGNsYXNzID0gSTkxNV9FTkdJTkVfQ0xBU1NfUkVOREVSOwo+ICsJICAgICBjbGFzc19tYXNrOwo+ ICsJICAgICBjbGFzcysrLCBjbGFzc19tYXNrID4+PSAxKSB7Cj4gKwkJaWYgKCEoY2xhc3NfbWFz ayAmIDEpKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJZm9yICh1bnNpZ25lZCBpbnQgaW5zdGFu Y2UgPSAwOwo+ICsJCSAgICAgaW5zdGFuY2UgPCBJTlNUQU5DRV9DT1VOVDsKPiArCQkgICAgIGlu c3RhbmNlKyspIHsKPiArCQkJaWYgKCFoYXNfY2xhc3NfaW5zdGFuY2UoaTkxNSwgY2xhc3MsIGlu c3RhbmNlKSkKPiArCQkJCWNvbnRpbnVlOwo+ICsKPiArCQkJaWYgKGNvdW50ID09IHNpemUpIHsK PiArCQkJCXN0cnVjdCBpOTE1X2VuZ2luZV9jbGFzc19pbnN0YW5jZSAqZTsKPiArCj4gKwkJCQlz aXplICo9IDI7Cj4gKwkJCQllID0gcmVhbGxvYyhlbmdpbmVzLCBzaXplKnNpemVvZigqZW5naW5l cykpOwo+ICsJCQkJaWYgKCFlKSB7Cj4gKwkJCQkJKm91dCA9IGNvdW50Owo+ICsJCQkJCXJldHVy biBlbmdpbmVzOwo+ICsJCQkJfQo+ICsKPiArCQkJCWVuZ2luZXMgPSBlOwo+ICsJCQl9Cj4gKwo+ ICsJCQllbmdpbmVzW2NvdW50KytdID0gKHN0cnVjdCBpOTE1X2VuZ2luZV9jbGFzc19pbnN0YW5j ZSl7Cj4gKwkJCQkuZW5naW5lX2NsYXNzID0gY2xhc3MsCj4gKwkJCQkJLmVuZ2luZV9pbnN0YW5j ZSA9IGluc3RhbmNlLAo+ICsJCQl9Owo+ICsJCX0KPiArCX0KPiArCj4gKwlpZiAoIWNvdW50KSB7 Cj4gKwkJZnJlZShlbmdpbmVzKTsKPiArCQllbmdpbmVzID0gTlVMTDsKPiArCX0KPiArCj4gKwkq b3V0ID0gY291bnQ7Cj4gKwlyZXR1cm4gZW5naW5lczsKPiArfQo+ICsKPiArc3RhdGljIGludCBf X3NldF9sb2FkX2JhbGFuY2VyKGludCBpOTE1LCB1aW50MzJfdCBjdHgsCj4gKwkJCSAgICAgICBj b25zdCBzdHJ1Y3QgaTkxNV9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgKmNpLAo+ICsJCQkgICAgICAg dW5zaWduZWQgaW50IGNvdW50KQo+ICt7Cj4gKwlJOTE1X0RFRklORV9DT05URVhUX0VOR0lORVNf TE9BRF9CQUxBTkNFKGJhbGFuY2VyLCBjb3VudCk7Cj4gKwlJOTE1X0RFRklORV9DT05URVhUX1BB UkFNX0VOR0lORVMoZW5naW5lcywgMSArIGNvdW50KTsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1f Y29udGV4dF9wYXJhbSBwID0gewo+ICsJCS5jdHhfaWQgPSBjdHgsCj4gKwkJLnBhcmFtID0gSTkx NV9DT05URVhUX1BBUkFNX0VOR0lORVMsCj4gKwkJLnNpemUgPSBzaXplb2YoZW5naW5lcyksCj4g KwkJLnZhbHVlID0gdG9fdXNlcl9wb2ludGVyKCZlbmdpbmVzKQo+ICsJfTsKPiArCj4gKwltZW1z ZXQoJmJhbGFuY2VyLCAwLCBzaXplb2YoYmFsYW5jZXIpKTsKPiArCWJhbGFuY2VyLmJhc2UubmFt ZSA9IEk5MTVfQ09OVEVYVF9FTkdJTkVTX0VYVF9MT0FEX0JBTEFOQ0U7Cj4gKwo+ICsJaWd0X2Fz c2VydChjb3VudCk7Cj4gKwliYWxhbmNlci5udW1fc2libGluZ3MgPSBjb3VudDsKPiArCW1lbWNw eShiYWxhbmNlci5lbmdpbmVzLCBjaSwgY291bnQgKiBzaXplb2YoKmNpKSk7Cj4gKwo+ICsJbWVt c2V0KCZlbmdpbmVzLCAwLCBzaXplb2YoZW5naW5lcykpOwo+ICsJZW5naW5lcy5leHRlbnNpb25z ID0gdG9fdXNlcl9wb2ludGVyKCZiYWxhbmNlcik7Cj4gKwllbmdpbmVzLmVuZ2luZXNbMF0uZW5n aW5lX2NsYXNzID0KPiArCQlJOTE1X0VOR0lORV9DTEFTU19JTlZBTElEOwo+ICsJZW5naW5lcy5l bmdpbmVzWzBdLmVuZ2luZV9pbnN0YW5jZSA9Cj4gKwkJSTkxNV9FTkdJTkVfQ0xBU1NfSU5WQUxJ RF9OT05FOwo+ICsJbWVtY3B5KGVuZ2luZXMuZW5naW5lcyArIDEsIGNpLCBjb3VudCAqIHNpemVv ZigqY2kpKTsKPiArCj4gKwlyZXR1cm4gX19nZW1fY29udGV4dF9zZXRfcGFyYW0oaTkxNSwgJnAp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBzZXRfbG9hZF9iYWxhbmNlcihpbnQgaTkxNSwgdWlu dDMyX3QgY3R4LAo+ICsJCQkgICAgICBjb25zdCBzdHJ1Y3QgaTkxNV9lbmdpbmVfY2xhc3NfaW5z dGFuY2UgKmNpLAo+ICsJCQkgICAgICB1bnNpZ25lZCBpbnQgY291bnQpCj4gK3sKPiArCWlndF9h c3NlcnRfZXEoX19zZXRfbG9hZF9iYWxhbmNlcihpOTE1LCBjdHgsIGNpLCBjb3VudCksIDApOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdWludDMyX3QgbG9hZF9iYWxhbmNlcl9jcmVhdGUoaW50IGk5MTUs Cj4gKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBpOTE1X2VuZ2luZV9jbGFzc19pbnN0YW5jZSAqY2ks Cj4gKwkJCQkgICAgIHVuc2lnbmVkIGludCBjb3VudCkKPiArewo+ICsJdWludDMyX3QgY3R4Owo+ ICsKPiArCWN0eCA9IGdlbV9jb250ZXh0X2NyZWF0ZShpOTE1KTsKPiArCXNldF9sb2FkX2JhbGFu Y2VyKGk5MTUsIGN0eCwgY2ksIGNvdW50KTsKPiArCj4gKwlyZXR1cm4gY3R4Owo+ICt9Cj4gKwo+ ICtzdGF0aWMgdWludDMyX3QgX19iYXRjaF9jcmVhdGUoaW50IGk5MTUsIHVpbnQzMl90IG9mZnNl dCkKPiArewo+ICsJY29uc3QgdWludDMyX3QgYmJlID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsKPiAr CXVpbnQzMl90IGhhbmRsZTsKPiArCj4gKwloYW5kbGUgPSBnZW1fY3JlYXRlKGk5MTUsIEFMSUdO KG9mZnNldCArIDQsIDQwOTYpKTsKPiArCWdlbV93cml0ZShpOTE1LCBoYW5kbGUsIG9mZnNldCwg JmJiZSwgc2l6ZW9mKGJiZSkpOwo+ICsKPiArCXJldHVybiBoYW5kbGU7Cj4gK30KPiArCj4gK3N0 YXRpYyB1aW50MzJfdCBiYXRjaF9jcmVhdGUoaW50IGk5MTUpCj4gK3sKPiArCXJldHVybiBfX2Jh dGNoX2NyZWF0ZShpOTE1LCAwKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaW52YWxpZF9iYWxh bmNlcihpbnQgaTkxNSkKPiArewo+ICsJSTkxNV9ERUZJTkVfQ09OVEVYVF9FTkdJTkVTX0xPQURf QkFMQU5DRShiYWxhbmNlciwgNjQpOwo+ICsJSTkxNV9ERUZJTkVfQ09OVEVYVF9QQVJBTV9FTkdJ TkVTKGVuZ2luZXMsIDY0KTsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbSBw ID0gewo+ICsJCS5wYXJhbSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9FTkdJTkVTLAo+ICsJCS52YWx1 ZSA9IHRvX3VzZXJfcG9pbnRlcigmZW5naW5lcykKPiArCX07Cj4gKwl1aW50MzJfdCBoYW5kbGU7 Cj4gKwl2b2lkICpwdHI7Cj4gKwo+ICsJLyoKPiArCSAqIEFzc3VtZSB0aGF0IEk5MTVfQ09OVEVY VF9QQVJBTV9FTkdJTkUgdmFsaWRhdGVzIHRoZSBhcnJheQo+ICsJICogb2YgZW5naW5lc1tdLCBv dXIgam9iIGlzIHRvIGRldGVybWluZSBpZiB0aGUgbG9hZF9iYWxhbmNlcgo+ICsJICogZXh0ZW5z aW9uIGV4cGxvZGVzLgo+ICsJICovCj4gKwo+ICsJZm9yIChpbnQgY2xhc3MgPSAwOyBjbGFzcyA8 IDMyOyBjbGFzcysrKSB7Cj4gKwkJc3RydWN0IGk5MTVfZW5naW5lX2NsYXNzX2luc3RhbmNlICpj aTsKPiArCQl1bnNpZ25lZCBpbnQgY291bnQ7Cj4gKwo+ICsJCWNpID0gbGlzdF9lbmdpbmVzKGk5 MTUsIDEgPDwgY2xhc3MsICZjb3VudCk7Cj4gKwkJaWYgKCFjaSkKPiArCQkJY29udGludWU7CgpJ IGtub3cgaXQgaXMgYSBodWdlIHN0cmV0Y2gsIGJ1dCBJIGRvIHRoaW5rIGNvcnJlY3QgcGF0dGVy biBmb3IgCmxpc3RfZW5naW5lcyBpcyB0byBhc3NlcnQgb24gYWxsb2NhdGlvbiAobWFsbG9jICsg cmVhbGxvYykgZmFpbHVyZXMgCnJhdGhlciB0aGFuIGVxdWFsIHRoYXQgdG8gbm8gZW5naW5lcyBv ZiB0aGlzIGNsYXNzIGFuZCBqdXN0IGNhcnJ5IGFuZCAKdGhlIHBhc3MgdGhlIHRlc3QuCgpXaXRo IHRoYXQgY2hhbmdlOgoKUmV2aWV3ZWQtYnk6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxp bkBpbnRlbC5jb20+CgpSZWdhcmRzLAoKVHZydGtvCgo+ICsKPiArCQlpZ3RfYXNzZXJ0X2x0ZShj b3VudCwgNjQpOwo+ICsKPiArCQlwLmN0eF9pZCA9IGdlbV9jb250ZXh0X2NyZWF0ZShpOTE1KTsK PiArCQlwLnNpemUgPSAoc2l6ZW9mKHN0cnVjdCBpOTE1X2NvbnRleHRfcGFyYW1fZW5naW5lcykg Kwo+ICsJCQkgIChjb3VudCArIDEpICogc2l6ZW9mKCplbmdpbmVzLmVuZ2luZXMpKTsKPiArCj4g KwkJbWVtc2V0KCZlbmdpbmVzLCAwLCBzaXplb2YoZW5naW5lcykpOwo+ICsJCWVuZ2luZXMuZW5n aW5lc1swXS5lbmdpbmVfY2xhc3MgPSBJOTE1X0VOR0lORV9DTEFTU19JTlZBTElEOwo+ICsJCWVu Z2luZXMuZW5naW5lc1swXS5lbmdpbmVfaW5zdGFuY2UgPSBJOTE1X0VOR0lORV9DTEFTU19JTlZB TElEX05PTkU7Cj4gKwkJbWVtY3B5KGVuZ2luZXMuZW5naW5lcyArIDEsIGNpLCBjb3VudCAqIHNp emVvZigqY2kpKTsKPiArCQlnZW1fY29udGV4dF9zZXRfcGFyYW0oaTkxNSwgJnApOwo+ICsKPiAr CQllbmdpbmVzLmV4dGVuc2lvbnMgPSAtMXVsbDsKPiArCQlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2Nv bnRleHRfc2V0X3BhcmFtKGk5MTUsICZwKSwgLUVGQVVMVCk7Cj4gKwo+ICsJCWVuZ2luZXMuZXh0 ZW5zaW9ucyA9IDF1bGw7Cj4gKwkJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9wYXJh bShpOTE1LCAmcCksIC1FRkFVTFQpOwo+ICsKPiArCQltZW1zZXQoJmJhbGFuY2VyLCAwLCBzaXpl b2YoYmFsYW5jZXIpKTsKPiArCQliYWxhbmNlci5iYXNlLm5hbWUgPSBJOTE1X0NPTlRFWFRfRU5H SU5FU19FWFRfTE9BRF9CQUxBTkNFOwo+ICsJCWJhbGFuY2VyLm51bV9zaWJsaW5ncyA9IGNvdW50 Owo+ICsJCW1lbWNweShiYWxhbmNlci5lbmdpbmVzLCBjaSwgY291bnQgKiBzaXplb2YoKmNpKSk7 Cj4gKwo+ICsJCWVuZ2luZXMuZXh0ZW5zaW9ucyA9IHRvX3VzZXJfcG9pbnRlcigmYmFsYW5jZXIp Owo+ICsJCWdlbV9jb250ZXh0X3NldF9wYXJhbShpOTE1LCAmcCk7Cj4gKwo+ICsJCWJhbGFuY2Vy LmVuZ2luZV9pbmRleCA9IDE7Cj4gKwkJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9w YXJhbShpOTE1LCAmcCksIC1FRVhJU1QpOwo+ICsKPiArCQliYWxhbmNlci5lbmdpbmVfaW5kZXgg PSBjb3VudDsKPiArCQlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGk5MTUs ICZwKSwgLUVFWElTVCk7Cj4gKwo+ICsJCWJhbGFuY2VyLmVuZ2luZV9pbmRleCA9IGNvdW50ICsg MTsKPiArCQlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGk5MTUsICZwKSwg LUVJTlZBTCk7Cj4gKwo+ICsJCWJhbGFuY2VyLmVuZ2luZV9pbmRleCA9IDA7Cj4gKwkJZ2VtX2Nv bnRleHRfc2V0X3BhcmFtKGk5MTUsICZwKTsKPiArCj4gKwkJYmFsYW5jZXIuYmFzZS5uZXh0X2V4 dGVuc2lvbiA9IHRvX3VzZXJfcG9pbnRlcigmYmFsYW5jZXIpOwo+ICsJCWlndF9hc3NlcnRfZXEo X19nZW1fY29udGV4dF9zZXRfcGFyYW0oaTkxNSwgJnApLCAtRUVYSVNUKTsKPiArCj4gKwkJYmFs YW5jZXIuYmFzZS5uZXh0X2V4dGVuc2lvbiA9IC0xdWxsOwo+ICsJCWlndF9hc3NlcnRfZXEoX19n ZW1fY29udGV4dF9zZXRfcGFyYW0oaTkxNSwgJnApLCAtRUZBVUxUKTsKPiArCj4gKwkJaGFuZGxl ID0gZ2VtX2NyZWF0ZShpOTE1LCA0MDk2ICogMyk7Cj4gKwkJcHRyID0gZ2VtX21tYXBfX2d0dChp OTE1LCBoYW5kbGUsIDQwOTYgKiAzLCBQUk9UX1dSSVRFKTsKPiArCQlnZW1fY2xvc2UoaTkxNSwg aGFuZGxlKTsKPiArCj4gKwkJbWVtc2V0KCZlbmdpbmVzLCAwLCBzaXplb2YoZW5naW5lcykpOwo+ ICsJCWVuZ2luZXMuZW5naW5lc1swXS5lbmdpbmVfY2xhc3MgPSBJOTE1X0VOR0lORV9DTEFTU19J TlZBTElEOwo+ICsJCWVuZ2luZXMuZW5naW5lc1swXS5lbmdpbmVfaW5zdGFuY2UgPSBJOTE1X0VO R0lORV9DTEFTU19JTlZBTElEX05PTkU7Cj4gKwkJZW5naW5lcy5lbmdpbmVzWzFdLmVuZ2luZV9j bGFzcyA9IEk5MTVfRU5HSU5FX0NMQVNTX0lOVkFMSUQ7Cj4gKwkJZW5naW5lcy5lbmdpbmVzWzFd LmVuZ2luZV9pbnN0YW5jZSA9IEk5MTVfRU5HSU5FX0NMQVNTX0lOVkFMSURfTk9ORTsKPiArCQlt ZW1jcHkoZW5naW5lcy5lbmdpbmVzICsgMiwgY2ksIGNvdW50ICogc2l6ZW9mKGNpKSk7Cj4gKwkJ cC5zaXplID0gKHNpemVvZihzdHJ1Y3QgaTkxNV9jb250ZXh0X3BhcmFtX2VuZ2luZXMpICsKPiAr CQkJICAoY291bnQgKyAyKSAqIHNpemVvZigqZW5naW5lcy5lbmdpbmVzKSk7Cj4gKwkJZ2VtX2Nv bnRleHRfc2V0X3BhcmFtKGk5MTUsICZwKTsKPiArCj4gKwkJYmFsYW5jZXIuYmFzZS5uZXh0X2V4 dGVuc2lvbiA9IDA7Cj4gKwkJYmFsYW5jZXIuZW5naW5lX2luZGV4ID0gMTsKPiArCQllbmdpbmVz LmV4dGVuc2lvbnMgPSB0b191c2VyX3BvaW50ZXIoJmJhbGFuY2VyKTsKPiArCQlnZW1fY29udGV4 dF9zZXRfcGFyYW0oaTkxNSwgJnApOwo+ICsKPiArCQltZW1jcHkocHRyICsgNDA5NiAtIDgsICZi YWxhbmNlciwgc2l6ZW9mKGJhbGFuY2VyKSk7Cj4gKwkJbWVtY3B5KHB0ciArIDgxOTIgLSA4LCAm YmFsYW5jZXIsIHNpemVvZihiYWxhbmNlcikpOwo+ICsJCWJhbGFuY2VyLmVuZ2luZV9pbmRleCA9 IDA7Cj4gKwo+ICsJCWVuZ2luZXMuZXh0ZW5zaW9ucyA9IHRvX3VzZXJfcG9pbnRlcihwdHIpICsg NDA5NiAtIDg7Cj4gKwkJZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGk5MTUsICZwKTsKPiArCj4gKwkJ YmFsYW5jZXIuYmFzZS5uZXh0X2V4dGVuc2lvbiA9IGVuZ2luZXMuZXh0ZW5zaW9uczsKPiArCQll bmdpbmVzLmV4dGVuc2lvbnMgPSB0b191c2VyX3BvaW50ZXIoJmJhbGFuY2VyKTsKPiArCQlnZW1f Y29udGV4dF9zZXRfcGFyYW0oaTkxNSwgJnApOwo+ICsKPiArCQltdW5tYXAocHRyLCA0MDk2KTsK PiArCQlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGk5MTUsICZwKSwgLUVG QVVMVCk7Cj4gKwkJZW5naW5lcy5leHRlbnNpb25zID0gdG9fdXNlcl9wb2ludGVyKHB0cikgKyA0 MDk2IC0gODsKPiArCQlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGk5MTUs ICZwKSwgLUVGQVVMVCk7Cj4gKwo+ICsJCWVuZ2luZXMuZXh0ZW5zaW9ucyA9IHRvX3VzZXJfcG9p bnRlcihwdHIpICsgODE5MiAtIDg7Cj4gKwkJZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGk5MTUsICZw KTsKPiArCj4gKwkJYmFsYW5jZXIuYmFzZS5uZXh0X2V4dGVuc2lvbiA9IGVuZ2luZXMuZXh0ZW5z aW9uczsKPiArCQllbmdpbmVzLmV4dGVuc2lvbnMgPSB0b191c2VyX3BvaW50ZXIoJmJhbGFuY2Vy KTsKPiArCQlnZW1fY29udGV4dF9zZXRfcGFyYW0oaTkxNSwgJnApOwo+ICsKPiArCQltdW5tYXAo cHRyICsgODE5MiwgNDA5Nik7Cj4gKwkJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9w YXJhbShpOTE1LCAmcCksIC1FRkFVTFQpOwo+ICsJCWVuZ2luZXMuZXh0ZW5zaW9ucyA9IHRvX3Vz ZXJfcG9pbnRlcihwdHIpICsgODE5MiAtIDg7Cj4gKwkJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250 ZXh0X3NldF9wYXJhbShpOTE1LCAmcCksIC1FRkFVTFQpOwo+ICsKPiArCQltdW5tYXAocHRyICsg NDA5NiwgNDA5Nik7Cj4gKwo+ICsJCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgcC5jdHhfaWQp Owo+ICsJCWZyZWUoY2kpOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBraWNrX2t0aHJl YWRzKHZvaWQpCj4gK3sKPiArCXVzbGVlcCgyMCAqIDEwMDApOyAvKiAyMG1zIHNob3VsZCBiZSBl bm91Z2ggZm9yIGtzb2Z0aXJxZCEgKi8KPiArfQo+ICsKPiArc3RhdGljIGRvdWJsZSBtZWFzdXJl X2xvYWQoaW50IHBtdSwgaW50IHBlcmlvZF91cykKPiArewo+ICsJdWludDY0X3QgZGF0YVsyXTsK PiArCXVpbnQ2NF90IGRfdCwgZF92Owo+ICsKPiArCWtpY2tfa3RocmVhZHMoKTsKPiArCj4gKwlp Z3RfYXNzZXJ0X2VxKHJlYWQocG11LCBkYXRhLCBzaXplb2YoZGF0YSkpLCBzaXplb2YoZGF0YSkp Owo+ICsJZF92ID0gLWRhdGFbMF07Cj4gKwlkX3QgPSAtZGF0YVsxXTsKPiArCj4gKwl1c2xlZXAo cGVyaW9kX3VzKTsKPiArCj4gKwlpZ3RfYXNzZXJ0X2VxKHJlYWQocG11LCBkYXRhLCBzaXplb2Yo ZGF0YSkpLCBzaXplb2YoZGF0YSkpOwo+ICsJZF92ICs9IGRhdGFbMF07Cj4gKwlkX3QgKz0gZGF0 YVsxXTsKPiArCj4gKwlyZXR1cm4gZF92IC8gKGRvdWJsZSlkX3Q7Cj4gK30KPiArCj4gK3N0YXRp YyBkb3VibGUgbWVhc3VyZV9taW5fbG9hZChpbnQgcG11LCB1bnNpZ25lZCBpbnQgbnVtLCBpbnQg cGVyaW9kX3VzKQo+ICt7Cj4gKwl1aW50NjRfdCBkYXRhWzIgKyBudW1dOwo+ICsJdWludDY0X3Qg ZF90LCBkX3ZbbnVtXTsKPiArCXVpbnQ2NF90IG1pbiA9IC0xLCBtYXggPSAwOwo+ICsKPiArCWtp Y2tfa3RocmVhZHMoKTsKPiArCj4gKwlpZ3RfYXNzZXJ0X2VxKHJlYWQocG11LCBkYXRhLCBzaXpl b2YoZGF0YSkpLCBzaXplb2YoZGF0YSkpOwo+ICsJZm9yICh1bnNpZ25lZCBpbnQgbiA9IDA7IG4g PCBudW07IG4rKykKPiArCQlkX3Zbbl0gPSAtZGF0YVsyICsgbl07Cj4gKwlkX3QgPSAtZGF0YVsx XTsKPiArCj4gKwl1c2xlZXAocGVyaW9kX3VzKTsKPiArCj4gKwlpZ3RfYXNzZXJ0X2VxKHJlYWQo cG11LCBkYXRhLCBzaXplb2YoZGF0YSkpLCBzaXplb2YoZGF0YSkpOwo+ICsKPiArCWRfdCArPSBk YXRhWzFdOwo+ICsJZm9yICh1bnNpZ25lZCBpbnQgbiA9IDA7IG4gPCBudW07IG4rKykgewo+ICsJ CWRfdltuXSArPSBkYXRhWzIgKyBuXTsKPiArCQlpZ3RfZGVidWcoImVuZ2luZVslZF06ICUuMWYl JVxuIiwKPiArCQkJICBuLCBkX3Zbbl0gLyAoZG91YmxlKWRfdCAqIDEwMCk7Cj4gKwkJaWYgKGRf dltuXSA8IG1pbikKPiArCQkJbWluID0gZF92W25dOwo+ICsJCWlmIChkX3Zbbl0gPiBtYXgpCj4g KwkJCW1heCA9IGRfdltuXTsKPiArCX0KPiArCj4gKwlpZ3RfZGVidWcoImVsYXBzZWQ6ICUiUFJJ dTY0Im5zLCBsb2FkIFslLjFmLCAlLjFmXSUlXG4iLAo+ICsJCSAgZF90LCBtaW4gLyAoZG91Ymxl KWRfdCAqIDEwMCwgIG1heCAvIChkb3VibGUpZF90ICogMTAwKTsKPiArCj4gKwlyZXR1cm4gbWlu IC8gKGRvdWJsZSlkX3Q7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGNoZWNrX2luZGl2aWR1YWxf ZW5naW5lKGludCBpOTE1LAo+ICsJCQkJICAgIHVpbnQzMl90IGN0eCwKPiArCQkJCSAgICBjb25z dCBzdHJ1Y3QgaTkxNV9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgKmNpLAo+ICsJCQkJICAgIGludCBp ZHgpCj4gK3sKPiArCWlndF9zcGluX3QgKnNwaW47Cj4gKwlkb3VibGUgbG9hZDsKPiArCWludCBw bXU7Cj4gKwo+ICsJcG11ID0gcGVyZl9pOTE1X29wZW4oSTkxNV9QTVVfRU5HSU5FX0JVU1koY2lb aWR4XS5lbmdpbmVfY2xhc3MsCj4gKwkJCQkJCSAgY2lbaWR4XS5lbmdpbmVfaW5zdGFuY2UpKTsK PiArCj4gKwlzcGluID0gaWd0X3NwaW5fbmV3KGk5MTUsIC5jdHggPSBjdHgsIC5lbmdpbmUgPSBp ZHggKyAxKTsKPiArCWxvYWQgPSBtZWFzdXJlX2xvYWQocG11LCAxMDAwMCk7Cj4gKwlpZ3Rfc3Bp bl9mcmVlKGk5MTUsIHNwaW4pOwo+ICsKPiArCWNsb3NlKHBtdSk7Cj4gKwo+ICsJaWd0X2Fzc2Vy dF9mKGxvYWQgPiAwLjkwLAo+ICsJCSAgICAgImVuZ2luZSAlZCAoY2xhc3M6aW5zdGFuY2UgJWQ6 JWQpIHdhcyBmb3VuZCB0byBiZSBvbmx5ICUuMWYlJSBidXN5XG4iLAo+ICsJCSAgICAgaWR4LCBj aVtpZHhdLmVuZ2luZV9jbGFzcywgY2lbaWR4XS5lbmdpbmVfaW5zdGFuY2UsIGxvYWQqMTAwKTsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgaW5kaXZpZHVhbChpbnQgaTkxNSkKPiArewo+ICsJdWlu dDMyX3QgY3R4Owo+ICsKPiArCS8qCj4gKwkgKiBJOTE1X0NPTlRFWFRfUEFSQU1fRU5HSU5FIGFs bG93cyB1cyB0byBpbmRleCBpbnRvIHRoZSB1c2VyCj4gKwkgKiBzdXBwbGllZCBhcnJheSBmcm9t IGdlbV9leGVjYnVmKCkuIE91ciBjaGVjayBpcyB0byBidWlsZCB0aGUKPiArCSAqIGN0eC0+ZW5n aW5lW10gd2l0aCB2YXJpb3VzIGRpZmZlcmVudCBlbmdpbmUgY2xhc3NlcywgZmVlZCBpbgo+ICsJ ICogYSBzcGlubmVyIGFuZCB0aGVuIGFzayBwbXUgdG8gY29uZmlybSBpdCB0aGUgZXhwZWN0ZWQg ZW5naW5lCj4gKwkgKiB3YXMgYnVzeS4KPiArCSAqLwo+ICsKPiArCWN0eCA9IGdlbV9jb250ZXh0 X2NyZWF0ZShpOTE1KTsKPiArCj4gKwlmb3IgKGludCBjbGFzcyA9IDA7IGNsYXNzIDwgMzI7IGNs YXNzKyspIHsKPiArCQlzdHJ1Y3QgaTkxNV9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgKmNpOwo+ICsJ CXVuc2lnbmVkIGludCBjb3VudDsKPiArCj4gKwkJY2kgPSBsaXN0X2VuZ2luZXMoaTkxNSwgMXUg PDwgY2xhc3MsICZjb3VudCk7Cj4gKwkJaWYgKCFjaSkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJ CWZvciAoaW50IHBhc3MgPSAwOyBwYXNzIDwgY291bnQ7IHBhc3MrKykgeyAvKiBhcHByb3guIGNv dW50ISAqLwo+ICsJCQlpZ3RfYXNzZXJ0KHNpemVvZigqY2kpID09IHNpemVvZihpbnQpKTsKPiAr CQkJaWd0X3Blcm11dGVfYXJyYXkoY2ksIGNvdW50LCBpZ3RfZXhjaGFuZ2VfaW50KTsKPiArCQkJ c2V0X2xvYWRfYmFsYW5jZXIoaTkxNSwgY3R4LCBjaSwgY291bnQpOwo+ICsJCQlmb3IgKHVuc2ln bmVkIGludCBuID0gMDsgbiA8IGNvdW50OyBuKyspCj4gKwkJCQljaGVja19pbmRpdmlkdWFsX2Vu Z2luZShpOTE1LCBjdHgsIGNpLCBuKTsKPiArCQl9Cj4gKwo+ICsJCWZyZWUoY2kpOwo+ICsJfQo+ ICsKPiArCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgY3R4KTsKPiArCWdlbV9xdWllc2NlbnRf Z3B1KGk5MTUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpbmRpY2VzKGludCBpOTE1KQo+ICt7 Cj4gKwlJOTE1X0RFRklORV9DT05URVhUX1BBUkFNX0VOR0lORVMoZW5naW5lcywgSTkxNV9FWEVD X1JJTkdfTUFTSyArIDEpOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIHAg PSB7Cj4gKwkJLmN0eF9pZCA9IGdlbV9jb250ZXh0X2NyZWF0ZShpOTE1KSwKPiArCQkucGFyYW0g PSBJOTE1X0NPTlRFWFRfUEFSQU1fRU5HSU5FUywKPiArCQkudmFsdWUgPSB0b191c2VyX3BvaW50 ZXIoJmVuZ2luZXMpCj4gKwl9Owo+ICsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmpl Y3QyIGJhdGNoID0gewo+ICsJCS5oYW5kbGUgPSBiYXRjaF9jcmVhdGUoaTkxNSksCj4gKwl9Owo+ ICsKPiArCXVuc2lnbmVkIGludCBuZW5naW5lcyA9IDA7Cj4gKwl2b2lkICpiYWxhbmNlcnMgPSBO VUxMOwo+ICsKPiArCS8qCj4gKwkgKiBXZSBjYW4gcG9wdWxhdGUgb3VyIGVuZ2luZSBtYXAgd2l0 aCBtdWx0aXBsZSB2aXJ0dWFsIGVuZ2luZXMuCj4gKwkgKiBEbyBzby4KPiArCSAqLwo+ICsKPiAr CWZvciAoaW50IGNsYXNzID0gMDsgY2xhc3MgPCAzMjsgY2xhc3MrKykgewo+ICsJCXN0cnVjdCBp OTE1X2VuZ2luZV9jbGFzc19pbnN0YW5jZSAqY2k7Cj4gKwkJdW5zaWduZWQgaW50IGNvdW50Owo+ ICsKPiArCQljaSA9IGxpc3RfZW5naW5lcyhpOTE1LCAxdSA8PCBjbGFzcywgJmNvdW50KTsKPiAr CQlpZiAoIWNpKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJZm9yIChpbnQgbiA9IDA7IG4gPCBj b3VudDsgbisrKSB7Cj4gKwkJCUk5MTVfREVGSU5FX0NPTlRFWFRfRU5HSU5FU19MT0FEX0JBTEFO Q0UoKmJhbGFuY2VyLAo+ICsJCQkJCQkJCSBjb3VudCk7Cj4gKwo+ICsJCQllbmdpbmVzLmVuZ2lu ZXNbbmVuZ2luZXNdLmVuZ2luZV9jbGFzcyA9Cj4gKwkJCQlJOTE1X0VOR0lORV9DTEFTU19JTlZB TElEOwo+ICsJCQllbmdpbmVzLmVuZ2luZXNbbmVuZ2luZXNdLmVuZ2luZV9pbnN0YW5jZSA9Cj4g KwkJCQlJOTE1X0VOR0lORV9DTEFTU19JTlZBTElEX05PTkU7Cj4gKwo+ICsJCQliYWxhbmNlciA9 IGNhbGxvYyhzaXplb2YoKmJhbGFuY2VyKSwgMSk7Cj4gKwkJCWlndF9hc3NlcnQoYmFsYW5jZXIp Owo+ICsKPiArCQkJYmFsYW5jZXItPmJhc2UubmFtZSA9Cj4gKwkJCQlJOTE1X0NPTlRFWFRfRU5H SU5FU19FWFRfTE9BRF9CQUxBTkNFOwo+ICsJCQliYWxhbmNlci0+YmFzZS5uZXh0X2V4dGVuc2lv biA9Cj4gKwkJCQl0b191c2VyX3BvaW50ZXIoYmFsYW5jZXJzKTsKPiArCQkJYmFsYW5jZXJzID0g YmFsYW5jZXI7Cj4gKwo+ICsJCQliYWxhbmNlci0+ZW5naW5lX2luZGV4ID0gbmVuZ2luZXMrKzsK PiArCQkJYmFsYW5jZXItPm51bV9zaWJsaW5ncyA9IGNvdW50Owo+ICsKPiArCQkJbWVtY3B5KGJh bGFuY2VyLT5lbmdpbmVzLAo+ICsJCQkgICAgICAgY2ksIGNvdW50ICogc2l6ZW9mKCpjaSkpOwo+ ICsJCX0KPiArCQlmcmVlKGNpKTsKPiArCX0KPiArCj4gKwlpZ3RfcmVxdWlyZShiYWxhbmNlcnMp Owo+ICsJZW5naW5lcy5leHRlbnNpb25zID0gdG9fdXNlcl9wb2ludGVyKGJhbGFuY2Vycyk7Cj4g KwlwLnNpemUgPSAoc2l6ZW9mKHN0cnVjdCBpOTE1X2VuZ2luZV9jbGFzc19pbnN0YW5jZSkgKiBu ZW5naW5lcyArCj4gKwkJICBzaXplb2Yoc3RydWN0IGk5MTVfY29udGV4dF9wYXJhbV9lbmdpbmVz KSk7Cj4gKwlnZW1fY29udGV4dF9zZXRfcGFyYW0oaTkxNSwgJnApOwo+ICsKPiArCWZvciAodW5z aWduZWQgaW50IG4gPSAwOyBuIDwgbmVuZ2luZXM7IG4rKykgewo+ICsJCXN0cnVjdCBkcm1faTkx NV9nZW1fZXhlY2J1ZmZlcjIgZWIgPSB7Cj4gKwkJCS5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9p bnRlcigmYmF0Y2gpLAo+ICsJCQkuYnVmZmVyX2NvdW50ID0gMSwKPiArCQkJLmZsYWdzID0gbiwK PiArCQkJLnJzdmQxID0gcC5jdHhfaWQsCj4gKwkJfTsKPiArCQlpZ3RfZGVidWcoIkV4ZWN1dGlu ZyBvbiBpbmRleD0lZFxuIiwgbik7Cj4gKwkJZ2VtX2V4ZWNidWYoaTkxNSwgJmViKTsKPiArCX0K PiArCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgcC5jdHhfaWQpOwo+ICsKPiArCWdlbV9zeW5j KGk5MTUsIGJhdGNoLmhhbmRsZSk7Cj4gKwlnZW1fY2xvc2UoaTkxNSwgYmF0Y2guaGFuZGxlKTsK PiArCj4gKwl3aGlsZSAoYmFsYW5jZXJzKSB7Cj4gKwkJc3RydWN0IGk5MTVfY29udGV4dF9lbmdp bmVzX2xvYWRfYmFsYW5jZSAqYiwgKm47Cj4gKwo+ICsJCWIgPSBiYWxhbmNlcnM7Cj4gKwkJbiA9 IGZyb21fdXNlcl9wb2ludGVyKGItPmJhc2UubmV4dF9leHRlbnNpb24pOwo+ICsJCWZyZWUoYik7 Cj4gKwo+ICsJCWJhbGFuY2VycyA9IG47Cj4gKwl9Cj4gKwo+ICsJZ2VtX3F1aWVzY2VudF9ncHUo aTkxNSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGJ1c3koaW50IGk5MTUpCj4gK3sKPiArCXVp bnQzMl90IHNjcmF0Y2ggPSBnZW1fY3JlYXRlKGk5MTUsIDQwOTYpOwo+ICsKPiArCS8qCj4gKwkg KiBDaGVjayB0aGF0IHZpcnR1YWwgZW5naW5lcyBhcmUgcmVwb3J0ZWQgdmlhIEdFTV9CVVNZLgo+ ICsJICoKPiArCSAqIFdoZW4gcnVubmluZywgdGhlIGJhdGNoIHdpbGwgYmUgb24gdGhlIHJlYWwg ZW5naW5lIGFuZCByZXBvcnQKPiArCSAqIHRoZSBhY3R1YWwgY2xhc3MuCj4gKwkgKgo+ICsJICog UHJpb3IgdG8gcnVubmluZywgaWYgdGhlIGxvYWQtYmFsYW5jZXIgaXMgYWNyb3NzIG11bHRpcGxl Cj4gKwkgKiBjbGFzc2VzIHdlIGRvbid0IGtub3cgd2hpY2ggZW5naW5lIHRoZSBiYXRjaCB3aWxs Cj4gKwkgKiBleGVjdXRlIG9uLCBzbyB3ZSByZXBvcnQgdGhlbSBhbGwhCj4gKwkgKgo+ICsJICog SG93ZXZlciwgYXMgd2Ugb25seSBzdXBwb3J0IChhbmQgdGVzdCkgY3JlYXRpbmcgYSBsb2FkLWJh bGFuY2VyCj4gKwkgKiBmcm9tIGVuZ2luZXMgb2Ygb25seSBvbmUgY2xhc3MsIHRoYXQgY2FuIGJl IHByb3BhZ2F0ZWQgYWNjdXJhdGVseQo+ICsJICogdGhyb3VnaCB0byBHRU1fQlVTWS4KPiArCSAq Lwo+ICsKPiArCWZvciAoaW50IGNsYXNzID0gMDsgY2xhc3MgPCAxNjsgY2xhc3MrKykgewo+ICsJ CXN0cnVjdCBkcm1faTkxNV9nZW1fYnVzeSBidXN5Owo+ICsJCXN0cnVjdCBpOTE1X2VuZ2luZV9j bGFzc19pbnN0YW5jZSAqY2k7Cj4gKwkJdW5zaWduZWQgaW50IGNvdW50Owo+ICsJCWlndF9zcGlu X3QgKnNwaW5bMl07Cj4gKwkJdWludDMyX3QgY3R4Owo+ICsKPiArCQljaSA9IGxpc3RfZW5naW5l cyhpOTE1LCAxdSA8PCBjbGFzcywgJmNvdW50KTsKPiArCQlpZiAoIWNpKQo+ICsJCQljb250aW51 ZTsKPiArCj4gKwkJY3R4ID0gbG9hZF9iYWxhbmNlcl9jcmVhdGUoaTkxNSwgY2ksIGNvdW50KTsK PiArCQlmcmVlKGNpKTsKPiArCj4gKwkJc3BpblswXSA9IF9faWd0X3NwaW5fbmV3KGk5MTUsCj4g KwkJCQkJIC5jdHggPSBjdHgsCj4gKwkJCQkJIC5mbGFncyA9IElHVF9TUElOX1BPTExfUlVOKTsK PiArCQlzcGluWzFdID0gX19pZ3Rfc3Bpbl9uZXcoaTkxNSwKPiArCQkJCQkgLmN0eCA9IGN0eCwK PiArCQkJCQkgLmRlcGVuZGVuY3kgPSBzY3JhdGNoKTsKPiArCj4gKwkJaWd0X3NwaW5fYnVzeXdh aXRfdW50aWxfc3RhcnRlZChzcGluWzBdKTsKPiArCj4gKwkJLyogUnVubmluZzogYWN0dWFsIGNs YXNzICovCj4gKwkJYnVzeS5oYW5kbGUgPSBzcGluWzBdLT5oYW5kbGU7Cj4gKwkJZG9faW9jdGwo aTkxNSwgRFJNX0lPQ1RMX0k5MTVfR0VNX0JVU1ksICZidXN5KTsKPiArCQlpZ3RfYXNzZXJ0X2Vx X3UzMihidXN5LmJ1c3ksIDF1IDw8IChjbGFzcyArIDE2KSk7Cj4gKwo+ICsJCS8qIFF1ZXVlZChy ZWFkKTogZXhwZWN0ZWQgY2xhc3MgKi8KPiArCQlidXN5LmhhbmRsZSA9IHNwaW5bMV0tPmhhbmRs ZTsKPiArCQlkb19pb2N0bChpOTE1LCBEUk1fSU9DVExfSTkxNV9HRU1fQlVTWSwgJmJ1c3kpOwo+ ICsJCWlndF9hc3NlcnRfZXFfdTMyKGJ1c3kuYnVzeSwgMXUgPDwgKGNsYXNzICsgMTYpKTsKPiAr Cj4gKwkJLyogUXVldWVkKHdyaXRlKTogZXhwZWN0ZWQgY2xhc3MgKi8KPiArCQlidXN5LmhhbmRs ZSA9IHNjcmF0Y2g7Cj4gKwkJZG9faW9jdGwoaTkxNSwgRFJNX0lPQ1RMX0k5MTVfR0VNX0JVU1ks ICZidXN5KTsKPiArCQlpZ3RfYXNzZXJ0X2VxX3UzMihidXN5LmJ1c3ksCj4gKwkJCQkgICgxdSA8 PCAoY2xhc3MgKyAxNikpIHwgKGNsYXNzICsgMSkpOwo+ICsKPiArCQlpZ3Rfc3Bpbl9mcmVlKGk5 MTUsIHNwaW5bMV0pOwo+ICsJCWlndF9zcGluX2ZyZWUoaTkxNSwgc3BpblswXSk7Cj4gKwo+ICsJ CWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgY3R4KTsKPiArCX0KPiArCj4gKwlnZW1fY2xvc2Uo aTkxNSwgc2NyYXRjaCk7Cj4gKwlnZW1fcXVpZXNjZW50X2dwdShpOTE1KTsKPiArfQo+ICsKPiAr c3RhdGljIGludCBhZGRfcG11KGludCBwbXUsIGNvbnN0IHN0cnVjdCBpOTE1X2VuZ2luZV9jbGFz c19pbnN0YW5jZSAqY2kpCj4gK3sKPiArCXJldHVybiBwZXJmX2k5MTVfb3Blbl9ncm91cChJOTE1 X1BNVV9FTkdJTkVfQlVTWShjaS0+ZW5naW5lX2NsYXNzLAo+ICsJCQkJCQkJIGNpLT5lbmdpbmVf aW5zdGFuY2UpLAo+ICsJCQkJICAgIHBtdSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGZ1bGwo aW50IGk5MTUsIHVuc2lnbmVkIGludCBmbGFncykKPiArI2RlZmluZSBQVUxTRSAweDEKPiArI2Rl ZmluZSBMQVRFIDB4Mgo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBi YXRjaCA9IHsKPiArCQkuaGFuZGxlID0gYmF0Y2hfY3JlYXRlKGk5MTUpLAo+ICsJfTsKPiArCj4g KwlpZiAoZmxhZ3MgJiBMQVRFKQo+ICsJCWlndF9yZXF1aXJlX3N3X3N5bmMoKTsKPiArCj4gKwkv Kgo+ICsJICogSTkxNV9DT05URVhUX1BBUkFNX0VOR0lORSBjaGFuZ2VzIHRoZSBtZWFuaW5nIG9m IGVuZ2luZSBzZWxlY3RvciBpbgo+ICsJICogZXhlY2J1ZiB0byB1dGlsaXplIG91ciBvd24gbWFw LCBpbnRvIHdoaWNoIHdlIHJlcGxhY2UgSTkxNV9FWEVDX0RFRkFVTFQKPiArCSAqIHRvIHByb3Zp ZGUgYW4gYXV0b21hdGljIHNlbGVjdGlvbiBmcm9tIHRoZSBvdGhlciBjdHgtPmVuZ2luZVtdLiBJ dAo+ICsJICogZW1wbG95cyBsb2FkLWJhbGFuY2luZyB0byBldmVubHkgZGlzdHJpYnV0ZSB0aGUg d29ya2xvYWQgdGhlCj4gKwkgKiBhcnJheS4gSWYgd2Ugc3VibWl0IE4gc3Bpbm5lcnMsIHdlIGV4 cGVjdCB0aGVtIHRvIGJlIHNpbXVsdGFuZW91c2x5Cj4gKwkgKiBydW5uaW5nIGFjcm9zcyBOIGVu Z2luZXMgYW5kIHVzZSBQTVUgdG8gY29uZmlybSB0aGF0IHRoZSBlbnRpcmUKPiArCSAqIHNldCBv ZiBlbmdpbmVzIGFyZSBidXN5Lgo+ICsJICoKPiArCSAqIFdlIGNvbXBsaWNhdGUgbWF0dGVycyBi eSBpbnRlcnNwZXJzaW5nIHNob3J0LWxpdmVkIHRhc2tzIHRvCj4gKwkgKiBjaGFsbGVuZ2UgdGhl IGtlcm5lbCB0byBzZWFyY2ggZm9yIHNwYWNlIGluIHdoaWNoIHRvIGluc2VydCBuZXcKPiArCSAq IGJhdGNoZXMuCj4gKwkgKi8KPiArCj4gKwlmb3IgKGludCBjbGFzcyA9IDA7IGNsYXNzIDwgMzI7 IGNsYXNzKyspIHsKPiArCQlzdHJ1Y3QgaTkxNV9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgKmNpOwo+ ICsJCWlndF9zcGluX3QgKnNwaW4gPSBOVUxMOwo+ICsJCUlHVF9DT1JLX0ZFTkNFKGNvcmspOwo+ ICsJCXVuc2lnbmVkIGludCBjb3VudDsKPiArCQlkb3VibGUgbG9hZDsKPiArCQlpbnQgZmVuY2Ug PSAtMTsKPiArCQlpbnQgKnBtdTsKPiArCj4gKwkJY2kgPSBsaXN0X2VuZ2luZXMoaTkxNSwgMXUg PDwgY2xhc3MsICZjb3VudCk7Cj4gKwkJaWYgKCFjaSkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJ CXBtdSA9IG1hbGxvYyhzaXplb2YoKnBtdSkgKiBjb3VudCk7Cj4gKwkJaWd0X2Fzc2VydChwbXUp Owo+ICsKPiArCQlpZiAoZmxhZ3MgJiBMQVRFKQo+ICsJCQlmZW5jZSA9IGlndF9jb3JrX3BsdWco JmNvcmssIGk5MTUpOwo+ICsKPiArCQlwbXVbMF0gPSAtMTsKPiArCQlmb3IgKHVuc2lnbmVkIGlu dCBuID0gMDsgbiA8IGNvdW50OyBuKyspIHsKPiArCQkJdWludDMyX3QgY3R4Owo+ICsKPiArCQkJ cG11W25dID0gYWRkX3BtdShwbXVbMF0sICZjaVtuXSk7Cj4gKwo+ICsJCQlpZiAoZmxhZ3MgJiBQ VUxTRSkgewo+ICsJCQkJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBlYiA9IHsKPiAr CQkJCQkuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIoJmJhdGNoKSwKPiArCQkJCQkuYnVm ZmVyX2NvdW50ID0gMSwKPiArCQkJCQkucnN2ZDIgPSBmZW5jZSwKPiArCQkJCQkuZmxhZ3MgPSBm bGFncyAmIExBVEUgPyBJOTE1X0VYRUNfRkVOQ0VfSU4gOiAwLAo+ICsJCQkJfTsKPiArCQkJCWdl bV9leGVjYnVmKGk5MTUsICZlYik7Cj4gKwkJCX0KPiArCj4gKwkJCS8qCj4gKwkJCSAqIEVhY2gg c3Bpbm5lciBuZWVkcyB0byBiZSBvbmUgYSBuZXcgdGltZWxpbmUsCj4gKwkJCSAqIG90aGVyd2lz ZSB0aGV5IHdpbGwganVzdCBzaXQgaW4gdGhlIHNpbmdsZSBxdWV1ZQo+ICsJCQkgKiBhbmQgbm90 IHJ1biBjb25jdXJyZW50bHkuCj4gKwkJCSAqLwo+ICsJCQljdHggPSBsb2FkX2JhbGFuY2VyX2Ny ZWF0ZShpOTE1LCBjaSwgY291bnQpOwo+ICsKPiArCQkJaWYgKHNwaW4gPT0gTlVMTCkgewo+ICsJ CQkJc3BpbiA9IF9faWd0X3NwaW5fbmV3KGk5MTUsIC5jdHggPSBjdHgpOwo+ICsJCQl9IGVsc2Ug ewo+ICsJCQkJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBlYiA9IHsKPiArCQkJCQku YnVmZmVyc19wdHIgPSBzcGluLT5leGVjYnVmLmJ1ZmZlcnNfcHRyLAo+ICsJCQkJCS5idWZmZXJf Y291bnQgPSBzcGluLT5leGVjYnVmLmJ1ZmZlcl9jb3VudCwKPiArCQkJCQkucnN2ZDEgPSBjdHgs Cj4gKwkJCQkJLnJzdmQyID0gZmVuY2UsCj4gKwkJCQkJLmZsYWdzID0gZmxhZ3MgJiBMQVRFID8g STkxNV9FWEVDX0ZFTkNFX0lOIDogMCwKPiArCQkJCX07Cj4gKwkJCQlnZW1fZXhlY2J1ZihpOTE1 LCAmZWIpOwo+ICsJCQl9Cj4gKwo+ICsJCQlnZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIGN0eCk7 Cj4gKwkJfQo+ICsKPiArCQlpZiAoZmxhZ3MgJiBMQVRFKSB7Cj4gKwkJCWlndF9jb3JrX3VucGx1 ZygmY29yayk7Cj4gKwkJCWNsb3NlKGZlbmNlKTsKPiArCQl9Cj4gKwo+ICsJCWxvYWQgPSBtZWFz dXJlX21pbl9sb2FkKHBtdVswXSwgY291bnQsIDEwMDAwKTsKPiArCQlpZ3Rfc3Bpbl9mcmVlKGk5 MTUsIHNwaW4pOwo+ICsKPiArCQljbG9zZShwbXVbMF0pOwo+ICsJCWZyZWUocG11KTsKPiArCj4g KwkJZnJlZShjaSk7Cj4gKwo+ICsJCWlndF9hc3NlcnRfZihsb2FkID4gMC45MCwKPiArCQkJICAg ICAibWluaW11bSBsb2FkIGZvciAlZCB4IGNsYXNzOiVkIHdhcyBmb3VuZCB0byBiZSBvbmx5ICUu MWYlJSBidXN5XG4iLAo+ICsJCQkgICAgIGNvdW50LCBjbGFzcywgbG9hZCoxMDApOwo+ICsJCWdl bV9xdWllc2NlbnRfZ3B1KGk5MTUpOwo+ICsJfQo+ICsKPiArCWdlbV9jbG9zZShpOTE1LCBiYXRj aC5oYW5kbGUpOwo+ICsJZ2VtX3F1aWVzY2VudF9ncHUoaTkxNSk7Cj4gK30KPiArCj4gK3N0YXRp YyBjb25zdCBjaGFyICpjbGFzc190b19zdHIoaW50IGNsYXNzKQo+ICt7Cj4gKwljb25zdCBjaGFy ICpzdHJbXSA9IHsKPiArCQlbSTkxNV9FTkdJTkVfQ0xBU1NfUkVOREVSXSA9ICJyY3MiLAo+ICsJ CVtJOTE1X0VOR0lORV9DTEFTU19DT1BZXSA9ICJiY3MiLAo+ICsJCVtJOTE1X0VOR0lORV9DTEFT U19WSURFT10gPSAidmNzIiwKPiArCQlbSTkxNV9FTkdJTkVfQ0xBU1NfVklERU9fRU5IQU5DRV0g PSAidmVjcyIsCj4gKwl9Owo+ICsKPiArCWlmIChjbGFzcyA8IEFSUkFZX1NJWkUoc3RyKSkKPiAr CQlyZXR1cm4gc3RyW2NsYXNzXTsKPiArCj4gKwlyZXR1cm4gInVuayI7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIG5vcChpbnQgaTkxNSkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVj X29iamVjdDIgYmF0Y2ggPSB7Cj4gKwkJLmhhbmRsZSA9IGJhdGNoX2NyZWF0ZShpOTE1KSwKPiAr CX07Cj4gKwo+ICsJZm9yIChpbnQgY2xhc3MgPSAwOyBjbGFzcyA8IDMyOyBjbGFzcysrKSB7Cj4g KwkJc3RydWN0IGk5MTVfZW5naW5lX2NsYXNzX2luc3RhbmNlICpjaTsKPiArCQl1bnNpZ25lZCBp bnQgY291bnQ7Cj4gKwkJdWludDMyX3QgY3R4Owo+ICsKPiArCQljaSA9IGxpc3RfZW5naW5lcyhp OTE1LCAxdSA8PCBjbGFzcywgJmNvdW50KTsKPiArCQlpZiAoIWNpKQo+ICsJCQljb250aW51ZTsK PiArCj4gKwkJY3R4ID0gbG9hZF9iYWxhbmNlcl9jcmVhdGUoaTkxNSwgY2ksIGNvdW50KTsKPiAr Cj4gKwkJZm9yIChpbnQgbiA9IDA7IG4gPCBjb3VudDsgbisrKSB7Cj4gKwkJCXN0cnVjdCBkcm1f aTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZiA9IHsKPiArCQkJCS5idWZmZXJzX3B0ciA9IHRv X3VzZXJfcG9pbnRlcigmYmF0Y2gpLAo+ICsJCQkJLmJ1ZmZlcl9jb3VudCA9IDEsCj4gKwkJCQku ZmxhZ3MgPSBuICsgMSwKPiArCQkJCS5yc3ZkMSA9IGN0eCwKPiArCQkJfTsKPiArCQkJc3RydWN0 IHRpbWVzcGVjIHR2ID0ge307Cj4gKwkJCXVuc2lnbmVkIGxvbmcgbm9wczsKPiArCQkJZG91Ymxl IHQ7Cj4gKwo+ICsJCQlpZ3RfbnNlY19lbGFwc2VkKCZ0dik7Cj4gKwkJCW5vcHMgPSAwOwo+ICsJ CQlkbyB7Cj4gKwkJCQlmb3IgKGludCByID0gMDsgciA8IDEwMjQ7IHIrKykKPiArCQkJCQlnZW1f ZXhlY2J1ZihpOTE1LCAmZXhlY2J1Zik7Cj4gKwkJCQlub3BzICs9IDEwMjQ7Cj4gKwkJCX0gd2hp bGUgKGlndF9zZWNvbmRzX2VsYXBzZWQoJnR2KSA8IDIpOwo+ICsJCQlnZW1fc3luYyhpOTE1LCBi YXRjaC5oYW5kbGUpOwo+ICsKPiArCQkJdCA9IGlndF9uc2VjX2VsYXBzZWQoJnR2KSAqIDFlLTMg LyBub3BzOwo+ICsJCQlpZ3RfaW5mbygiJXM6JWQgJS4zZnVzXG4iLCBjbGFzc190b19zdHIoY2xh c3MpLCBuLCB0KTsKPiArCQl9Cj4gKwo+ICsJCXsKPiArCQkJc3RydWN0IGRybV9pOTE1X2dlbV9l eGVjYnVmZmVyMiBleGVjYnVmID0gewo+ICsJCQkJLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2lu dGVyKCZiYXRjaCksCj4gKwkJCQkuYnVmZmVyX2NvdW50ID0gMSwKPiArCQkJCS5yc3ZkMSA9IGN0 eCwKPiArCQkJfTsKPiArCQkJc3RydWN0IHRpbWVzcGVjIHR2ID0ge307Cj4gKwkJCXVuc2lnbmVk IGxvbmcgbm9wczsKPiArCQkJZG91YmxlIHQ7Cj4gKwo+ICsJCQlpZ3RfbnNlY19lbGFwc2VkKCZ0 dik7Cj4gKwkJCW5vcHMgPSAwOwo+ICsJCQlkbyB7Cj4gKwkJCQlmb3IgKGludCByID0gMDsgciA8 IDEwMjQ7IHIrKykKPiArCQkJCQlnZW1fZXhlY2J1ZihpOTE1LCAmZXhlY2J1Zik7Cj4gKwkJCQlu b3BzICs9IDEwMjQ7Cj4gKwkJCX0gd2hpbGUgKGlndF9zZWNvbmRzX2VsYXBzZWQoJnR2KSA8IDIp Owo+ICsJCQlnZW1fc3luYyhpOTE1LCBiYXRjaC5oYW5kbGUpOwo+ICsKPiArCQkJdCA9IGlndF9u c2VjX2VsYXBzZWQoJnR2KSAqIDFlLTMgLyBub3BzOwo+ICsJCQlpZ3RfaW5mbygiJXM6KiAlLjNm dXNcbiIsIGNsYXNzX3RvX3N0cihjbGFzcyksIHQpOwo+ICsJCX0KPiArCj4gKwo+ICsJCWlndF9m b3JrKGNoaWxkLCBjb3VudCkgewo+ICsJCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIy IGV4ZWNidWYgPSB7Cj4gKwkJCQkuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIoJmJhdGNo KSwKPiArCQkJCS5idWZmZXJfY291bnQgPSAxLAo+ICsJCQkJLmZsYWdzID0gY2hpbGQgKyAxLAo+ ICsJCQkJLnJzdmQxID0gZ2VtX2NvbnRleHRfY2xvbmUoaTkxNSwgY3R4LAo+ICsJCQkJCQkJICAg STkxNV9DT05URVhUX0NMT05FX0VOR0lORVMsIDApLAo+ICsJCQl9Owo+ICsJCQlzdHJ1Y3QgdGlt ZXNwZWMgdHYgPSB7fTsKPiArCQkJdW5zaWduZWQgbG9uZyBub3BzOwo+ICsJCQlkb3VibGUgdDsK PiArCj4gKwkJCWlndF9uc2VjX2VsYXBzZWQoJnR2KTsKPiArCQkJbm9wcyA9IDA7Cj4gKwkJCWRv IHsKPiArCQkJCWZvciAoaW50IHIgPSAwOyByIDwgMTAyNDsgcisrKQo+ICsJCQkJCWdlbV9leGVj YnVmKGk5MTUsICZleGVjYnVmKTsKPiArCQkJCW5vcHMgKz0gMTAyNDsKPiArCQkJfSB3aGlsZSAo aWd0X3NlY29uZHNfZWxhcHNlZCgmdHYpIDwgMik7Cj4gKwkJCWdlbV9zeW5jKGk5MTUsIGJhdGNo LmhhbmRsZSk7Cj4gKwo+ICsJCQl0ID0gaWd0X25zZWNfZWxhcHNlZCgmdHYpICogMWUtMyAvIG5v cHM7Cj4gKwkJCWlndF9pbmZvKCJbJWRdICVzOiVkICUuM2Z1c1xuIiwKPiArCQkJCSBjaGlsZCwg Y2xhc3NfdG9fc3RyKGNsYXNzKSwgY2hpbGQsIHQpOwo+ICsKPiArCQkJbWVtc2V0KCZ0diwgMCwg c2l6ZW9mKHR2KSk7Cj4gKwkJCWV4ZWNidWYuZmxhZ3MgPSAwOwo+ICsKPiArCQkJaWd0X25zZWNf ZWxhcHNlZCgmdHYpOwo+ICsJCQlub3BzID0gMDsKPiArCQkJZG8gewo+ICsJCQkJZm9yIChpbnQg ciA9IDA7IHIgPCAxMDI0OyByKyspCj4gKwkJCQkJZ2VtX2V4ZWNidWYoaTkxNSwgJmV4ZWNidWYp Owo+ICsJCQkJbm9wcyArPSAxMDI0Owo+ICsJCQl9IHdoaWxlIChpZ3Rfc2Vjb25kc19lbGFwc2Vk KCZ0dikgPCAyKTsKPiArCQkJZ2VtX3N5bmMoaTkxNSwgYmF0Y2guaGFuZGxlKTsKPiArCj4gKwkJ CXQgPSBpZ3RfbnNlY19lbGFwc2VkKCZ0dikgKiAxZS0zIC8gbm9wczsKPiArCQkJaWd0X2luZm8o IlslZF0gJXM6KiAlLjNmdXNcbiIsCj4gKwkJCQkgY2hpbGQsIGNsYXNzX3RvX3N0cihjbGFzcyks IHQpOwo+ICsKPiArCQkJZ2VtX2NvbnRleHRfZGVzdHJveShpOTE1LCBleGVjYnVmLnJzdmQxKTsK PiArCQl9Cj4gKwo+ICsJCWlndF93YWl0Y2hpbGRyZW4oKTsKPiArCj4gKwkJZ2VtX2NvbnRleHRf ZGVzdHJveShpOTE1LCBjdHgpOwo+ICsJCWZyZWUoY2kpOwo+ICsJfQo+ICsKPiArCWdlbV9jbG9z ZShpOTE1LCBiYXRjaC5oYW5kbGUpOwo+ICsJZ2VtX3F1aWVzY2VudF9ncHUoaTkxNSk7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIHBpbmcoaW50IGk5MTUsIHVpbnQzMl90IGN0eCwgdW5zaWduZWQg aW50IGVuZ2luZSkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2Jq ID0gewo+ICsJCS5oYW5kbGUgPSBiYXRjaF9jcmVhdGUoaTkxNSksCj4gKwl9Owo+ICsJc3RydWN0 IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmID0gewo+ICsJCS5idWZmZXJzX3B0ciA9 IHRvX3VzZXJfcG9pbnRlcigmb2JqKSwKPiArCQkuYnVmZmVyX2NvdW50ID0gMSwKPiArCQkuZmxh Z3MgPSBlbmdpbmUsCj4gKwkJLnJzdmQxID0gY3R4LAo+ICsJfTsKPiArCWdlbV9leGVjYnVmKGk5 MTUsICZleGVjYnVmKTsKPiArCWdlbV9zeW5jKGk5MTUsIG9iai5oYW5kbGUpOwo+ICsJZ2VtX2Ns b3NlKGk5MTUsIG9iai5oYW5kbGUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBzZW1hcGhvcmUo aW50IGk5MTUpCj4gK3sKPiArCXVpbnQzMl90IGJsb2NrWzJdLCBzY3JhdGNoOwo+ICsJaWd0X3Nw aW5fdCAqc3BpblszXTsKPiArCj4gKwkvKgo+ICsJICogSWYgd2UgYXJlIHVzaW5nIEhXIHNlbWFw aG9yZXMgdG8gbGF1bmNoIHNlcmlhbGlzZWQgcmVxdWVzdHMKPiArCSAqIG9uIGRpZmZlcmVudCBl bmdpbmUgY29uY3VycmVudGx5LCB3ZSB3YW50IHRvIHZlcmlmeSB0aGF0IHJlYWwKPiArCSAqIHdv cmsgaXMgdW5pbXBlZGVkLgo+ICsJICovCj4gKwlpZ3RfcmVxdWlyZShnZW1fc2NoZWR1bGVyX2hh c19wcmVlbXB0aW9uKGk5MTUpKTsKPiArCj4gKwlibG9ja1swXSA9IGdlbV9jb250ZXh0X2NyZWF0 ZShpOTE1KTsKPiArCWJsb2NrWzFdID0gZ2VtX2NvbnRleHRfY3JlYXRlKGk5MTUpOwo+ICsKPiAr CXNjcmF0Y2ggPSBnZW1fY3JlYXRlKGk5MTUsIDQwOTYpOwo+ICsJc3BpblsyXSA9IGlndF9zcGlu X25ldyhpOTE1LCAuZGVwZW5kZW5jeSA9IHNjcmF0Y2gpOwo+ICsJZm9yIChpbnQgY2xhc3MgPSAx OyBjbGFzcyA8IDMyOyBjbGFzcysrKSB7Cj4gKwkJc3RydWN0IGk5MTVfZW5naW5lX2NsYXNzX2lu c3RhbmNlICpjaTsKPiArCQl1bnNpZ25lZCBpbnQgY291bnQ7Cj4gKwkJdWludDMyX3QgdmlwOwo+ ICsKPiArCQljaSA9IGxpc3RfZW5naW5lcyhpOTE1LCAxdSA8PCBjbGFzcywgJmNvdW50KTsKPiAr CQlpZiAoIWNpKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJaWYgKGNvdW50IDwgQVJSQVlfU0la RShibG9jaykpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQkvKiBFbnN1cmUgdGhhdCB3ZSBjb21w bGV0ZWx5IG9jY3VweSBhbGwgZW5naW5lcyBpbiB0aGlzIGdyb3VwICovCj4gKwkJY291bnQgPSBB UlJBWV9TSVpFKGJsb2NrKTsKPiArCj4gKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsr KSB7Cj4gKwkJCXNldF9sb2FkX2JhbGFuY2VyKGk5MTUsIGJsb2NrW2ldLCBjaSwgY291bnQpOwo+ ICsJCQlzcGluW2ldID0gX19pZ3Rfc3Bpbl9uZXcoaTkxNSwKPiArCQkJCQkJIC5jdHggPSBibG9j a1tpXSwKPiArCQkJCQkJIC5kZXBlbmRlbmN5ID0gc2NyYXRjaCk7Cj4gKwkJfQo+ICsKPiArCQkv Kgo+ICsJCSAqIEVpdGhlciB3ZSBoYXZlbid0IGJsb2NrZWQgYm90aCBlbmdpbmVzIHdpdGggc2Vt YXBob3JlcywKPiArCQkgKiBvciB3ZSBsZXQgdGhlIHZpcCB0aHJvdWdoLiBJZiBub3QsIHdlIGhh bmcuCj4gKwkJICovCj4gKwkJdmlwID0gZ2VtX2NvbnRleHRfY3JlYXRlKGk5MTUpOwo+ICsJCXNl dF9sb2FkX2JhbGFuY2VyKGk5MTUsIHZpcCwgY2ksIGNvdW50KTsKPiArCQlwaW5nKGk5MTUsIHZp cCwgMCk7Cj4gKwkJZ2VtX2NvbnRleHRfZGVzdHJveShpOTE1LCB2aXApOwo+ICsKPiArCQlmb3Ig KGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCj4gKwkJCWlndF9zcGluX2ZyZWUoaTkxNSwgc3Bp bltpXSk7Cj4gKwo+ICsJCWZyZWUoY2kpOwo+ICsJfQo+ICsJaWd0X3NwaW5fZnJlZShpOTE1LCBz cGluWzJdKTsKPiArCWdlbV9jbG9zZShpOTE1LCBzY3JhdGNoKTsKPiArCj4gKwlnZW1fY29udGV4 dF9kZXN0cm95KGk5MTUsIGJsb2NrWzFdKTsKPiArCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwg YmxvY2tbMF0pOwo+ICsKPiArCWdlbV9xdWllc2NlbnRfZ3B1KGk5MTUpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBzbW9rZXRlc3QoaW50IGk5MTUsIGludCB0aW1lb3V0KQo+ICt7Cj4gKwlzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBiYXRjaFsyXSA9IHsKPiArCQl7IC5oYW5kbGUg PSBfX2JhdGNoX2NyZWF0ZShpOTE1LCAxNjM4MCkgfQo+ICsJfTsKPiArCXVuc2lnbmVkIGludCBu Y29udGV4dCA9IDA7Cj4gKwl1aW50MzJfdCAqY29udGV4dHMgPSBOVUxMOwo+ICsJdWludDMyX3Qg KmhhbmRsZXMgPSBOVUxMOwo+ICsKPiArCWlndF9yZXF1aXJlX3N3X3N5bmMoKTsKPiArCj4gKwlm b3IgKGludCBjbGFzcyA9IDA7IGNsYXNzIDwgMzI7IGNsYXNzKyspIHsKPiArCQlzdHJ1Y3QgaTkx NV9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgKmNpOwo+ICsJCXVuc2lnbmVkIGludCBjb3VudCA9IDA7 Cj4gKwo+ICsJCWNpID0gbGlzdF9lbmdpbmVzKGk5MTUsIDF1IDw8IGNsYXNzLCAmY291bnQpOwo+ ICsJCWlmICghY2kgfHwgY291bnQgPCAyKSB7Cj4gKwkJCWZyZWUoY2kpOwo+ICsJCQljb250aW51 ZTsKPiArCQl9Cj4gKwo+ICsJCW5jb250ZXh0ICs9IDEyODsKPiArCQljb250ZXh0cyA9IHJlYWxs b2MoY29udGV4dHMsIHNpemVvZigqY29udGV4dHMpICogbmNvbnRleHQpOwo+ICsJCWlndF9hc3Nl cnQoY29udGV4dHMpOwo+ICsKPiArCQlmb3IgKHVuc2lnbmVkIGludCBuID0gbmNvbnRleHQgLSAx Mjg7IG4gPCBuY29udGV4dDsgbisrKSB7Cj4gKwkJCWNvbnRleHRzW25dID0gbG9hZF9iYWxhbmNl cl9jcmVhdGUoaTkxNSwgY2ksIGNvdW50KTsKPiArCQkJaWd0X2Fzc2VydChjb250ZXh0c1tuXSk7 Cj4gKwkJfQo+ICsKPiArCQlmcmVlKGNpKTsKPiArCX0KPiArCWlndF9kZWJ1ZygiQ3JlYXRlZCAl ZCB2aXJ0dWFsIGVuZ2luZXMgKG9uZSBwZXIgY29udGV4dClcbiIsIG5jb250ZXh0KTsKPiArCWln dF9yZXF1aXJlKG5jb250ZXh0KTsKPiArCj4gKwljb250ZXh0cyA9IHJlYWxsb2MoY29udGV4dHMs IHNpemVvZigqY29udGV4dHMpICogbmNvbnRleHQgKiA0KTsKPiArCWlndF9hc3NlcnQoY29udGV4 dHMpOwo+ICsJbWVtY3B5KGNvbnRleHRzICsgbmNvbnRleHQsIGNvbnRleHRzLCBuY29udGV4dCAq IHNpemVvZigqY29udGV4dHMpKTsKPiArCW5jb250ZXh0ICo9IDI7Cj4gKwltZW1jcHkoY29udGV4 dHMgKyBuY29udGV4dCwgY29udGV4dHMsIG5jb250ZXh0ICogc2l6ZW9mKCpjb250ZXh0cykpOwo+ ICsJbmNvbnRleHQgKj0gMjsKPiArCj4gKwloYW5kbGVzID0gbWFsbG9jKHNpemVvZigqaGFuZGxl cykgKiBuY29udGV4dCk7Cj4gKwlpZ3RfYXNzZXJ0KGhhbmRsZXMpOwo+ICsJZm9yICh1bnNpZ25l ZCBpbnQgbiA9IDA7IG4gPCBuY29udGV4dDsgbisrKQo+ICsJCWhhbmRsZXNbbl0gPSBnZW1fY3Jl YXRlKGk5MTUsIDQwOTYpOwo+ICsKPiArCWlndF91bnRpbF90aW1lb3V0KHRpbWVvdXQpIHsKPiAr CQl1bnNpZ25lZCBpbnQgY291bnQgPSAxICsgKHJhbmQoKSAlIChuY29udGV4dCAtIDEpKTsKPiAr CQlJR1RfQ09SS19GRU5DRShjb3JrKTsKPiArCQlpbnQgZmVuY2UgPSBpZ3RfY29ya19wbHVnKCZj b3JrLCBpOTE1KTsKPiArCj4gKwkJZm9yICh1bnNpZ25lZCBpbnQgbiA9IDA7IG4gPCBjb3VudDsg bisrKSB7Cj4gKwkJCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZWIgPSB7Cj4gKwkJ CQkuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIoYmF0Y2gpLAo+ICsJCQkJLmJ1ZmZlcl9j b3VudCA9IEFSUkFZX1NJWkUoYmF0Y2gpLAo+ICsJCQkJLnJzdmQxID0gY29udGV4dHNbbl0sCj4g KwkJCQkucnN2ZDIgPSBmZW5jZSwKPiArCQkJCS5mbGFncyA9IEk5MTVfRVhFQ19CQVRDSF9GSVJT VCB8IEk5MTVfRVhFQ19GRU5DRV9JTiwKPiArCQkJfTsKPiArCQkJYmF0Y2hbMV0uaGFuZGxlID0g aGFuZGxlc1tuXTsKPiArCQkJZ2VtX2V4ZWNidWYoaTkxNSwgJmViKTsKPiArCQl9Cj4gKwkJaWd0 X3Blcm11dGVfYXJyYXkoaGFuZGxlcywgY291bnQsIGlndF9leGNoYW5nZV9pbnQpOwo+ICsKPiAr CQlpZ3RfY29ya191bnBsdWcoJmNvcmspOwo+ICsJCWZvciAodW5zaWduZWQgaW50IG4gPSAwOyBu IDwgY291bnQ7IG4rKykKPiArCQkJZ2VtX3N5bmMoaTkxNSwgaGFuZGxlc1tuXSk7Cj4gKwo+ICsJ CWNsb3NlKGZlbmNlKTsKPiArCX0KPiArCj4gKwlmb3IgKHVuc2lnbmVkIGludCBuID0gMDsgbiA8 IG5jb250ZXh0OyBuKyspIHsKPiArCQlnZW1fY2xvc2UoaTkxNSwgaGFuZGxlc1tuXSk7Cj4gKwkJ X19nZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIGNvbnRleHRzW25dKTsKPiArCX0KPiArCWZyZWUo aGFuZGxlcyk7Cj4gKwlmcmVlKGNvbnRleHRzKTsKPiArCWdlbV9jbG9zZShpOTE1LCBiYXRjaFsw XS5oYW5kbGUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBoYXNfY29udGV4dF9lbmdpbmVzKGlu dCBpOTE1KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0gcCA9IHsK PiArCQkucGFyYW0gPSBJOTE1X0NPTlRFWFRfUEFSQU1fRU5HSU5FUywKPiArCX07Cj4gKwo+ICsJ cmV0dXJuIF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGk5MTUsICZwKSA9PSAwOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgYm9vbCBoYXNfbG9hZF9iYWxhbmNlcihpbnQgaTkxNSkKPiArewo+ICsJc3RydWN0 IGk5MTVfZW5naW5lX2NsYXNzX2luc3RhbmNlIGNpID0ge307Cj4gKwl1aW50MzJfdCBjdHg7Cj4g KwlpbnQgZXJyOwo+ICsKPiArCWN0eCA9IGdlbV9jb250ZXh0X2NyZWF0ZShpOTE1KTsKPiArCWVy ciA9IF9fc2V0X2xvYWRfYmFsYW5jZXIoaTkxNSwgY3R4LCAmY2ksIDEpOwo+ICsJZ2VtX2NvbnRl eHRfZGVzdHJveShpOTE1LCBjdHgpOwo+ICsKPiArCXJldHVybiBlcnIgPT0gMDsKPiArfQo+ICsK PiAraWd0X21haW4KPiArewo+ICsJaW50IGk5MTUgPSAtMTsKPiArCj4gKwlpZ3Rfc2tpcF9vbl9z aW11bGF0aW9uKCk7Cj4gKwo+ICsJaWd0X2ZpeHR1cmUgewo+ICsJCWk5MTUgPSBkcm1fb3Blbl9k cml2ZXIoRFJJVkVSX0lOVEVMKTsKPiArCQlpZ3RfcmVxdWlyZV9nZW0oaTkxNSk7Cj4gKwo+ICsJ CWdlbV9yZXF1aXJlX2NvbnRleHRzKGk5MTUpOwo+ICsJCWlndF9yZXF1aXJlKGhhc19jb250ZXh0 X2VuZ2luZXMoaTkxNSkpOwo+ICsJCWlndF9yZXF1aXJlKGhhc19sb2FkX2JhbGFuY2VyKGk5MTUp KTsKPiArCj4gKwkJaWd0X2ZvcmtfaGFuZ19kZXRlY3RvcihpOTE1KTsKPiArCX0KPiArCj4gKwlp Z3Rfc3VidGVzdCgiaW52YWxpZC1iYWxhbmNlciIpCj4gKwkJaW52YWxpZF9iYWxhbmNlcihpOTE1 KTsKPiArCj4gKwlpZ3Rfc3VidGVzdCgiaW5kaXZpZHVhbCIpCj4gKwkJaW5kaXZpZHVhbChpOTE1 KTsKPiArCj4gKwlpZ3Rfc3VidGVzdCgiaW5kaWNlcyIpCj4gKwkJaW5kaWNlcyhpOTE1KTsKPiAr Cj4gKwlpZ3Rfc3VidGVzdCgiYnVzeSIpCj4gKwkJYnVzeShpOTE1KTsKPiArCj4gKwlpZ3Rfc3Vi dGVzdF9ncm91cCB7Cj4gKwkJc3RhdGljIGNvbnN0IHN0cnVjdCB7Cj4gKwkJCWNvbnN0IGNoYXIg Km5hbWU7Cj4gKwkJCXVuc2lnbmVkIGludCBmbGFnczsKPiArCQl9IHBoYXNlc1tdID0gewo+ICsJ CQl7ICIiLCAwIH0sCj4gKwkJCXsgIi1wdWxzZSIsIFBVTFNFIH0sCj4gKwkJCXsgIi1sYXRlIiwg TEFURSB9LAo+ICsJCQl7ICItbGF0ZS1wdWxzZSIsIFBVTFNFIHwgTEFURSB9LAo+ICsJCQl7IH0K PiArCQl9Owo+ICsJCWZvciAodHlwZW9mKCpwaGFzZXMpICpwID0gcGhhc2VzOyBwLT5uYW1lOyBw KyspCj4gKwkJCWlndF9zdWJ0ZXN0X2YoImZ1bGwlcyIsIHAtPm5hbWUpCj4gKwkJCQlmdWxsKGk5 MTUsIHAtPmZsYWdzKTsKPiArCX0KPiArCj4gKwlpZ3Rfc3VidGVzdCgibm9wIikKPiArCQlub3Ao aTkxNSk7Cj4gKwo+ICsJaWd0X3N1YnRlc3QoInNlbWFwaG9yZSIpCj4gKwkJc2VtYXBob3JlKGk5 MTUpOwo+ICsKPiArCWlndF9zdWJ0ZXN0KCJzbW9rZSIpCj4gKwkJc21va2V0ZXN0KGk5MTUsIDIw KTsKPiArCj4gKwlpZ3RfZml4dHVyZSB7Cj4gKwkJaWd0X3N0b3BfaGFuZ19kZXRlY3RvcigpOwo+ ICsJfQo+ICt9Cj4gZGlmZiAtLWdpdCBhL3Rlc3RzL21lc29uLmJ1aWxkIGIvdGVzdHMvbWVzb24u YnVpbGQKPiBpbmRleCBiN2U1NjEwM2QuLjIwMzY2YjY4YiAxMDA2NDQKPiAtLS0gYS90ZXN0cy9t ZXNvbi5idWlsZAo+ICsrKyBiL3Rlc3RzL21lc29uLmJ1aWxkCj4gQEAgLTI5Myw2ICsyOTMsMTMg QEAgdGVzdF9leGVjdXRhYmxlcyArPSBleGVjdXRhYmxlKCdnZW1fZWlvJywKPiAgIAkgICBpbnN0 YWxsIDogdHJ1ZSkKPiAgIHRlc3RfbGlzdCArPSAnZ2VtX2VpbycKPiAgIAo+ICt0ZXN0X2V4ZWN1 dGFibGVzICs9IGV4ZWN1dGFibGUoJ2dlbV9leGVjX2JhbGFuY2VyJywgJ2k5MTUvZ2VtX2V4ZWNf YmFsYW5jZXIuYycsCj4gKwkgICBkZXBlbmRlbmNpZXMgOiB0ZXN0X2RlcHMgKyBbIGxpYl9pZ3Rf cGVyZiBdLAo+ICsJICAgaW5zdGFsbF9kaXIgOiBsaWJleGVjZGlyLAo+ICsJICAgaW5zdGFsbF9y cGF0aCA6IGxpYmV4ZWNkaXJfcnBhdGhkaXIsCj4gKwkgICBpbnN0YWxsIDogdHJ1ZSkKPiArdGVz dF9wcm9ncyArPSAnZ2VtX2V4ZWNfYmFsYW5jZXInCj4gKwo+ICAgdGVzdF9leGVjdXRhYmxlcyAr PSBleGVjdXRhYmxlKCdnZW1fbW9jc19zZXR0aW5ncycsCj4gICAJICAgam9pbl9wYXRocygnaTkx NScsICdnZW1fbW9jc19zZXR0aW5ncy5jJyksCj4gICAJICAgZGVwZW5kZW5jaWVzIDogdGVzdF9k ZXBzICsgWyBsaWJfaWd0X3BlcmYgXSwKPiAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9pZ3QtZGV2