From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9FDAB6E8EE for ; Wed, 28 Feb 2018 09:00:35 +0000 (UTC) From: Chris Wilson Date: Wed, 28 Feb 2018 09:00:16 +0000 Message-Id: <20180228090016.4589-1-chris@chris-wilson.co.uk> In-Reply-To: <20180227215040.11297-1-chris@chris-wilson.co.uk> References: <20180227215040.11297-1-chris@chris-wilson.co.uk> Subject: [igt-dev] [PATCH igt v6] lib: Provide an accelerated routine for readback from WC List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org List-ID: UmVhZGluZyBmcm9tIFdDIGlzIGF3ZnVsbHkgc2xvdyBhcyBlYWNoIGFjY2VzcyBpcyB1bmNhY2hl ZCBhbmQgc28KcGVyZm9ybWVkIHN5bmNocm9ub3VzbHksIHN0YWxsaW5nIGZvciB0aGUgbWVtb3J5 IGxvYWQuIHg4NiBkaWQgaW50cm9kdWNlCnNvbWUgbmV3IGluc3RydWN0aW9ucyBpbiBTU0UgNC4x IHRvIHByb3ZpZGUgYSBzbWFsbCBpbnRlcm5hbCBidWZmZXIgdG8KYWNjZWxlcmF0ZSByZWFkaW5n IGJhY2sgYSBjYWNoZWxpbmUgYXQgYSB0aW1lIGZyb20gdW5jYWNoZWQgbWVtb3J5LCBmb3IKdGhp cyBwdXJwb3NlLgoKdjI6IERvbid0IGJlIGxhenkgYW5kIGhhbmRsZSBtaXNhbGlnbm1lbnQuCnYz OiBTd2l0Y2ggb3V0IG9mIHNzZTQxIGJlZm9yZSBlbWl0dGluZyB0aGUgZ2VuZXJpYyBtZW1jcHkg cm91dGluZQp2NDogUmVwbGFjZSBvcGVuY29kZWQgbWVtY3B5X2Zyb21fd2MKdjU6IEFsd2F5cyBm bHVzaCB0aGUgaW50ZXJuYWwgYnVmZmVyIGJlZm9yZSB1c2UgKEVyaWMpCnY2OiBBc3N1bWUgYnVs ayBtb3Zlcywgc28gY2hlY2sgZm9yIGRzdCBhbGlnbm1lbnQuCgpTaWduZWQtb2ZmLWJ5OiBDaHJp cyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KQ2M6IEVyaWMgQW5ob2x0IDxlcmlj QGFuaG9sdC5uZXQ+Ci0tLQogbGliL2lndF9mYi5jICAgICAgICAgICAgICAgICAgIHwgICAzICst CiBsaWIvaWd0X3g4Ni5jICAgICAgICAgICAgICAgICAgfCAxMjQgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysKIGxpYi9pZ3RfeDg2LmggICAgICAgICAgICAgICAgICB8 ICAgMiArCiB0ZXN0cy9nZW1fZmVuY2VfdGhyYXNoLmMgICAgICAgfCAgNjMgKy0tLS0tLS0tLS0t LS0tLS0tLS0tCiB0ZXN0cy9nZW1fbW1hcF9ndHQuYyAgICAgICAgICAgfCAgMzcgKy0tLS0tLS0t LS0tCiB0ZXN0cy9nZW1fdGlsZWRfcHJlYWRfcHdyaXRlLmMgfCAgMzcgKy0tLS0tLS0tLS0tCiA2 IGZpbGVzIGNoYW5nZWQsIDEzMiBpbnNlcnRpb25zKCspLCAxMzQgZGVsZXRpb25zKC0pCgpkaWZm IC0tZ2l0IGEvbGliL2lndF9mYi5jIGIvbGliL2lndF9mYi5jCmluZGV4IGVjZDczMDUzLi43NDA0 YmE3YyAxMDA2NDQKLS0tIGEvbGliL2lndF9mYi5jCisrKyBiL2xpYi9pZ3RfZmIuYwpAQCAtMzIs NiArMzIsNyBAQAogI2luY2x1ZGUgImRybXRlc3QuaCIKICNpbmNsdWRlICJpZ3RfZmIuaCIKICNp bmNsdWRlICJpZ3Rfa21zLmgiCisjaW5jbHVkZSAiaWd0X3g4Ni5oIgogI2luY2x1ZGUgImlvY3Rs X3dyYXBwZXJzLmgiCiAjaW5jbHVkZSAiaW50ZWxfY2hpcHNldC5oIgogCkBAIC0xMzQwLDcgKzEz NDEsNyBAQCBzdGF0aWMgdm9pZCBjb252ZXJ0X252MTJfdG9fcmdiMjQoc3RydWN0IGlndF9mYiAq ZmIsIHN0cnVjdCBmYl9jb252ZXJ0X2JsaXRfdXBsbwogCSAqIGl0J3MgZmFzdGVyIHRvIGNvcHkg dGhlIHdob2xlIEJPIHRvIGEgdGVtcG9yYXJ5IGJ1ZmZlciBhbmQgY29udmVydAogCSAqIGZyb20g dGhlcmUuCiAJICovCi0JbWVtY3B5KGJ1ZiwgYmxpdC0+bGluZWFyLm1hcCwgYmxpdC0+bGluZWFy LnNpemUpOworCWlndF9tZW1jcHlfZnJvbV93YyhidWYsIGJsaXQtPmxpbmVhci5tYXAsIGJsaXQt PmxpbmVhci5zaXplKTsKIAl5ID0gJmJ1ZltibGl0LT5saW5lYXIub2Zmc2V0c1swXV07CiAJdXYg PSAmYnVmW2JsaXQtPmxpbmVhci5vZmZzZXRzWzFdXTsKIApkaWZmIC0tZ2l0IGEvbGliL2lndF94 ODYuYyBiL2xpYi9pZ3RfeDg2LmMKaW5kZXggMGVkM2M2ZjEuLjU0NTM5NDU2IDEwMDY0NAotLS0g YS9saWIvaWd0X3g4Ni5jCisrKyBiL2xpYi9pZ3RfeDg2LmMKQEAgLTM2LDcgKzM2LDEwIEBACiAj ZW5kaWYKIAogI2luY2x1ZGUgImlndF94ODYuaCIKKworI2luY2x1ZGUgPHN0ZGludC5oPgogI2lu Y2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CiAKIC8qKgogICogU0VDVElPTjpp Z3RfeDg2CkBAIC0xNzQsMyArMTc3LDEyNCBAQCBjaGFyICppZ3RfeDg2X2ZlYXR1cmVzX3RvX3N0 cmluZyh1bnNpZ25lZCBmZWF0dXJlcywgY2hhciAqbGluZSkKIAlyZXR1cm4gcmV0OwogfQogI2Vu ZGlmCisKKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pICYmICFkZWZpbmVkKF9fY2xhbmdfXykKKyNk ZWZpbmUgTU9WTlQgNTEyCisKKyNwcmFnbWEgR0NDIHB1c2hfb3B0aW9ucworI3ByYWdtYSBHQ0Mg dGFyZ2V0KCJzc2U0LjEiKQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3BvaW50 ZXItYXJpdGgiCisKKyNkZWZpbmUgbWluKHgsIHkpICh7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKwl0eXBlb2YoeCkgX21pbjEgPSAoeCk7ICAgICAgICAgICAgICAgICAgXAorCXR5cGVv Zih5KSBfbWluMiA9ICh5KTsgICAgICAgICAgICAgICAgICBcCisJKHZvaWQpICgmX21pbjEgPT0g Jl9taW4yKTsgICAgICAgICAgICAgIFwKKwlfbWluMSA8IF9taW4yID8gX21pbjEgOiBfbWluMjsJ CVwKK30pCisKKyNpbmNsdWRlIDxzbW1pbnRyaW4uaD4KK3N0YXRpYyB2b2lkIG1lbWNweV9mcm9t X3djX3NzZTQxKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsb25nIGxlbikK K3sKKwljaGFyIGJ1ZlsxNl07CisKKwkvKiBGbHVzaCB0aGUgaW50ZXJuYWwgYnVmZmVyIG9mIHBv dGVudGlhbCBzdGFsZSBnZnggZGF0YSAqLworCV9fYnVpbHRpbl9pYTMyX21mZW5jZSgpOworCisJ aWYgKCh1aW50cHRyX3Qpc3JjICYgMTUpIHsKKwkJX19tMTI4aSAqUyA9IChfX20xMjhpICopKCh1 aW50cHRyX3Qpc3JjICYgfjE1KTsKKwkJdW5zaWduZWQgbG9uZyBtaXNhbGlnbiA9ICh1aW50cHRy X3Qpc3JjICYgMTU7CisJCXVuc2lnbmVkIGxvbmcgY29weSA9IG1pbihsZW4sIDE2IC0gbWlzYWxp Z24pOworCisJCV9tbV9zdG9yZXVfc2kxMjgoKF9fbTEyOGkgKilidWYsCisJCQkJIF9tbV9zdHJl YW1fbG9hZF9zaTEyOChTKSk7CisKKwkJbWVtY3B5KGRzdCwgYnVmICsgbWlzYWxpZ24sIGNvcHkp OworCisJCWRzdCArPSBjb3B5OworCQlzcmMgKz0gY29weTsKKwkJbGVuIC09IGNvcHk7CisJfQor CisJLyogV2UgYXNzdW1lIHdlIGFyZSBkb2luZyBidWxrIHRyYW5zZmVycywgc28gcHJlZmVyIGFs aWduZWQgbW92ZXMgKi8KKwlpZiAoKCh1aW50cHRyX3QpZHN0ICYgMTUpID09IDApIHsKKwkJd2hp bGUgKGxlbiA+PSA2NCkgeworCQkJX19tMTI4aSAqUyA9IChfX20xMjhpICopc3JjOworCQkJX19t MTI4aSAqRCA9IChfX20xMjhpICopZHN0OworCQkJX19tMTI4aSB0bXBbNF07CisKKwkJCXRtcFsw XSA9IF9tbV9zdHJlYW1fbG9hZF9zaTEyOChTICsgMCk7CisJCQl0bXBbMV0gPSBfbW1fc3RyZWFt X2xvYWRfc2kxMjgoUyArIDEpOworCQkJdG1wWzJdID0gX21tX3N0cmVhbV9sb2FkX3NpMTI4KFMg KyAyKTsKKwkJCXRtcFszXSA9IF9tbV9zdHJlYW1fbG9hZF9zaTEyOChTICsgMyk7CisKKwkJCV9t bV9zdG9yZV9zaTEyOChEICsgMCwgdG1wWzBdKTsKKwkJCV9tbV9zdG9yZV9zaTEyOChEICsgMSwg dG1wWzFdKTsKKwkJCV9tbV9zdG9yZV9zaTEyOChEICsgMiwgdG1wWzJdKTsKKwkJCV9tbV9zdG9y ZV9zaTEyOChEICsgMywgdG1wWzNdKTsKKworCQkJc3JjICs9IDY0OworCQkJZHN0ICs9IDY0Owor CQkJbGVuIC09IDY0OworCQl9CisJfSBlbHNlIHsKKwkJd2hpbGUgKGxlbiA+PSA2NCkgeworCQkJ X19tMTI4aSAqUyA9IChfX20xMjhpICopc3JjOworCQkJX19tMTI4aSAqRCA9IChfX20xMjhpICop ZHN0OworCQkJX19tMTI4aSB0bXBbNF07CisKKwkJCXRtcFswXSA9IF9tbV9zdHJlYW1fbG9hZF9z aTEyOChTICsgMCk7CisJCQl0bXBbMV0gPSBfbW1fc3RyZWFtX2xvYWRfc2kxMjgoUyArIDEpOwor CQkJdG1wWzJdID0gX21tX3N0cmVhbV9sb2FkX3NpMTI4KFMgKyAyKTsKKwkJCXRtcFszXSA9IF9t bV9zdHJlYW1fbG9hZF9zaTEyOChTICsgMyk7CisKKwkJCV9tbV9zdG9yZXVfc2kxMjgoRCArIDAs IHRtcFswXSk7CisJCQlfbW1fc3RvcmV1X3NpMTI4KEQgKyAxLCB0bXBbMV0pOworCQkJX21tX3N0 b3JldV9zaTEyOChEICsgMiwgdG1wWzJdKTsKKwkJCV9tbV9zdG9yZXVfc2kxMjgoRCArIDMsIHRt cFszXSk7CisKKwkJCXNyYyArPSA2NDsKKwkJCWRzdCArPSA2NDsKKwkJCWxlbiAtPSA2NDsKKwkJ fQorCX0KKworCXdoaWxlIChsZW4gPj0gMTYpIHsKKwkJX21tX3N0b3JldV9zaTEyOCgoX19tMTI4 aSAqKWRzdCwKKwkJCQkgX21tX3N0cmVhbV9sb2FkX3NpMTI4KChfX20xMjhpICopc3JjKSk7CisK KwkJc3JjICs9IDE2OworCQlkc3QgKz0gMTY7CisJCWxlbiAtPSAxNjsKKwl9CisKKwlpZiAobGVu KSB7CisJCV9tbV9zdG9yZXVfc2kxMjgoKF9fbTEyOGkgKilidWYsCisJCQkJIF9tbV9zdHJlYW1f bG9hZF9zaTEyOCgoX19tMTI4aSAqKXNyYykpOworCQltZW1jcHkoZHN0LCBidWYsIGxlbik7CisJ fQorfQorCisjcHJhZ21hIEdDQyBwb3Bfb3B0aW9ucworCitzdGF0aWMgdm9pZCBtZW1jcHlfZnJv bV93Yyh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBsZW4pCit7CisJ bWVtY3B5KGRzdCwgc3JjLCBsZW4pOworfQorCitzdGF0aWMgdm9pZCAoKnJlc29sdmVfbWVtY3B5 X2Zyb21fd2Modm9pZCkpKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCB1bnNpZ25lZCBsb25nKQorewor CWlmIChpZ3RfeDg2X2ZlYXR1cmVzKCkgJiBTU0U0XzEpCisJCXJldHVybiBtZW1jcHlfZnJvbV93 Y19zc2U0MTsKKworCXJldHVybiBtZW1jcHlfZnJvbV93YzsKK30KKwordm9pZCBpZ3RfbWVtY3B5 X2Zyb21fd2Modm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgbGVuKQor CV9fYXR0cmlidXRlX18oKGlmdW5jKCJyZXNvbHZlX21lbWNweV9mcm9tX3djIikpKTsKKworI2Vs c2UKK3ZvaWQgaWd0X21lbWNweV9mcm9tX3djKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCB1 bnNpZ25lZCBsb25nIGxlbikKK3sKKwltZW1jcHkoZHN0LCBzcmMsIGxlbik7Cit9CisjZW5kaWYK ZGlmZiAtLWdpdCBhL2xpYi9pZ3RfeDg2LmggYi9saWIvaWd0X3g4Ni5oCmluZGV4IDI3YjdmMGZk Li5kNGY4YzM0MyAxMDA2NDQKLS0tIGEvbGliL2lndF94ODYuaAorKysgYi9saWIvaWd0X3g4Ni5o CkBAIC01NSw0ICs1NSw2IEBAIHN0YXRpYyBpbmxpbmUgY2hhciAqaWd0X3g4Nl9mZWF0dXJlc190 b19zdHJpbmcodW5zaWduZWQgZmVhdHVyZXMsIGNoYXIgKmxpbmUpCiB9CiAjZW5kaWYKIAordm9p ZCBpZ3RfbWVtY3B5X2Zyb21fd2Modm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVk IGxvbmcgbGVuKTsKKwogI2VuZGlmIC8qIElHVF9YODZfSCAqLwpkaWZmIC0tZ2l0IGEvdGVzdHMv Z2VtX2ZlbmNlX3RocmFzaC5jIGIvdGVzdHMvZ2VtX2ZlbmNlX3RocmFzaC5jCmluZGV4IGM4ZmY5 NjFkLi4yZDdmYjJmZiAxMDA2NDQKLS0tIGEvdGVzdHMvZ2VtX2ZlbmNlX3RocmFzaC5jCisrKyBi L3Rlc3RzL2dlbV9mZW5jZV90aHJhc2guYwpAQCAtMTA3LDc1ICsxMDcsMTYgQEAgYm9fY29weSAo dm9pZCAqX2FyZykKIAlyZXR1cm4gTlVMTDsKIH0KIAotI2lmIGRlZmluZWQoX194ODZfNjRfXykg JiYgIWRlZmluZWQoX19jbGFuZ19fKQotCi0jcHJhZ21hIEdDQyBwdXNoX29wdGlvbnMKLSNwcmFn bWEgR0NDIHRhcmdldCgic3NlNC4xIikKLQotI2luY2x1ZGUgPHNtbWludHJpbi5oPgotCi0jZGVm aW5lIE1PVk5UIDUxMgotCi1fX2F0dHJpYnV0ZV9fKChub2lubGluZSkpCi1zdGF0aWMgdm9pZCBj b3B5X3djX3BhZ2Uodm9pZCAqZHN0LCB2b2lkICpzcmMpCi17Ci0JaWYgKGlndF94ODZfZmVhdHVy ZXMoKSAmIFNTRTRfMSkgewotCQlfX20xMjhpICpTID0gKF9fbTEyOGkgKilzcmM7Ci0JCV9fbTEy OGkgKkQgPSAoX19tMTI4aSAqKWRzdDsKLQotCQlmb3IgKGludCBpID0gMDsgaSA8IFBBR0VfU0la RS9DQUNIRUxJTkU7IGkrKykgewotCQkJX19tMTI4aSB0bXBbNF07Ci0KLQkJCXRtcFswXSA9IF9t bV9zdHJlYW1fbG9hZF9zaTEyOChTKyspOwotCQkJdG1wWzFdID0gX21tX3N0cmVhbV9sb2FkX3Np MTI4KFMrKyk7Ci0JCQl0bXBbMl0gPSBfbW1fc3RyZWFtX2xvYWRfc2kxMjgoUysrKTsKLQkJCXRt cFszXSA9IF9tbV9zdHJlYW1fbG9hZF9zaTEyOChTKyspOwotCi0JCQlfbW1fc3RvcmVfc2kxMjgo RCsrLCB0bXBbMF0pOwotCQkJX21tX3N0b3JlX3NpMTI4KEQrKywgdG1wWzFdKTsKLQkJCV9tbV9z dG9yZV9zaTEyOChEKyssIHRtcFsyXSk7Ci0JCQlfbW1fc3RvcmVfc2kxMjgoRCsrLCB0bXBbM10p OwotCQl9Ci0JfSBlbHNlCi0JCW1lbWNweShkc3QsIHNyYywgUEFHRV9TSVpFKTsKLX0KLQotc3Rh dGljIHZvaWQgY29weV93Y19jYWNoZWxpbmUodm9pZCAqZHN0LCB2b2lkICpzcmMpCi17Ci0JaWYg KGlndF94ODZfZmVhdHVyZXMoKSAmIFNTRTRfMSkgewotCQlfX20xMjhpICpTID0gKF9fbTEyOGkg KilzcmM7Ci0JCV9fbTEyOGkgKkQgPSAoX19tMTI4aSAqKWRzdDsKLQkJX19tMTI4aSB0bXBbNF07 Ci0KLQkJdG1wWzBdID0gX21tX3N0cmVhbV9sb2FkX3NpMTI4KFMrKyk7Ci0JCXRtcFsxXSA9IF9t bV9zdHJlYW1fbG9hZF9zaTEyOChTKyspOwotCQl0bXBbMl0gPSBfbW1fc3RyZWFtX2xvYWRfc2kx MjgoUysrKTsKLQkJdG1wWzNdID0gX21tX3N0cmVhbV9sb2FkX3NpMTI4KFMrKyk7Ci0KLQkJX21t X3N0b3JlX3NpMTI4KEQrKywgdG1wWzBdKTsKLQkJX21tX3N0b3JlX3NpMTI4KEQrKywgdG1wWzFd KTsKLQkJX21tX3N0b3JlX3NpMTI4KEQrKywgdG1wWzJdKTsKLQkJX21tX3N0b3JlX3NpMTI4KEQr KywgdG1wWzNdKTsKLQl9IGVsc2UKLQkJbWVtY3B5KGRzdCwgc3JjLCBDQUNIRUxJTkUpOwotfQot Ci0jcHJhZ21hIEdDQyBwb3Bfb3B0aW9ucwotCi0jZWxzZQotCiBzdGF0aWMgdm9pZCBjb3B5X3dj X3BhZ2Uodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpCiB7Ci0JbWVtY3B5KGRzdCwgc3JjLCBQ QUdFX1NJWkUpOworCWlndF9tZW1jcHlfZnJvbV93Yyhkc3QsIHNyYywgUEFHRV9TSVpFKTsKIH0K IAogc3RhdGljIHZvaWQgY29weV93Y19jYWNoZWxpbmUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpz cmMpCiB7Ci0JbWVtY3B5KGRzdCwgc3JjLCBDQUNIRUxJTkUpOworCWlndF9tZW1jcHlfZnJvbV93 Yyhkc3QsIHNyYywgQ0FDSEVMSU5FKTsKIH0KIAotI2VuZGlmCi0KIHN0YXRpYyB2b2lkCiBfYm9f d3JpdGVfdmVyaWZ5KHN0cnVjdCB0ZXN0ICp0KQogewpkaWZmIC0tZ2l0IGEvdGVzdHMvZ2VtX21t YXBfZ3R0LmMgYi90ZXN0cy9nZW1fbW1hcF9ndHQuYwppbmRleCAwZjU5ODEyNS4uNmEzMzJiMjUg MTAwNjQ0Ci0tLSBhL3Rlc3RzL2dlbV9tbWFwX2d0dC5jCisrKyBiL3Rlc3RzL2dlbV9tbWFwX2d0 dC5jCkBAIC01MjksNDUgKzUyOSwxMCBAQCB0ZXN0X2h1Z2VfYm8oaW50IGZkLCBpbnQgaHVnZSwg aW50IHRpbGluZykKIAltdW5tYXAobGluZWFyX3BhdHRlcm4sIFBBR0VfU0laRSk7CiB9CiAKLSNp ZiBkZWZpbmVkKF9feDg2XzY0X18pICYmICFkZWZpbmVkKF9fY2xhbmdfXykKLSNkZWZpbmUgTU9W TlQgNTEyCi0KLSNwcmFnbWEgR0NDIHB1c2hfb3B0aW9ucwotI3ByYWdtYSBHQ0MgdGFyZ2V0KCJz c2U0LjEiKQotCi0jaW5jbHVkZSA8c21taW50cmluLmg+Ci1fX2F0dHJpYnV0ZV9fKChub2lubGlu ZSkpCi1zdGF0aWMgdm9pZCBjb3B5X3djX3BhZ2Uodm9pZCAqZHN0LCB2b2lkICpzcmMpCi17Ci0J aWYgKGlndF94ODZfZmVhdHVyZXMoKSAmIFNTRTRfMSkgewotCQlfX20xMjhpICpTID0gKF9fbTEy OGkgKilzcmM7Ci0JCV9fbTEyOGkgKkQgPSAoX19tMTI4aSAqKWRzdDsKLQotCQlmb3IgKGludCBp ID0gMDsgaSA8IFBBR0VfU0laRS82NDsgaSsrKSB7Ci0JCQlfX20xMjhpIHRtcFs0XTsKLQotCQkJ dG1wWzBdID0gX21tX3N0cmVhbV9sb2FkX3NpMTI4KFMrKyk7Ci0JCQl0bXBbMV0gPSBfbW1fc3Ry ZWFtX2xvYWRfc2kxMjgoUysrKTsKLQkJCXRtcFsyXSA9IF9tbV9zdHJlYW1fbG9hZF9zaTEyOChT KyspOwotCQkJdG1wWzNdID0gX21tX3N0cmVhbV9sb2FkX3NpMTI4KFMrKyk7Ci0KLQkJCV9tbV9z dG9yZV9zaTEyOChEKyssIHRtcFswXSk7Ci0JCQlfbW1fc3RvcmVfc2kxMjgoRCsrLCB0bXBbMV0p OwotCQkJX21tX3N0b3JlX3NpMTI4KEQrKywgdG1wWzJdKTsKLQkJCV9tbV9zdG9yZV9zaTEyOChE KyssIHRtcFszXSk7Ci0JCX0KLQl9IGVsc2UKLQkJbWVtY3B5KGRzdCwgc3JjLCBQQUdFX1NJWkUp OwotfQotCi0jcHJhZ21hIEdDQyBwb3Bfb3B0aW9ucwotCi0jZWxzZQogc3RhdGljIHZvaWQgY29w eV93Y19wYWdlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKQogewotCW1lbWNweShkc3QsIHNy YywgUEFHRV9TSVpFKTsKKwlpZ3RfbWVtY3B5X2Zyb21fd2MoZHN0LCBzcmMsIFBBR0VfU0laRSk7 CiB9Ci0jZW5kaWYKIAogc3RhdGljIHVuc2lnbmVkIGludCB0aWxlX3Jvd19zaXplKGludCB0aWxp bmcsIHVuc2lnbmVkIGludCBzdHJpZGUpCiB7CmRpZmYgLS1naXQgYS90ZXN0cy9nZW1fdGlsZWRf cHJlYWRfcHdyaXRlLmMgYi90ZXN0cy9nZW1fdGlsZWRfcHJlYWRfcHdyaXRlLmMKaW5kZXggN2I1 NTc3ZmQuLjMxM2RhYTM4IDEwMDY0NAotLS0gYS90ZXN0cy9nZW1fdGlsZWRfcHJlYWRfcHdyaXRl LmMKKysrIGIvdGVzdHMvZ2VtX3RpbGVkX3ByZWFkX3B3cml0ZS5jCkBAIC0xMDAsNDUgKzEwMCwx MCBAQCBjcmVhdGVfYm8oaW50IGZkKQogCXJldHVybiBoYW5kbGU7CiB9CiAKLSNpZiBkZWZpbmVk KF9feDg2XzY0X18pICYmICFkZWZpbmVkKF9fY2xhbmdfXykKLSNkZWZpbmUgTU9WTlQgNTEyCi0K LSNwcmFnbWEgR0NDIHB1c2hfb3B0aW9ucwotI3ByYWdtYSBHQ0MgdGFyZ2V0KCJzc2U0LjEiKQot Ci0jaW5jbHVkZSA8c21taW50cmluLmg+Ci1fX2F0dHJpYnV0ZV9fKChub2lubGluZSkpCi1zdGF0 aWMgdm9pZCBjb3B5X3djX3BhZ2Uodm9pZCAqZHN0LCB2b2lkICpzcmMpCi17Ci0JaWYgKGlndF94 ODZfZmVhdHVyZXMoKSAmIFNTRTRfMSkgewotCQlfX20xMjhpICpTID0gKF9fbTEyOGkgKilzcmM7 Ci0JCV9fbTEyOGkgKkQgPSAoX19tMTI4aSAqKWRzdDsKLQotCQlmb3IgKGludCBpID0gMDsgaSA8 IFBBR0VfU0laRS82NDsgaSsrKSB7Ci0JCQlfX20xMjhpIHRtcFs0XTsKLQotCQkJdG1wWzBdID0g X21tX3N0cmVhbV9sb2FkX3NpMTI4KFMrKyk7Ci0JCQl0bXBbMV0gPSBfbW1fc3RyZWFtX2xvYWRf c2kxMjgoUysrKTsKLQkJCXRtcFsyXSA9IF9tbV9zdHJlYW1fbG9hZF9zaTEyOChTKyspOwotCQkJ dG1wWzNdID0gX21tX3N0cmVhbV9sb2FkX3NpMTI4KFMrKyk7Ci0KLQkJCV9tbV9zdG9yZV9zaTEy OChEKyssIHRtcFswXSk7Ci0JCQlfbW1fc3RvcmVfc2kxMjgoRCsrLCB0bXBbMV0pOwotCQkJX21t X3N0b3JlX3NpMTI4KEQrKywgdG1wWzJdKTsKLQkJCV9tbV9zdG9yZV9zaTEyOChEKyssIHRtcFsz XSk7Ci0JCX0KLQl9IGVsc2UKLQkJbWVtY3B5KGRzdCwgc3JjLCBQQUdFX1NJWkUpOwotfQotCi0j cHJhZ21hIEdDQyBwb3Bfb3B0aW9ucwotCi0jZWxzZQogc3RhdGljIHZvaWQgY29weV93Y19wYWdl KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKQogewotCW1lbWNweShkc3QsIHNyYywgUEFHRV9T SVpFKTsKKwlpZ3RfbWVtY3B5X2Zyb21fd2MoZHN0LCBzcmMsIFBBR0VfU0laRSk7CiB9Ci0jZW5k aWYKIAogaWd0X3NpbXBsZV9tYWluCiB7Ci0tIAoyLjE2LjIKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vaWd0LWRldgo=