From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Mika Kuoppala In-Reply-To: <20190116093509.30195-2-chris@chris-wilson.co.uk> References: <20190116093509.30195-1-chris@chris-wilson.co.uk> <20190116093509.30195-2-chris@chris-wilson.co.uk> Date: Wed, 16 Jan 2019 16:22:59 +0200 Message-ID: <87fttsy94s.fsf@gaia.fi.intel.com> MIME-Version: 1.0 Subject: Re: [igt-dev] [Intel-gfx] [PATCH i-g-t 2/3] i915/gem_cpu_reloc: Use a self-modifying chained batch List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 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, matthew.auld@intel.com, tvrtko.ursulin@intel.com List-ID: Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+IHdyaXRlczoKCj4gVXNlIGFu b3RoZXIgc2Vuc2l0aXZlIENQVSByZWxvYyB0byBlbWl0IGEgY2hhaW5lZCBiYXRjaCBmcm9tIGlu c2lkZSB0aGUKPiB1cGRhdGVkIGJ1ZmZlciB0byByZWR1Y2UgdGhlIHdvcmtsb2FkIG9uIHNsb3cg bWFjaGluZXMgdG8gZml0IHdpdGhpbiB0aGUKPiBDSSB0aW1lb3V0Lgo+Cj4gUmVmZXJlbmNlczog aHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4MjQ4Cj4gU2ln bmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4gLS0t Cj4gIHRlc3RzL2k5MTUvZ2VtX2NwdV9yZWxvYy5jIHwgMzQ3ICsrKysrKysrKysrKysrKysrKysr LS0tLS0tLS0tLS0tLS0tLS0KPiAgMSBmaWxlIGNoYW5nZWQsIDE4OSBpbnNlcnRpb25zKCspLCAx NTggZGVsZXRpb25zKC0pCj4KPiBkaWZmIC0tZ2l0IGEvdGVzdHMvaTkxNS9nZW1fY3B1X3JlbG9j LmMgYi90ZXN0cy9pOTE1L2dlbV9jcHVfcmVsb2MuYwo+IGluZGV4IDg4MmMzMTJkNC4uMzNjNGU0 ZTBmIDEwMDY0NAo+IC0tLSBhL3Rlc3RzL2k5MTUvZ2VtX2NwdV9yZWxvYy5jCj4gKysrIGIvdGVz dHMvaTkxNS9nZW1fY3B1X3JlbG9jLmMKPiBAQCAtNTksMjE0ICs1OSwyNDUgQEAKPiAgCj4gICNp bmNsdWRlICJpbnRlbF9idWZtZ3IuaCIKPiAgCj4gLUlHVF9URVNUX0RFU0NSSVBUSU9OKCJUZXN0 IHRoZSByZWxvY2F0aW9ucyB0aHJvdWdoIHRoZSBDUFUgZG9tYWluLiIpOwo+ICsjZGVmaW5lIE1J X0lOU1RSKG9wY29kZSwgZmxhZ3MpICgob3Bjb2RlKSA8PCAyMyB8IChmbGFncykpCj4gIAo+IC1z dGF0aWMgdWludDMyX3QgdXNlX2JsdDsKPiArSUdUX1RFU1RfREVTQ1JJUFRJT04oIlRlc3QgdGhl IHJlbG9jYXRpb25zIHRocm91Z2ggdGhlIENQVSBkb21haW4uIik7Cj4gIAo+IC1zdGF0aWMgdm9p ZCBjb3B5KGludCBmZCwgdWludDMyX3QgYmF0Y2gsIHVpbnQzMl90IHNyYywgdWludDMyX3QgZHN0 KQo+ICtzdGF0aWMgdWludDMyX3QgKgo+ICtnZW4yX2VtaXRfc3RvcmVfYWRkcih1aW50MzJfdCAq Y3MsIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSAqYWRkcikKPiAgewo+IC0J c3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmOwo+IC0Jc3RydWN0IGRybV9p OTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IGdlbV9yZWxvY1syXTsKPiAtCXN0cnVjdCBkcm1faTkx NV9nZW1fZXhlY19vYmplY3QyIGdlbV9leGVjWzNdOwo+IC0KPiAtCWdlbV9yZWxvY1swXS5vZmZz ZXQgPSA0ICogc2l6ZW9mKHVpbnQzMl90KTsKPiAtCWdlbV9yZWxvY1swXS5kZWx0YSA9IDA7Cj4g LQlnZW1fcmVsb2NbMF0udGFyZ2V0X2hhbmRsZSA9IGRzdDsKPiAtCWdlbV9yZWxvY1swXS5yZWFk X2RvbWFpbnMgPSBJOTE1X0dFTV9ET01BSU5fUkVOREVSOwo+IC0JZ2VtX3JlbG9jWzBdLndyaXRl X2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9SRU5ERVI7Cj4gLQlnZW1fcmVsb2NbMF0ucHJlc3Vt ZWRfb2Zmc2V0ID0gLTE7Cj4gLQo+IC0JZ2VtX3JlbG9jWzFdLm9mZnNldCA9IDcgKiBzaXplb2Yo dWludDMyX3QpOwo+IC0JaWYgKGludGVsX2dlbihpbnRlbF9nZXRfZHJtX2RldmlkKGZkKSkgPj0g OCkKPiAtCQlnZW1fcmVsb2NbMV0ub2Zmc2V0ICs9IHNpemVvZih1aW50MzJfdCk7Cj4gLQlnZW1f cmVsb2NbMV0uZGVsdGEgPSAwOwo+IC0JZ2VtX3JlbG9jWzFdLnRhcmdldF9oYW5kbGUgPSBzcmM7 Cj4gLQlnZW1fcmVsb2NbMV0ucmVhZF9kb21haW5zID0gSTkxNV9HRU1fRE9NQUlOX1JFTkRFUjsK PiAtCWdlbV9yZWxvY1sxXS53cml0ZV9kb21haW4gPSAwOwo+IC0JZ2VtX3JlbG9jWzFdLnByZXN1 bWVkX29mZnNldCA9IC0xOwo+IC0KPiAtCW1lbXNldChnZW1fZXhlYywgMCwgc2l6ZW9mKGdlbV9l eGVjKSk7Cj4gLQlnZW1fZXhlY1swXS5oYW5kbGUgPSBzcmM7Cj4gLQlnZW1fZXhlY1sxXS5oYW5k bGUgPSBkc3Q7Cj4gLQlnZW1fZXhlY1syXS5oYW5kbGUgPSBiYXRjaDsKPiAtCWdlbV9leGVjWzJd LnJlbG9jYXRpb25fY291bnQgPSAyOwo+IC0JZ2VtX2V4ZWNbMl0ucmVsb2NzX3B0ciA9IHRvX3Vz ZXJfcG9pbnRlcihnZW1fcmVsb2MpOwo+IC0KPiAtCW1lbXNldCgmZXhlY2J1ZiwgMCwgc2l6ZW9m KGV4ZWNidWYpKTsKPiAtCWV4ZWNidWYuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIoZ2Vt X2V4ZWMpOwo+IC0JZXhlY2J1Zi5idWZmZXJfY291bnQgPSAzOwo+IC0JZXhlY2J1Zi5iYXRjaF9s ZW4gPSA0MDk2Owo+IC0JZXhlY2J1Zi5mbGFncyA9IHVzZV9ibHQ7Cj4gLQo+IC0JZ2VtX2V4ZWNi dWYoZmQsICZleGVjYnVmKTsKPiArCSpjcysrID0gTUlfU1RPUkVfRFdPUkRfSU1NIC0gMTsKPiAr CWFkZHItPm9mZnNldCArPSBzaXplb2YoKmNzKTsKPiArCWNzICs9IDE7IC8qIGFkZHIgKi8KPiAr CWNzICs9IDE7IC8qIHZhbHVlOiBpbXBsaWNpdCAweGZmZmZmZmZmICovCj4gKwlyZXR1cm4gY3M7 Cj4gK30KPiArc3RhdGljIHVpbnQzMl90ICoKPiArZ2VuNF9lbWl0X3N0b3JlX2FkZHIodWludDMy X3QgKmNzLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgKmFkZHIpCj4gK3sK PiArCSpjcysrID0gTUlfU1RPUkVfRFdPUkRfSU1NOwo+ICsJKmNzKysgPSAwOwo+ICsJYWRkci0+ b2Zmc2V0ICs9IDIgKiBzaXplb2YoKmNzKTsKPiArCWNzICs9IDE7IC8qIGFkZHIgKi8KPiArCWNz ICs9IDE7IC8qIHZhbHVlOiBpbXBsaWNpdCAweGZmZmZmZmZmICovCj4gKwlyZXR1cm4gY3M7Cj4g K30KPiArc3RhdGljIHVpbnQzMl90ICoKPiArZ2VuOF9lbWl0X3N0b3JlX2FkZHIodWludDMyX3Qg KmNzLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgKmFkZHIpCj4gK3sKPiAr CSpjcysrID0gKE1JX1NUT1JFX0RXT1JEX0lNTSB8IDEgPDwgMjEpICsgMTsKPiArCWFkZHItPm9m ZnNldCArPSBzaXplb2YoKmNzKTsKPiArCWlndF9hc3NlcnQoKGFkZHItPmRlbHRhICYgNykgPT0g MCk7Cj4gKwljcyArPSAyOyAvKiBhZGRyICovCj4gKwljcyArPSAyOyAvKiB2YWx1ZTogaW1wbGlj aXQgMHhmZmZmZmZmZmZmZmZmZmZmICovCj4gKwlyZXR1cm4gY3M7Cj4gIH0KPiAgCj4gLXN0YXRp YyB2b2lkIGV4ZWMoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUpCj4gK3N0YXRpYyB1aW50MzJfdCAq Cj4gK2dlbjJfZW1pdF9iYl9zdGFydCh1aW50MzJfdCAqY3MsIHN0cnVjdCBkcm1faTkxNV9nZW1f cmVsb2NhdGlvbl9lbnRyeSAqcmVsb2MpCj4gIHsKPiAtCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhl Y2J1ZmZlcjIgZXhlY2J1ZjsKPiAtCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIGdl bV9leGVjOwo+ICsJKmNzKysgPSBNSV9CQVRDSF9CVUZGRVJfU1RBUlQgfCAyIDw8IDY7Cj4gKwly ZWxvYy0+b2Zmc2V0ICs9IHNpemVvZigqY3MpOwo+ICsJcmVsb2MtPmRlbHRhICs9IDE7Cj4gKwlj cyArPSAxOyAvKiBhZGRyICovCj4gKwlyZXR1cm4gY3M7Cj4gK30KPiArc3RhdGljIHVpbnQzMl90 ICoKPiArZ2VuNF9lbWl0X2JiX3N0YXJ0KHVpbnQzMl90ICpjcywgc3RydWN0IGRybV9pOTE1X2dl bV9yZWxvY2F0aW9uX2VudHJ5ICpyZWxvYykKPiArewo+ICsJKmNzKysgPSBNSV9CQVRDSF9CVUZG RVJfU1RBUlQgfCAyIDw8IDYgfCAxIDw8IDg7Cj4gKwlyZWxvYy0+b2Zmc2V0ICs9IHNpemVvZigq Y3MpOwo+ICsJY3MgKz0gMTsgLyogYWRkciAqLwo+ICsJcmV0dXJuIGNzOwo+ICt9Cj4gK3N0YXRp YyB1aW50MzJfdCAqCj4gK2dlbjZfZW1pdF9iYl9zdGFydCh1aW50MzJfdCAqY3MsIHN0cnVjdCBk cm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSAqcmVsb2MpCj4gK3sKPiArCSpjcysrID0gTUlf QkFUQ0hfQlVGRkVSX1NUQVJUIHwgMSA8PCA4Owo+ICsJcmVsb2MtPm9mZnNldCArPSBzaXplb2Yo KmNzKTsKPiArCWNzICs9IDE7IC8qIGFkZHIgKi8KPiArCXJldHVybiBjczsKPiArfQo+ICtzdGF0 aWMgdWludDMyX3QgKgo+ICtoc3dfZW1pdF9iYl9zdGFydCh1aW50MzJfdCAqY3MsIHN0cnVjdCBk cm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSAqcmVsb2MpCj4gK3sKPiArCSpjcysrID0gTUlf QkFUQ0hfQlVGRkVSX1NUQVJUIHwgMiA8PCA2IHwgMSA8PCA4IHwgMSA8PCAxMzsKPiArCXJlbG9j LT5vZmZzZXQgKz0gc2l6ZW9mKCpjcyk7Cj4gKwljcyArPSAxOyAvKiBhZGRyICovCj4gKwlyZXR1 cm4gY3M7Cj4gK30KPiArc3RhdGljIHVpbnQzMl90ICoKPiArZ2VuOF9lbWl0X2JiX3N0YXJ0KHVp bnQzMl90ICpjcywgc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5ICpyZWxvYykK PiArewo+ICsJaWYgKCgodWludHB0cl90KWNzICYgNykgPT0gMCkgewo+ICsJCSpjcysrID0gTUlf Tk9PUDsgLyogYWxpZ24gYWRkciBmb3IgTUlfU1RPUkVfRFdPUkRfSU1NICovCj4gKwkJcmVsb2Mt Pm9mZnNldCArPSBzaXplb2YoKmNzKTsKPiArCX0KCkFsaWduIGl0IHNvIHRoYXQgYWZ0ZXIgdGhl IGJiIHN0YXJ0IGVtaXR0ZWQgd2UgYXJlIGluIHJpZ2h0IGFsaWdubWVudD8KT3RoZXJ3aXNlIGl0 IGxvb2tzIGl0IHNob3VsZCBoYXZlICchJyBpbiBpdC4KLU1pa2EKCj4gIAo+IC0JbWVtc2V0KCZn ZW1fZXhlYywgMCwgc2l6ZW9mKGdlbV9leGVjKSk7Cj4gLQlnZW1fZXhlYy5oYW5kbGUgPSBoYW5k bGU7Cj4gKwkqY3MrKyA9IE1JX0JBVENIX0JVRkZFUl9TVEFSVCArIDE7Cj4gKwlyZWxvYy0+b2Zm c2V0ICs9IHNpemVvZigqY3MpOwo+ICsJY3MgKz0gMjsgLyogYWRkciAqLwo+ICAKPiAtCW1lbXNl dCgmZXhlY2J1ZiwgMCwgc2l6ZW9mKGV4ZWNidWYpKTsKPiAtCWV4ZWNidWYuYnVmZmVyc19wdHIg PSB0b191c2VyX3BvaW50ZXIoJmdlbV9leGVjKTsKPiAtCWV4ZWNidWYuYnVmZmVyX2NvdW50ID0g MTsKPiAtCWV4ZWNidWYuYmF0Y2hfbGVuID0gNDA5NjsKPiArCXJldHVybiBjczsKPiArfQo+ICAK PiAtCWdlbV9leGVjYnVmKGZkLCAmZXhlY2J1Zik7Cj4gK3N0YXRpYyB2b2lkICoKPiArY3JlYXRl X3RtcGwoaW50IGk5MTUsIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSAqcmVs b2MpCj4gK3sKPiArCWNvbnN0IHVpbnQzMl90IGRldmlkID0gaW50ZWxfZ2V0X2RybV9kZXZpZChp OTE1KTsKPiArCWNvbnN0IGludCBnZW4gPSBpbnRlbF9nZW4oZGV2aWQpOwo+ICsJdWludDMyX3Qg KigqZW1pdF9zdG9yZV9hZGRyKSh1aW50MzJfdCAqY3MsCj4gKwkJCQkgICBzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgKmFkZHIpOwo+ICsJdWludDMyX3QgKigqZW1pdF9iYl9z dGFydCkodWludDMyX3QgKmNzLAo+ICsJCQkJICAgc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0 aW9uX2VudHJ5ICpyZWxvYyk7Cj4gKwl2b2lkICp0bXBsOwo+ICsKPiArCS8qIGNvdWxkIHVzZSBC TFRfRklMTCBpbnN0ZWFkIGZvciBnZW4yICovCj4gKwlpZ3RfcmVxdWlyZShnZW1fY2FuX3N0b3Jl X2R3b3JkKGk5MTUsIDApKTsKPiArCj4gKwlpZiAoZ2VuID49IDgpCj4gKwkJZW1pdF9zdG9yZV9h ZGRyID0gZ2VuOF9lbWl0X3N0b3JlX2FkZHI7Cj4gKwllbHNlIGlmIChnZW4gPj0gNCkKPiArCQll bWl0X3N0b3JlX2FkZHIgPSBnZW40X2VtaXRfc3RvcmVfYWRkcjsKPiArCWVsc2UKPiArCQllbWl0 X3N0b3JlX2FkZHIgPSBnZW4yX2VtaXRfc3RvcmVfYWRkcjsKPiArCj4gKwlpZiAoZ2VuID49IDgp Cj4gKwkJZW1pdF9iYl9zdGFydCA9IGdlbjhfZW1pdF9iYl9zdGFydDsKPiArCWVsc2UgaWYgKElT X0hBU1dFTEwoZGV2aWQpKQo+ICsJCWVtaXRfYmJfc3RhcnQgPSBoc3dfZW1pdF9iYl9zdGFydDsK PiArCWVsc2UgaWYgKGdlbiA+PSA2KQo+ICsJCWVtaXRfYmJfc3RhcnQgPSBnZW42X2VtaXRfYmJf c3RhcnQ7Cj4gKwllbHNlIGlmIChnZW4gPj0gNCkKPiArCQllbWl0X2JiX3N0YXJ0ID0gZ2VuNF9l bWl0X2JiX3N0YXJ0Owo+ICsJZWxzZQo+ICsJCWVtaXRfYmJfc3RhcnQgPSBnZW4yX2VtaXRfYmJf c3RhcnQ7Cj4gKwo+ICsJdG1wbCA9IG1hbGxvYyg0MDk2KTsKPiArCWlndF9hc3NlcnQodG1wbCk7 Cj4gKwltZW1zZXQodG1wbCwgMHhmZiwgNDA5Nik7Cj4gKwo+ICsJLyogSnVtcCBvdmVyIHRoZSBi b29ieSB0cmFwcyB0byB0aGUgZW5kICovCj4gKwlyZWxvY1swXS5kZWx0YSA9IDY0Owo+ICsJZW1p dF9iYl9zdGFydCh0bXBsLCAmcmVsb2NbMF0pOwo+ICsKPiArCS8qIFJlc3RvcmUgdGhlIGJhZCBh ZGRyZXNzIHRvIGNhdGNoIG1pc3NpbmcgcmVsb2NzICovCj4gKwlyZWxvY1sxXS5vZmZzZXQgPSA2 NDsKPiArCXJlbG9jWzFdLmRlbHRhID0gcmVsb2NbMF0ub2Zmc2V0Owo+ICsJKmVtaXRfc3RvcmVf YWRkcih0bXBsICsgNjQsICZyZWxvY1sxXSkgPSBNSV9CQVRDSF9CVUZGRVJfRU5EOwo+ICsKPiAr CXJldHVybiB0bXBsOwo+ICB9Cj4gIAo+IC11aW50MzJfdCBnZW42X2JhdGNoW10gPSB7Cj4gLQko WFlfU1JDX0NPUFlfQkxUX0NNRCB8IDYgfAo+IC0JIFhZX1NSQ19DT1BZX0JMVF9XUklURV9BTFBI QSB8Cj4gLQkgWFlfU1JDX0NPUFlfQkxUX1dSSVRFX1JHQiksCj4gLQkoMyA8PCAyNCB8IC8qIDMy IGJpdHMgKi8KPiAtCSAweGNjIDw8IDE2IHwgLyogY29weSBST1AgKi8KPiAtCSA0MDk2KSwKPiAt CTAgPDwgMTYgfCAwLCAvKiBkc3QgeDEsIHkxICovCj4gLQkxIDw8IDE2IHwgMiwKPiAtCTAsIC8q IGRzdCByZWxvY2F0aW9uICovCj4gLQkwIDw8IDE2IHwgMCwgLyogc3JjIHgxLCB5MSAqLwo+IC0J NDA5NiwKPiAtCTAsIC8qIHNyYyByZWxvY2F0aW9uICovCj4gLQlNSV9CQVRDSF9CVUZGRVJfRU5E LAo+IC19Owo+IC0KPiAtdWludDMyX3QgZ2VuOF9iYXRjaFtdID0gewo+IC0JKFhZX1NSQ19DT1BZ X0JMVF9DTUQgfCA4IHwKPiAtCSBYWV9TUkNfQ09QWV9CTFRfV1JJVEVfQUxQSEEgfAo+IC0JIFhZ X1NSQ19DT1BZX0JMVF9XUklURV9SR0IpLAo+IC0JKDMgPDwgMjQgfCAvKiAzMiBiaXRzICovCj4g LQkgMHhjYyA8PCAxNiB8IC8qIGNvcHkgUk9QICovCj4gLQkgNDA5NiksCj4gLQkwIDw8IDE2IHwg MCwgLyogZHN0IHgxLCB5MSAqLwo+IC0JMSA8PCAxNiB8IDIsCj4gLQkwLCAvKiBkc3QgcmVsb2Nh dGlvbiAqLwo+IC0JMCwgLyogRklYTUUgKi8KPiAtCTAgPDwgMTYgfCAwLCAvKiBzcmMgeDEsIHkx ICovCj4gLQk0MDk2LAo+IC0JMCwgLyogc3JjIHJlbG9jYXRpb24gKi8KPiAtCTAsIC8qIEZJWE1F ICovCj4gLQlNSV9CQVRDSF9CVUZGRVJfRU5ELAo+IC19Owo+IC0KPiAtdWludDMyX3QgKmJhdGNo ID0gZ2VuNl9iYXRjaDsKPiAtdWludDMyX3QgYmF0Y2hfc2l6ZSA9IHNpemVvZihnZW42X2JhdGNo KTsKPiAtCj4gLXN0YXRpYyB2b2lkIHJ1bl90ZXN0KGludCBmZCwgaW50IGNvdW50KQo+ICtzdGF0 aWMgdm9pZCBydW5fdGVzdChpbnQgaTkxNSwgaW50IGNvdW50KQo+ICB7Cj4gLQljb25zdCB1aW50 MzJfdCBoYW5nW10gPSB7LTEsIC0xLCAtMSwgLTF9Owo+IC0JY29uc3QgdWludDMyX3QgZW5kW10g PSB7TUlfQkFUQ0hfQlVGRkVSX0VORCwgMH07Cj4gLQl1aW50MzJfdCBub29wOwo+IC0JdWludDMy X3QgKmhhbmRsZXM7Cj4gLQlpbnQgaTsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZl cjIgZXhlY2J1ZjsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSByZWxv Y1syXTsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9iajsKPiAgCj4gLQlu b29wID0gaW50ZWxfZ2V0X2RybV9kZXZpZChmZCk7Cj4gKwl1aW50MzJfdCAqaGFuZGxlczsKPiAr CXVpbnQzMl90ICp0bXBsOwo+ICAKPiAtCXVzZV9ibHQgPSAwOwo+IC0JaWYgKGludGVsX2dlbihu b29wKSA+PSA2KQo+IC0JCXVzZV9ibHQgPSBJOTE1X0VYRUNfQkxUOwo+ICsJaGFuZGxlcyA9IG1h bGxvYyhjb3VudCAqIHNpemVvZih1aW50MzJfdCkpOwo+ICsJaWd0X2Fzc2VydChoYW5kbGVzKTsK PiAgCj4gLQlpZiAoaW50ZWxfZ2VuKG5vb3ApID49IDgpIHsKPiAtCQliYXRjaCA9IGdlbjhfYmF0 Y2g7Cj4gLQkJYmF0Y2hfc2l6ZSArPSAyICogNDsKPiArCW1lbXNldChyZWxvYywgMCwgc2l6ZW9m KHJlbG9jKSk7Cj4gKwl0bXBsID0gY3JlYXRlX3RtcGwoaTkxNSwgcmVsb2MpOwo+ICsJZm9yIChp bnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Cj4gKwkJaGFuZGxlc1tpXSA9IGdlbV9jcmVhdGUo aTkxNSwgNDA5Nik7Cj4gKwkJZ2VtX3dyaXRlKGk5MTUsIGhhbmRsZXNbaV0sIDAsIHRtcGwsIDQw OTYpOwo+ICAJfQo+ICsJZnJlZSh0bXBsKTsKPiAgCj4gLQloYW5kbGVzID0gbWFsbG9jIChjb3Vu dCAqIHNpemVvZih1aW50MzJfdCkpOwo+IC0JaWd0X2Fzc2VydChoYW5kbGVzKTsKPiArCW1lbXNl dCgmb2JqLCAwLCBzaXplb2Yob2JqKSk7Cj4gKwlvYmoucmVsb2NzX3B0ciA9IHRvX3VzZXJfcG9p bnRlcihyZWxvYyk7Cj4gKwlvYmoucmVsb2NhdGlvbl9jb3VudCA9IEFSUkFZX1NJWkUocmVsb2Mp Owo+ICAKPiAtCW5vb3AgPSBnZW1fY3JlYXRlKGZkLCA0MDk2KTsKPiAtCWdlbV93cml0ZShmZCwg bm9vcCwgMCwgZW5kLCBzaXplb2YoZW5kKSk7Cj4gKwltZW1zZXQoJmV4ZWNidWYsIDAsIHNpemVv ZihleGVjYnVmKSk7Cj4gKwlleGVjYnVmLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZv YmopOwo+ICsJZXhlY2J1Zi5idWZmZXJfY291bnQgPSAxOwo+ICAKPiAgCS8qIGZpbGwgdGhlIGVu dGlyZSBnYXJ0IHdpdGggYmF0Y2hlcyBhbmQgcnVuIHRoZW0gKi8KPiAtCWZvciAoaSA9IDA7IGkg PCBjb3VudDsgaSsrKSB7Cj4gLQkJdWludDMyX3QgYmFkOwo+IC0KPiAtCQloYW5kbGVzW2ldID0g Z2VtX2NyZWF0ZShmZCwgNDA5Nik7Cj4gLQkJZ2VtX3dyaXRlKGZkLCBoYW5kbGVzW2ldLCAwLCBi YXRjaCwgYmF0Y2hfc2l6ZSk7Cj4gLQo+IC0JCWJhZCA9IGdlbV9jcmVhdGUoZmQsIDQwOTYpOwo+ IC0JCWdlbV93cml0ZShmZCwgYmFkLCAwLCBoYW5nLCBzaXplb2YoaGFuZykpOwo+IC0JCWdlbV93 cml0ZShmZCwgYmFkLCA0MDk2LXNpemVvZihlbmQpLCBlbmQsIHNpemVvZihlbmQpKTsKPiArCWZv ciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewo+ICsJCW9iai5oYW5kbGUgPSBoYW5kbGVz W2ldOwo+ICAKPiAtCQkvKiBsYXVuY2ggdGhlIG5ld2x5IGNyZWF0ZWQgYmF0Y2ggKi8KPiAtCQlj b3B5KGZkLCBoYW5kbGVzW2ldLCBub29wLCBiYWQpOwo+IC0JCWV4ZWMoZmQsIGJhZCk7Cj4gLQkJ Z2VtX2Nsb3NlKGZkLCBiYWQpOwo+ICsJCXJlbG9jWzBdLnRhcmdldF9oYW5kbGUgPSBvYmouaGFu ZGxlOwo+ICsJCXJlbG9jWzBdLnByZXN1bWVkX29mZnNldCA9IC0xOwo+ICsJCXJlbG9jWzFdLnRh cmdldF9oYW5kbGUgPSBvYmouaGFuZGxlOwo+ICsJCXJlbG9jWzFdLnByZXN1bWVkX29mZnNldCA9 IC0xOwo+ICAKPiAtCQlpZ3RfcHJvZ3Jlc3MoImdlbV9jcHVfcmVsb2M6ICIsIGksIDIqY291bnQp Owo+ICsJCWdlbV9leGVjYnVmKGk5MTUsICZleGVjYnVmKTsKPiAgCX0KPiAgCj4gIAkvKiBBbmQg YWdhaW4gaW4gcmV2ZXJzZSB0byB0cnkgYW5kIGNhdGNoIHRoZSByZWxvY2F0aW9uIGNvZGUgb3V0 ICovCj4gLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewo+IC0JCXVpbnQzMl90IGJhZDsK PiArCWZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewo+ICsJCW9iai5oYW5kbGUgPSBo YW5kbGVzW2NvdW50IC0gaSAtIDFdOwo+ICAKPiAtCQliYWQgPSBnZW1fY3JlYXRlKGZkLCA0MDk2 KTsKPiAtCQlnZW1fd3JpdGUoZmQsIGJhZCwgMCwgaGFuZywgc2l6ZW9mKGhhbmcpKTsKPiAtCQln ZW1fd3JpdGUoZmQsIGJhZCwgNDA5Ni1zaXplb2YoZW5kKSwgZW5kLCBzaXplb2YoZW5kKSk7Cj4g KwkJcmVsb2NbMF0udGFyZ2V0X2hhbmRsZSA9IG9iai5oYW5kbGU7Cj4gKwkJcmVsb2NbMF0ucHJl c3VtZWRfb2Zmc2V0ID0gLTE7Cj4gKwkJcmVsb2NbMV0udGFyZ2V0X2hhbmRsZSA9IG9iai5oYW5k bGU7Cj4gKwkJcmVsb2NbMV0ucHJlc3VtZWRfb2Zmc2V0ID0gLTE7Cj4gIAo+IC0JCS8qIGxhdW5j aCB0aGUgbmV3bHkgY3JlYXRlZCBiYXRjaCAqLwo+IC0JCWNvcHkoZmQsIGhhbmRsZXNbY291bnQt aS0xXSwgbm9vcCwgYmFkKTsKPiAtCQlleGVjKGZkLCBiYWQpOwo+IC0JCWdlbV9jbG9zZShmZCwg YmFkKTsKPiAtCj4gLQkJaWd0X3Byb2dyZXNzKCJnZW1fY3B1X3JlbG9jOiAiLCBjb3VudCtpLCAz KmNvdW50KTsKPiArCQlnZW1fZXhlY2J1ZihpOTE1LCAmZXhlY2J1Zik7Cj4gIAl9Cj4gIAo+IC0J LyogVGhpcmQgdGltZSBsdWNreT8gKi8KPiAtCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7 Cj4gLQkJdWludDMyX3QgYmFkOwo+ICsJLyogVGhpcmQgdGltZSB1bmx1Y2t5PyAqLwo+ICsJZm9y IChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Cj4gKwkJb2JqLmhhbmRsZSA9IGhhbmRsZXNb aV07Cj4gIAo+IC0JCWJhZCA9IGdlbV9jcmVhdGUoZmQsIDQwOTYpOwo+IC0JCWdlbV93cml0ZShm ZCwgYmFkLCAwLCBoYW5nLCBzaXplb2YoaGFuZykpOwo+IC0JCWdlbV93cml0ZShmZCwgYmFkLCA0 MDk2LXNpemVvZihlbmQpLCBlbmQsIHNpemVvZihlbmQpKTsKPiArCQlyZWxvY1swXS50YXJnZXRf aGFuZGxlID0gb2JqLmhhbmRsZTsKPiArCQlyZWxvY1swXS5wcmVzdW1lZF9vZmZzZXQgPSAtMTsK PiArCQlyZWxvY1sxXS50YXJnZXRfaGFuZGxlID0gb2JqLmhhbmRsZTsKPiArCQlyZWxvY1sxXS5w cmVzdW1lZF9vZmZzZXQgPSAtMTsKPiAgCj4gLQkJLyogbGF1bmNoIHRoZSBuZXdseSBjcmVhdGVk IGJhdGNoICovCj4gLQkJZ2VtX3NldF9kb21haW4oZmQsIGhhbmRsZXNbaV0sCj4gLQkJCSAgICAg ICBJOTE1X0dFTV9ET01BSU5fQ1BVLCBJOTE1X0dFTV9ET01BSU5fQ1BVKTsKPiAtCQljb3B5KGZk LCBoYW5kbGVzW2ldLCBub29wLCBiYWQpOwo+IC0JCWV4ZWMoZmQsIGJhZCk7Cj4gLQkJZ2VtX2Ns b3NlKGZkLCBiYWQpOwo+ICsJCWdlbV9zZXRfZG9tYWluKGk5MTUsIG9iai5oYW5kbGUsCj4gKwkJ CSAgICAgICBJOTE1X0dFTV9ET01BSU5fQ1BVLAo+ICsJCQkgICAgICAgSTkxNV9HRU1fRE9NQUlO X0NQVSk7Cj4gIAo+IC0JCWlndF9wcm9ncmVzcygiZ2VtX2NwdV9yZWxvYzogIiwgMipjb3VudCtp LCAzKmNvdW50KTsKPiArCQlnZW1fZXhlY2J1ZihpOTE1LCAmZXhlY2J1Zik7Cj4gIAl9Cj4gIAo+ IC0JaWd0X2luZm8oIlN1YnRlc3Qgc3VjZWVkZWQsIGNsZWFudXAgdXAgLSB0aGlzIG1pZ2h0IHRh a2UgYSB3aGlsZS5cbiIpOwo+IC0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKPiAtCQln ZW1fY2xvc2UoZmQsIGhhbmRsZXNbaV0pOwo+IC0JfQo+IC0JZ2VtX2Nsb3NlKGZkLCBub29wKTsK PiArCWZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKPiArCQlnZW1fY2xvc2UoaTkxNSwg aGFuZGxlc1tpXSk7Cj4gIAlmcmVlKGhhbmRsZXMpOwo+ICB9Cj4gIAo+ICBpZ3RfbWFpbgo+ICB7 Cj4gLQl1aW50NjRfdCBhcGVyX3NpemU7Cj4gLQlpbnQgZmQsIGNvdW50Owo+ICsJaW50IGk5MTU7 Cj4gIAo+ICAJaWd0X2ZpeHR1cmUgewo+IC0JCWZkID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9J TlRFTCk7Cj4gLQkJaWd0X3JlcXVpcmVfZ2VtKGZkKTsKPiAtCX0KPiArCQlpOTE1ID0gZHJtX29w ZW5fZHJpdmVyKERSSVZFUl9JTlRFTCk7Cj4gKwkJaWd0X3JlcXVpcmVfZ2VtKGk5MTUpOwo+ICAK PiAtCWlndF9zdWJ0ZXN0KCJiYXNpYyIpIHsKPiAtCQlydW5fdGVzdCAoZmQsIDEwKTsKPiArCQlp Z3RfZm9ya19oYW5nX2RldGVjdG9yKGk5MTUpOwo+ICAJfQo+ICAKPiArCWlndF9zdWJ0ZXN0KCJi YXNpYyIpCj4gKwkJcnVuX3Rlc3QoaTkxNSwgMSk7Cj4gIAo+ICAJaWd0X3N1YnRlc3QoImZ1bGwi KSB7Cj4gLQkJYXBlcl9zaXplID0gZ2VtX21hcHBhYmxlX2FwZXJ0dXJlX3NpemUoKTsKPiAtCQlj b3VudCA9IGFwZXJfc2l6ZSAvIDQwOTYgKiAyOwo+ICsJCXVpbnQ2NF90IGFwZXJfc2l6ZSA9IGdl bV9tYXBwYWJsZV9hcGVydHVyZV9zaXplKCk7Cj4gKwkJdW5zaWduZWQgbG9uZyBjb3VudCA9IGFw ZXJfc2l6ZSAvIDQwOTYgKyAxOwo+ICsKPiArCQlpbnRlbF9yZXF1aXJlX21lbW9yeShjb3VudCwg NDA5NiwgQ0hFQ0tfUkFNKTsKPiArCj4gKwkJcnVuX3Rlc3QoaTkxNSwgY291bnQpOwo+ICsJfQo+ ICsKPiArCWlndF9zdWJ0ZXN0KCJmb3JrZWQiKSB7Cj4gKwkJdWludDY0X3QgYXBlcl9zaXplID0g Z2VtX21hcHBhYmxlX2FwZXJ0dXJlX3NpemUoKTsKPiArCQl1bnNpZ25lZCBsb25nIGNvdW50ID0g YXBlcl9zaXplIC8gNDA5NiArIDE7Cj4gKwkJaW50IG5jcHVzID0gc3lzY29uZihfU0NfTlBST0NF U1NPUlNfT05MTik7Cj4gIAo+IC0JCS8qIGNvdW50ICsgMiAobm9vcCAmIGJhZCkgYnVmZmVycy4g QSBnZW0gb2JqZWN0IGFwcGVhcnMgdG8KPiAtICAgICAgICAgICAgICAgICAgIHJlcXVpcmUgYWJv dXQgMmtiICsgYnVmZmVyICsga2VybmVsIG92ZXJoZWFkICovCj4gLQkJaW50ZWxfcmVxdWlyZV9t ZW1vcnkoMitjb3VudCwgMjA0OCs0MDk2LCBDSEVDS19SQU0pOwo+ICsJCWludGVsX3JlcXVpcmVf bWVtb3J5KGNvdW50LCA0MDk2LCBDSEVDS19SQU0pOwo+ICAKPiAtCQlydW5fdGVzdCAoZmQsIGNv dW50KTsKPiArCQlpZ3RfZm9yayhjaGlsZCwgbmNwdXMpCj4gKwkJCXJ1bl90ZXN0KGk5MTUsIGNv dW50IC8gbmNwdXMgKyAxKTsKPiArCQlpZ3Rfd2FpdGNoaWxkcmVuKCk7Cj4gIAl9Cj4gIAo+ICAJ aWd0X2ZpeHR1cmUgewo+IC0JCWNsb3NlKGZkKTsKPiArCQlpZ3Rfc3RvcF9oYW5nX2RldGVjdG9y KCk7Cj4gIAl9Cj4gIH0KPiAtLSAKPiAyLjIwLjEKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9pZ3QtZGV2Cg==