From mboxrd@z Thu Jan 1 00:00:00 1970 From: akash.goel@intel.com Subject: [PATCH v2] igt/gem_trtt: Exercise the TRTT hardware Date: Fri, 22 Jan 2016 21:07:47 +0530 Message-ID: <1453477067-27587-1-git-send-email-akash.goel@intel.com> References: <569F6056.80003@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id 4A61C6EC2A for ; Fri, 22 Jan 2016 07:25:20 -0800 (PST) In-Reply-To: <569F6056.80003@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org Cc: Akash Goel List-Id: intel-gfx@lists.freedesktop.org RnJvbTogQWthc2ggR29lbCA8YWthc2guZ29lbEBpbnRlbC5jb20+CgpUaGlzIHBhdGNoIHByb3Zp ZGVzIHRoZSB0ZXN0Y2FzZSB0byBleGVyY2lzZSB0aGUgVFJUVCBoYXJkd2FyZS4KClNvbWUgcGxh dGZvcm1zIGhhdmUgYW4gYWRkaXRpb25hbCBhZGRyZXNzIHRyYW5zbGF0aW9uIGhhcmR3YXJlIHN1 cHBvcnQgaW4KZm9ybSBvZiBUaWxlZCBSZXNvdXJjZSBUcmFuc2xhdGlvbiBUYWJsZSAoVFItVFQp IHdoaWNoIHByb3ZpZGVzIGFuIGV4dHJhIGxldmVsCm9mIGFic3RyYWN0aW9uIG92ZXIgUFBHVFQu ClRoaXMgaXMgdXNlZnVsIGZvciBtYXBwaW5nIFNwYXJzZS9UaWxlZCB0ZXh0dXJlIHJlc291cmNl cy4KClRSLVRUIGlzIHRpZ2h0bHkgY291cGxlZCB3aXRoIFBQR1RULCBhIG5ldyBpbnN0YW5jZSBv ZiBUUi1UVCB3aWxsIGJlIHJlcXVpcmVkCmZvciBhIG5ldyBQUEdUVCBpbnN0YW5jZSwgYnV0IFRS LVRUIG1heSBub3QgZW5hYmxlZCBmb3IgZXZlcnkgY29udGV4dC4KMS8xNnRoIG9mIHRoZSA0OGJp dCBQUEdUVCBzcGFjZSBpcyBlYXJtYXJrZWQgZm9yIHRoZSB0cmFuc2xhdGlvbiBieSBUUi1UVCwK d2hpY2ggc3VjaCBjaHVuayB0byB1c2UgaXMgY29udmV5ZWQgdG8gSFcgdGhyb3VnaCBhIHJlZ2lz dGVyLgpBbnkgR0ZYIGFkZHJlc3MsIHdoaWNoIGxpZXMgaW4gdGhhdCByZXNlcnZlZCA0NCBiaXQg cmFuZ2Ugd2lsbCBiZSB0cmFuc2xhdGVkCnRocm91Z2ggVFItVFQgZmlyc3QgYW5kIHRoZW4gdGhy b3VnaCBQUEdUVCB0byBnZXQgdGhlIGFjdHVhbCBwaHlzaWNhbCBhZGRyZXNzLgoKVFJUVCBpcyBj b25zdHJ1Y3RlZCBhcyBhIDMgbGV2ZWwgdGlsZSBUYWJsZS4gRWFjaCB0aWxlIGlzIDY0S0IgaXMg c2l6ZSB3aGljaApsZWF2ZXMgYmVoaW5kIDQ0LTE2PTI4IGFkZHJlc3MgYml0cy4gMjhiaXRzIGFy ZSBwYXJ0aXRpb25lZCBhcyA5KzkrMTAsIGFuZAplYWNoIGxldmVsIGlzIGNvbnRhaW5lZCB3aXRo aW4gYSA0S0IgcGFnZSBoZW5jZSBMMyBhbmQgTDIgaXMgY29tcG9zZWQgb2YKNTEyIDY0YiBlbnRy aWVzIGFuZCBMMSBpcyBjb21wb3NlZCBvZiAxMDI0IDMyYiBlbnRyaWVzLgoKVGhlcmUgaXMgYSBw cm92aXNpb24gdG8ga2VlcCBUUi1UVCBUYWJsZXMgaW4gdmlydHVhbCBzcGFjZSwgd2hlcmUgdGhl IHBhZ2VzIG9mClRSVFQgdGFibGVzIHdpbGwgYmUgbWFwcGVkIHRvIFBQR1RULiBUaGlzIGlzIHRo ZSBhZG9wdGVkIG1vZGUsIGFzIGluIHRoaXMgbW9kZQpVTUQgd2lsbCBoYXZlIGEgZnVsbCBjb250 cm9sIG9uIFRSLVRUIG1hbmFnZW1lbnQsIHdpdGggYmFyZSBtaW5pbXVtIHN1cHBvcnQKZnJvbSBL TUQuClNvIHRoZSBlbnRyaWVzIG9mIEwzIHRhYmxlIHdpbGwgY29udGFpbiB0aGUgUFBHVFQgb2Zm c2V0IG9mIEwyIFRhYmxlIHBhZ2VzLApzaW1pbGFybHkgZW50cmllcyBvZiBMMiB0YWJsZSB3aWxs IGNvbnRhaW4gdGhlIFBQR1RUIG9mZnNldCBvZiBMMSBUYWJsZSBwYWdlcy4KVGhlIGVudHJpZXMg b2YgTDEgdGFibGUgd2lsbCBjb250YWluIHRoZSBQUEdUVCBvZmZzZXQgb2YgQk9zIGFjdHVhbGx5 IGJhY2tpbmcKdGhlIFNwYXJzZSByZXNvdXJjZXMuCgpJOTE1X0dFTV9DT05URVhUX1NFVFBBUkFN IGlvY3RsIGlzIHVzZWQgdG8gcmVxdWVzdCBLTUQgdG8gZW5hYmxlIFRSVFQgZm9yIGEKY2VydGFp biBjb250ZXh0LCBhIG5ldyBJOTE1X0NPTlRFWFRfUEFSQU1fRU5BQkxFX1RSVFQgcGFyYW0gaGFz IGJlZW4KYWRkZWQgdG8gdGhlIENPTlRFWFRfU0VUUEFSQU0gaW9jdGwgZm9yIHRoYXQgcHVycG9z ZS4KCnYyOgogLSBBZGQgbmV3IHdyYXBwZXIgZnVuY3Rpb24gX19nZW1fY29udGV4dF9yZXF1aXJl X3BhcmFtIGFuZCB1c2VkIHRoYXQKICAgdG8gZGV0ZWN0IHRoZSBUUi1UVCBzdXBwb3J0CiAtIFVz ZSBpZ3RfbWFpbiBtYWNybywgcmVuYW1lIGNlcnRhaW4gZnVuY3Rpb24sIHJlbW92ZSBleHRyYSB3 aGl0ZSBzcGFjZSwKICAgY2xlYW51cCB0aGUgY29kZSAoQ2hyaXMpCiAtIEVuaGFuY2UgdGhlIGJh c2ljIHN1YnRlc3QgdG8gZXhlcmNpc2UgYWxsIHBvc3NpYmxlIFRSLVRUIHNlZ21lbnQgc3RhcnQK ICAgbG9jYXRpb25zIChpLmUuIDE2IG9mIHRoZW0pICYgZm9yIGV2ZXJ5IGl0ZXJhdGlvbiBjcmVh dGUgYSBuZXcgY29udGV4dC4KCkNjOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5j by51az4KU2lnbmVkLW9mZi1ieTogQWthc2ggR29lbCA8YWthc2guZ29lbEBpbnRlbC5jb20+Ci0t LQogbGliL2lvY3RsX3dyYXBwZXJzLmMgICB8ICAyNSArKy0KIGxpYi9pb2N0bF93cmFwcGVycy5o ICAgfCAgIDIgKwogdGVzdHMvTWFrZWZpbGUuc291cmNlcyB8ICAgMSArCiB0ZXN0cy9nZW1fdHJ0 dC5jICAgICAgIHwgNDQ2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysKIDQgZmlsZXMgY2hhbmdlZCwgNDY2IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25z KC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvZ2VtX3RydHQuYwoKZGlmZiAtLWdpdCBhL2xp Yi9pb2N0bF93cmFwcGVycy5jIGIvbGliL2lvY3RsX3dyYXBwZXJzLmMKaW5kZXggZTM0OGYyNi4u NDZlMWRiMiAxMDA2NDQKLS0tIGEvbGliL2lvY3RsX3dyYXBwZXJzLmMKKysrIGIvbGliL2lvY3Rs X3dyYXBwZXJzLmMKQEAgLTgzMyw2ICs4MzMsMjIgQEAgdm9pZCBnZW1fY29udGV4dF9zZXRfcGFy YW0oaW50IGZkLCBzdHJ1Y3QgbG9jYWxfaTkxNV9nZW1fY29udGV4dF9wYXJhbSAqcCkKIAlkb19p b2N0bChmZCwgTE9DQUxfSU9DVExfSTkxNV9HRU1fQ09OVEVYVF9TRVRQQVJBTSwgcCk7CiB9CiAK K2ludCBfX2dlbV9jb250ZXh0X3JlcXVpcmVfcGFyYW0oaW50IGZkLCB1aW50NjRfdCBwYXJhbSkK K3sKKwlzdHJ1Y3QgbG9jYWxfaTkxNV9nZW1fY29udGV4dF9wYXJhbSBwOworCWludCByZXQ7CisK KwlwLmNvbnRleHQgPSAwOworCXAucGFyYW0gPSBwYXJhbTsKKwlwLnZhbHVlID0gMDsKKwlwLnNp emUgPSAwOworCisJcmV0ID0gZHJtSW9jdGwoZmQsIExPQ0FMX0lPQ1RMX0k5MTVfR0VNX0NPTlRF WFRfR0VUUEFSQU0sICZwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLWVycm5vOworCXJldHVybiAw OworfQorCiAvKioKICAqIGdlbV9jb250ZXh0X3JlcXVpcmVfcGFyYW06CiAgKiBAZmQ6IG9wZW4g aTkxNSBkcm0gZmlsZSBkZXNjcmlwdG9yCkBAIC04NDMsMTQgKzg1OSw3IEBAIHZvaWQgZ2VtX2Nv bnRleHRfc2V0X3BhcmFtKGludCBmZCwgc3RydWN0IGxvY2FsX2k5MTVfZ2VtX2NvbnRleHRfcGFy YW0gKnApCiAgKi8KIHZvaWQgZ2VtX2NvbnRleHRfcmVxdWlyZV9wYXJhbShpbnQgZmQsIHVpbnQ2 NF90IHBhcmFtKQogewotCXN0cnVjdCBsb2NhbF9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIHA7Ci0K LQlwLmNvbnRleHQgPSAwOwotCXAucGFyYW0gPSBwYXJhbTsKLQlwLnZhbHVlID0gMDsKLQlwLnNp emUgPSAwOwotCi0JaWd0X3JlcXVpcmUoZHJtSW9jdGwoZmQsIExPQ0FMX0lPQ1RMX0k5MTVfR0VN X0NPTlRFWFRfR0VUUEFSQU0sICZwKSA9PSAwKTsKKwlpZ3RfcmVxdWlyZShfX2dlbV9jb250ZXh0 X3JlcXVpcmVfcGFyYW0oZmQsIHBhcmFtKSA9PSAwKTsKIH0KIAogdm9pZCBnZW1fY29udGV4dF9y ZXF1aXJlX2Jhbl9wZXJpb2QoaW50IGZkKQpkaWZmIC0tZ2l0IGEvbGliL2lvY3RsX3dyYXBwZXJz LmggYi9saWIvaW9jdGxfd3JhcHBlcnMuaAppbmRleCBmZTJmNjg3Li4yNThjNjEyIDEwMDY0NAot LS0gYS9saWIvaW9jdGxfd3JhcHBlcnMuaAorKysgYi9saWIvaW9jdGxfd3JhcHBlcnMuaApAQCAt MTA1LDkgKzEwNSwxMSBAQCBzdHJ1Y3QgbG9jYWxfaTkxNV9nZW1fY29udGV4dF9wYXJhbSB7CiAj ZGVmaW5lIExPQ0FMX0NPTlRFWFRfUEFSQU1fQkFOX1BFUklPRAkweDEKICNkZWZpbmUgTE9DQUxf Q09OVEVYVF9QQVJBTV9OT19aRVJPTUFQCTB4MgogI2RlZmluZSBMT0NBTF9DT05URVhUX1BBUkFN X0dUVF9TSVpFCTB4MworI2RlZmluZSBMT0NBTF9DT05URVhUX1BBUkFNX1RSVFQJMHg0CiAJdWlu dDY0X3QgdmFsdWU7CiB9Owogdm9pZCBnZW1fY29udGV4dF9yZXF1aXJlX2Jhbl9wZXJpb2QoaW50 IGZkKTsKK2ludCBfX2dlbV9jb250ZXh0X3JlcXVpcmVfcGFyYW0oaW50IGZkLCB1aW50NjRfdCBw YXJhbSk7CiB2b2lkIGdlbV9jb250ZXh0X3JlcXVpcmVfcGFyYW0oaW50IGZkLCB1aW50NjRfdCBw YXJhbSk7CiB2b2lkIGdlbV9jb250ZXh0X2dldF9wYXJhbShpbnQgZmQsIHN0cnVjdCBsb2NhbF9p OTE1X2dlbV9jb250ZXh0X3BhcmFtICpwKTsKIHZvaWQgZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGlu dCBmZCwgc3RydWN0IGxvY2FsX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0gKnApOwpkaWZmIC0tZ2l0 IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKaW5kZXgg ZDU5NDAzOC4uMDY4YTQ0ZSAxMDA2NDQKLS0tIGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcworKysg Yi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCkBAIC02NCw2ICs2NCw3IEBAIFRFU1RTX3Byb2dzX00g PSBcCiAJZ2VtX3N0cmVhbWluZ193cml0ZXMgXAogCWdlbV90aWxlZF9ibGl0cyBcCiAJZ2VtX3Rp bGVkX3BhcnRpYWxfcHdyaXRlX3ByZWFkIFwKKwlnZW1fdHJ0dCBcCiAJZ2VtX3VzZXJwdHJfYmxp dHMgXAogCWdlbV93cml0ZV9yZWFkX3Jpbmdfc3dpdGNoIFwKIAlrbXNfYWRkZmJfYmFzaWMgXApk aWZmIC0tZ2l0IGEvdGVzdHMvZ2VtX3RydHQuYyBiL3Rlc3RzL2dlbV90cnR0LmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA3NmUxOAotLS0gL2Rldi9udWxsCisrKyBiL3Rl c3RzL2dlbV90cnR0LmMKQEAgLTAsMCArMSw0NDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAx NiBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQs IGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRo aXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0 d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwg aW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHks IG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQv b3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8g d2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3Rp Y2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFy YWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBv cnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJ REVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAq IElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5E IE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBD T1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhF UgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBP UiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJ VEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBT T0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogICAgQWthc2ggR29lbCA8YWthc2guZ29lbEBp bnRlbC5jb20+CisgKgorICovCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRs aWIuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUg PHN0cmluZy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNp bmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL2lv Y3RsLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNpbmNs dWRlICJkcm0uaCIKKyNpbmNsdWRlICJpb2N0bF93cmFwcGVycy5oIgorI2luY2x1ZGUgImRybXRl c3QuaCIKKyNpbmNsdWRlICJpbnRlbF9jaGlwc2V0LmgiCisjaW5jbHVkZSAiaW50ZWxfaW8uaCIK KyNpbmNsdWRlICJpOTE1X2RybS5oIgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN5 cy93YWl0Lmg+CisjaW5jbHVkZSA8c3lzL2lwYy5oPgorI2luY2x1ZGUgPHN5cy9zaG0uaD4KKyNp bmNsdWRlICJpZ3Rfa21zLmgiCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMv dHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisjZGVmaW5lIEJPX1NJWkUgNDA5Ngor I2RlZmluZSBFWEVDX09CSkVDVF9QSU5ORUQJKDE8PDQpCisjZGVmaW5lIEVYRUNfT0JKRUNUX1NV UFBPUlRTXzQ4Ql9BRERSRVNTICgxPDwzKQorCisjZGVmaW5lIE5PX1BQR1RUIDAKKyNkZWZpbmUg QUxJQVNJTkdfUFBHVFQgMQorI2RlZmluZSBGVUxMXzMyX0JJVF9QUEdUVCAyCisjZGVmaW5lIEZV TExfNDhfQklUX1BQR1RUIDMKKy8qIHVzZXNfZnVsbF9wcGd0dAorICogRmluZHMgc3VwcG9ydGVk IFBQR1RUIGRldGFpbHMuCisgKiBAZmQgRFJNIGZkCisgKiBAbWluIGNhbiBiZQorICogMCAtIE5v IFBQR1RUCisgKiAxIC0gQWxpYXNpbmcgUFBHVFQKKyAqIDIgLSBGdWxsIFBQR1RUICgzMmIpCisg KiAzIC0gRnVsbCBQUEdUVCAoNDhiKQorICogUkVUVVJOUyB0cnVlL2ZhbHNlIGlmIG1pbiBzdXBw b3J0IGlzIHByZXNlbnQKKyovCitzdGF0aWMgYm9vbCB1c2VzX2Z1bGxfcHBndHQoaW50IGZkLCBp bnQgbWluKQoreworCXN0cnVjdCBkcm1faTkxNV9nZXRwYXJhbSBncDsKKwlpbnQgdmFsID0gMDsK KworCW1lbXNldCgmZ3AsIDAsIHNpemVvZihncCkpOworCWdwLnBhcmFtID0gMTg7IC8qIEhBU19B TElBU0lOR19QUEdUVCAqLworCWdwLnZhbHVlID0gJnZhbDsKKworCWlmIChkcm1Jb2N0bChmZCwg RFJNX0lPQ1RMX0k5MTVfR0VUUEFSQU0sICZncCkpCisJCXJldHVybiAwOworCisJZXJybm8gPSAw OworCXJldHVybiB2YWwgPj0gbWluOworfQorCisvKiBoYXNfc29mdHBpbl9zdXBwb3J0CisgKiBG aW5kcyBpZiBzb2Z0cGluIGZlYXR1cmUgaXMgc3VwcG9ydGVkCisgKiBAZmQgRFJNIGZkCisqLwor c3RhdGljIGJvb2wgaGFzX3NvZnRwaW5fc3VwcG9ydChpbnQgZmQpCit7CisJc3RydWN0IGRybV9p OTE1X2dldHBhcmFtIGdwOworCWludCB2YWwgPSAwOworCisJbWVtc2V0KCZncCwgMCwgc2l6ZW9m KGdwKSk7CisJZ3AucGFyYW0gPSAzNzsgLyogSTkxNV9QQVJBTV9IQVNfRVhFQ19TT0ZUUElOICov CisJZ3AudmFsdWUgPSAmdmFsOworCisJaWYgKGRybUlvY3RsKGZkLCBEUk1fSU9DVExfSTkxNV9H RVRQQVJBTSwgJmdwKSkKKwkJcmV0dXJuIDA7CisKKwllcnJubyA9IDA7CisJcmV0dXJuICh2YWwg PT0gMSk7Cit9CisKKy8qIGhhc190cnR0X3N1cHBvcnQKKyAqIEZpbmRzIGlmIHRydHQgaHcgaXMg cHJlc2VudAorICogQGZkIERSTSBmZAorKi8KK3N0YXRpYyBib29sIGhhc190cnR0X3N1cHBvcnQo aW50IGZkKQoreworCWludCByZXQgPSBfX2dlbV9jb250ZXh0X3JlcXVpcmVfcGFyYW0oZmQsIExP Q0FMX0NPTlRFWFRfUEFSQU1fVFJUVCk7CisKKwllcnJubyA9IDA7CisJcmV0dXJuIChyZXQgPT0g MCk7Cit9CisKKy8qIG1tYXBfYm8KKyAqIGhlbHBlciBmb3IgY3JlYXRpbmcgYSBDUFUgbW1hcHBp bmcgb2YgdGhlIGJ1ZmZlcgorICogQGZkIC0gZHJtIGZkCisgKiBAaGFuZGxlIC0gaGFuZGxlIG9m IHRoZSBidWZmZXIgdG8gbW1hcAorICogQHNpemU6IHNpemUgb2YgdGhlIGJ1ZmZlcgorKi8KK3N0 YXRpYyB2b2lkKiBtbWFwX2JvKGludCBmZCwgdWludDMyX3QgaGFuZGxlLCB1aW50NjRfdCBzaXpl KQoreworCXVpbnQzMl90ICpwdHIgPSBnZW1fbW1hcF9fY3B1KGZkLCBoYW5kbGUsIDAsIHNpemUs IFBST1RfUkVBRCk7CisJZ2VtX3NldF9kb21haW4oZmQsIGhhbmRsZSwgSTkxNV9HRU1fRE9NQUlO X0NQVSwgMCk7CisJcmV0dXJuIHB0cjsKK30KKworLyogZW1pdF9zdG9yZV9kd29yZAorICogcG9w dWxhdGUgYmF0Y2ggYnVmZmVyIHdpdGggTUlfU1RPUkVfRFdPUkRfSU1NIGNvbW1hbmQKKyAqIEBm ZDogZHJtIGZpbGUgZGVzY3JpcHRvcgorICogQGNtZF9idWY6IGJhdGNoIGJ1ZmZlcgorICogQGR3 X29mZnNldDogd3JpdGUgb2Zmc2V0IGluIGJhdGNoIGJ1ZmZlcgorICogQHZhZGRyOiBkZXN0aW5h dGlvbiBWaXJ0dWFsIGFkZHJlc3MKKyAqIEBkYXRhOiB1MzIgZGF0YSB0byBiZSBzdG9yZWQgYXQg ZGVzdGluYXRpb24KKyovCitzdGF0aWMgaW50IGVtaXRfc3RvcmVfZHdvcmQoaW50IGZkLCB1aW50 MzJfdCAqY21kX2J1ZiwgdWludDMyX3QgZHdfb2Zmc2V0LAorCQkJICAgIHVpbnQ2NF90IHZhZGRy LCB1aW50MzJfdCBkYXRhKQoreworCWNtZF9idWZbZHdfb2Zmc2V0KytdID0gTUlfU1RPUkVfRFdP UkRfSU1NOworCWNtZF9idWZbZHdfb2Zmc2V0KytdID0gdmFkZHIgJiAweEZGRkZGRkZDOworCWNt ZF9idWZbZHdfb2Zmc2V0KytdID0gKHZhZGRyID4+IDMyKSAmIDB4RkZGRjsgLyogYml0cyAzMjo0 NyAqLworCWNtZF9idWZbZHdfb2Zmc2V0KytdID0gZGF0YTsKKworCXJldHVybiBkd19vZmZzZXQ7 Cit9CisKKy8qIGVtaXRfc3RvcmVfcXdvcmQKKyAqIHBvcHVsYXRlIGJhdGNoIGJ1ZmZlciB3aXRo IE1JX1NUT1JFX0RXT1JEX0lNTSBjb21tYW5kCisgKiBAZmQ6IGRybSBmaWxlIGRlc2NyaXB0b3IK KyAqIEBjbWRfYnVmOiBiYXRjaCBidWZmZXIKKyAqIEBkd19vZmZzZXQ6IHdyaXRlIG9mZnNldCBp biBiYXRjaCBidWZmZXIKKyAqIEB2YWRkcjogZGVzdGluYXRpb24gVmlydHVhbCBhZGRyZXNzCisg KiBAZGF0YTogdTY0IGRhdGEgdG8gYmUgc3RvcmVkIGF0IGRlc3RpbmF0aW9uCisqLworc3RhdGlj IGludCBlbWl0X3N0b3JlX3F3b3JkKGludCBmZCwgdWludDMyX3QgKmNtZF9idWYsIHVpbnQzMl90 IGR3X29mZnNldCwKKwkJCSAgICB1aW50NjRfdCB2YWRkciwgdWludDY0X3QgZGF0YSkKK3sKKwlj bWRfYnVmW2R3X29mZnNldCsrXSA9IE1JX1NUT1JFX0RXT1JEX0lNTSB8IDB4MzsKKwljbWRfYnVm W2R3X29mZnNldCsrXSA9IHZhZGRyICYgMHhGRkZGRkZGQzsKKwljbWRfYnVmW2R3X29mZnNldCsr XSA9ICh2YWRkciA+PiAzMikgJiAweEZGRkY7IC8qIGJpdHMgMzI6NDcgKi8KKwljbWRfYnVmW2R3 X29mZnNldCsrXSA9IGRhdGE7CisJY21kX2J1Zltkd19vZmZzZXQrK10gPSBkYXRhID4+IDMyOwor CisJcmV0dXJuIGR3X29mZnNldDsKK30KKworLyogZW1pdF9iYl9lbmQKKyAqIHBvcHVsYXRlIGJh dGNoIGJ1ZmZlciB3aXRoIE1JX0JBVENIX0JVRkZFUl9FTkQgY29tbWFuZAorICogQGZkOiBkcm0g ZmlsZSBkZXNjcmlwdG9yCisgKiBAY21kX2J1ZjogYmF0Y2ggYnVmZmVyCisgKiBAZHdfb2Zmc2V0 OiB3cml0ZSBvZmZzZXQgaW4gYmF0Y2ggYnVmZmVyCisqLworc3RhdGljIGludCBlbWl0X2JiX2Vu ZChpbnQgZmQsIHVpbnQzMl90ICpjbWRfYnVmLCB1aW50MzJfdCBkd19vZmZzZXQpCit7CisJY21k X2J1Zltkd19vZmZzZXQrK10gPSBNSV9CQVRDSF9CVUZGRVJfRU5EOworCWNtZF9idWZbZHdfb2Zm c2V0KytdID0gMDsKKworCXJldHVybiBkd19vZmZzZXQ7Cit9CisKKy8qIHNldHVwX2V4ZWNidWZm ZXIKKyAqIGhlbHBlciBmb3IgYnVmZmVyIGV4ZWN1dGlvbgorICogQGV4ZWNidWYgLSBwb2ludGVy IHRvIGV4ZWNidWZmZXIKKyAqIEBleGVjX29iamVjdCAtIHBvaW50ZXIgdG8gZXhlYyBvYmplY3Qy IHN0cnVjdAorICogQHJpbmcgLSByaW5nIHRvIGJlIHVzZWQKKyAqIEBidWZmZXJfY291bnQgLSBo b3cgbWFudSBidWZmZXJzIHRvIHN1Ym1pdAorICogQGJhdGNoX2xlbmd0aCAtIGxlbmd0aCBvZiBi YXRjaCBidWZmZXIKKyovCitzdGF0aWMgdm9pZCBzZXR1cF9leGVjYnVmZmVyKHN0cnVjdCBkcm1f aTkxNV9nZW1fZXhlY2J1ZmZlcjIgKmV4ZWNidWYsCisJCQkgICAgIHN0cnVjdCBkcm1faTkxNV9n ZW1fZXhlY19vYmplY3QyICpleGVjX29iamVjdCwKKwkJCSAgICAgdWludDMyX3QgY3R4X2lkLCBp bnQgcmluZywgaW50IGJ1ZmZlcl9jb3VudCwgaW50IGJhdGNoX2xlbmd0aCkKK3sKKwltZW1zZXQo ZXhlY2J1ZiwgMCwgc2l6ZW9mKCpleGVjYnVmKSk7CisKKwlleGVjYnVmLT5idWZmZXJzX3B0ciA9 ICh1bnNpZ25lZCBsb25nKWV4ZWNfb2JqZWN0OworCWV4ZWNidWYtPmJ1ZmZlcl9jb3VudCA9IGJ1 ZmZlcl9jb3VudDsKKwlleGVjYnVmLT5iYXRjaF9sZW4gPSBiYXRjaF9sZW5ndGg7CisJZXhlY2J1 Zi0+ZmxhZ3MgPSByaW5nOworCWk5MTVfZXhlY2J1ZmZlcjJfc2V0X2NvbnRleHRfaWQoKmV4ZWNi dWYsIGN0eF9pZCk7Cit9CisKKyNkZWZpbmUgVEFCTEVfU0laRSAweDEwMDAKKyNkZWZpbmUgVElM RV9TSVpFIDB4MTAwMDAKKworI2RlZmluZSBUUlRUX1NFR01FTlRfU0laRSAoMVVMTCA8PCA0NCkK KyNkZWZpbmUgUFBHVFRfU0laRSAoMVVMTCA8PCA0OCkKKworI2RlZmluZSBOVUxMX1RJTEVfUEFU VEVSTiAgICAweEZGRkZGRkZGCisjZGVmaW5lIElOVkFMSURfVElMRV9QQVRURVJOIDB4RkZGRkZG RkUKKworc3RydWN0IGxvY2FsX2k5MTVfZ2VtX2NvbnRleHRfdHJ0dF9wYXJhbSB7CisJdWludDY0 X3Qgc2VnbWVudF9iYXNlX2FkZHI7CisJdWludDY0X3QgbDNfdGFibGVfYWRkcmVzczsKKwl1aW50 MzJfdCBpbnZkX3RpbGVfdmFsOworCXVpbnQzMl90IG51bGxfdGlsZV92YWw7Cit9OworCisvKiBz ZXR1cF90cnR0CisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gcmVxdWVzdCBLTUQgdG8gZW5hYmxlIFRS VFQKKyAqIEBmZCAtIGRybSBmZAorICogQGN0eF9pZCAtIGlkIG9mIHRoZSBjb250ZXh0IGZvciB3 aGljaCBUUlRUIGlzIHRvIGJlIGVuYWJsZWQKKyAqIEBsM190YWJsZV9hZGRyZXNzIC0gR0ZYIGFk ZHJlc3Mgb2YgdGhlIEwzIHRhYmxlCisgKiBAc2VnbWVudF9iYXNlX2FkZHIgLSBvZmZzZXQgb2Yg dGhlIFRSVFQgc2VnbWVudCBpbiBQUEdUVCBzcGFjZQorICovCitzdGF0aWMgdm9pZAorc2V0dXBf dHJ0dChpbnQgZmQsIHVpbnQzMl90IGN0eF9pZCwgdWludDY0X3QgbDNfdGFibGVfYWRkcmVzcywK KwkgICB1aW50NjRfdCBzZWdtZW50X2Jhc2VfYWRkcikKK3sKKwlzdHJ1Y3QgbG9jYWxfaTkxNV9n ZW1fY29udGV4dF9wYXJhbSBjdHhfcGFyYW07CisJc3RydWN0IGxvY2FsX2k5MTVfZ2VtX2NvbnRl eHRfdHJ0dF9wYXJhbSB0cnR0X3BhcmFtOworCisJbWVtc2V0KCZjdHhfcGFyYW0sIDAsIHNpemVv ZihjdHhfcGFyYW0pKTsKKworCXRydHRfcGFyYW0ubnVsbF90aWxlX3ZhbCA9IE5VTExfVElMRV9Q QVRURVJOOworCXRydHRfcGFyYW0uaW52ZF90aWxlX3ZhbCA9IElOVkFMSURfVElMRV9QQVRURVJO OworCXRydHRfcGFyYW0ubDNfdGFibGVfYWRkcmVzcyA9IGwzX3RhYmxlX2FkZHJlc3M7CisJdHJ0 dF9wYXJhbS5zZWdtZW50X2Jhc2VfYWRkciA9IHNlZ21lbnRfYmFzZV9hZGRyOworCisJY3R4X3Bh cmFtLmNvbnRleHQgPSBjdHhfaWQ7CisJY3R4X3BhcmFtLnNpemUgPSBzaXplb2YodHJ0dF9wYXJh bSk7CisJY3R4X3BhcmFtLnBhcmFtID0gTE9DQUxfQ09OVEVYVF9QQVJBTV9UUlRUOworCWN0eF9w YXJhbS52YWx1ZSA9ICh1aW50NjRfdCkmdHJ0dF9wYXJhbTsKKworCWdlbV9jb250ZXh0X3NldF9w YXJhbShmZCwgJmN0eF9wYXJhbSk7Cit9CisKKy8qIGJvX2FsbG9jX3NldHVwCisgKiBhbGxvY2F0 ZSBibyBhbmQgcG9wdWxhdGUgZXhlYyBvYmplY3QKKyAqIEBleGVjX29iamVjdDIgLSBwb2ludGVy IHRvIGV4ZWMgb2JqZWN0CisgKiBAYm9fc2l6ZWUgLSBidWZmZXIgc2l6ZQorICogQGZsYWdzIC0g ZXhlYyBmbGFncworICogQGJvX29mZnNldCAtIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgUFBHVFQg b2Zmc2V0CisgKi8KK3N0YXRpYyB2b2lkIGJvX2FsbG9jX3NldHVwKGludCBmZCwgc3RydWN0IGRy bV9pOTE1X2dlbV9leGVjX29iamVjdDIgKmV4ZWNfb2JqZWN0MiwKKwkJCSAgIHVpbnQ2NF90IGJv X3NpemUsIHVpbnQ2NF90IGZsYWdzLCB1aW50NjRfdCAqYm9fb2Zmc2V0KQoreworCW1lbXNldChl eGVjX29iamVjdDIsIDAsIHNpemVvZigqZXhlY19vYmplY3QyKSk7CisJZXhlY19vYmplY3QyLT5o YW5kbGUgPSBnZW1fY3JlYXRlKGZkLCBib19zaXplKTsKKwlleGVjX29iamVjdDItPmZsYWdzID0g ZmxhZ3M7CisKKwlpZiAoYm9fb2Zmc2V0KQorCXsKKwkJZXhlY19vYmplY3QyLT5vZmZzZXQgPSAq Ym9fb2Zmc2V0OworCQkqYm9fb2Zmc2V0ICs9IGJvX3NpemU7CisJfQorfQorCisvKiBiYXNpYyB0 ZXN0CisgKiBUaGlzIHRlc3Qgd2lsbCBjcmVhdGUgYSBjb250ZXh0LCBhbGxvY2F0ZSBhIEwzIHRh YmxlIHBhZ2UsIDIgcGFnZXMgYXBpZWNlCisgKiBmb3IgTDIvTDEgdGFibGVzIGFuZCBjb3VwbGUg b2YgZGF0YSBidWZmZXJzIG9mIDY0S0IgaW4gc2l6ZSwgbWF0Y2hpbmcgdGhlCisgKiBUaWxlIHNp emUuIFRoZSAyIGRhdGEgYnVmZmVycyB3aWxsIGJlIG1hcHBlZCB0byB0aGUgMiBlbmRzIG9mIFRS VFQgdmlydHVhbAorICogc3BhY2UuIFNlcmllcyBvZiBNSV9TVE9SRV9EV09SRF9JTU0gY29tbWFu ZHMgd2lsbCBiZSBhZGRlZCBpbiB0aGUgYmF0Y2gKKyAqIGJ1ZmZlciB0byBmaXJzdCB1cGRhdGUg dGhlIFRSLVRUIHRhYmxlIGVudHJpZXMgYW5kIHRoZW4gdG8gdXBkYXRlIHRoZSBkYXRhCisgKiBi dWZmZXJzIHVzaW5nIHRoZWlyIFRSLVRUIFZBLCBleGVyY2lzaW5nIHRoZSB0YWJsZSBwcm9ncmFt bWluZyBkb25lCisgKiBwcmV2aW91c2x5LgorICogSW52b2tlIENPTlRFWFRfU0VUUEFSQU0gaW9j dGwgdG8gcmVxdWVzdCBLTUQgdG8gZW5hYmxlIFRSVFQuCisgKiBJbnZva2UgZXhlY2J1ZmZlciB0 byBzdWJtaXQgdGhlIGJhdGNoIGJ1ZmZlci4KKyAqIFZlcmlmeSB2YWx1ZSBvZiBmaXJzdCBEV09S RCBpbiB0aGUgMiBkYXRhIGJ1ZmZlciBtYXRjaGVzIHRoZSBkYXRhIGFza2VkCisgKiB0byBiZSB3 cml0dGVuIGJ5IHRoZSBHUFUuCisgKi8KK3N0YXRpYyB2b2lkIHN1Ym1pdF90cnR0X2NvbnRleHQo aW50IGZkLCB1aW50NjRfdCBzZWdtZW50X2Jhc2VfYWRkcikKK3sKKwllbnVtIHsKKwkJTDNfVEJM LAorCQlMMl9UQkwxLAorCQlMMl9UQkwyLAorCQlMMV9UQkwxLAorCQlMMV9UQkwyLAorCQlEQVRB MSwKKwkJREFUQTIsCisJCUJBVENILAorCQlOVU1fQlVGRkVSUywKKwl9OworCisJaW50IHJpbmcs IGxlbiA9IDA7CisJdWludDMyX3QgKnB0cjsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZm ZXIyIGV4ZWNidWY7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgZXhlY19vYmpl Y3QyW05VTV9CVUZGRVJTXTsKKwl1aW50MzJfdCBiYXRjaF9idWZmZXJbQk9fU0laRV07CisJdWlu dDMyX3QgY3R4X2lkLCBkYXRhMzI7CisJdWludDY0X3QgYWRkcmVzcywgZGF0YTY0LCBjdXJfcHBn dHRfb2ZmLCBleGVjX2ZsYWdzOworCXVpbnQ2NF90IGZpcnN0X3RpbGVfYWRkciwgbGFzdF90aWxl X2FkZHI7CisKKwlmaXJzdF90aWxlX2FkZHIgPSBzZWdtZW50X2Jhc2VfYWRkcjsKKwlsYXN0X3Rp bGVfYWRkciAgPSBmaXJzdF90aWxlX2FkZHIgKyBUUlRUX1NFR01FTlRfU0laRSAtIFRJTEVfU0la RTsKKworCWlmIChzZWdtZW50X2Jhc2VfYWRkciA9PSAwKSB7CisJCS8qIFVzZSB0aGUgZGVmYXVs dCBjb250ZXh0IGZvciBmaXJzdCBpdGVyYXRpb24gKi8KKwkJY3R4X2lkID0gMDsKKwkJY3VyX3Bw Z3R0X29mZiA9IFRSVFRfU0VHTUVOVF9TSVpFOworCQlleGVjX2ZsYWdzID0gRVhFQ19PQkpFQ1Rf U1VQUE9SVFNfNDhCX0FERFJFU1M7CisJfSBlbHNlIHsKKwkJY3R4X2lkID0gZ2VtX2NvbnRleHRf Y3JlYXRlKGZkKTsKKwkJY3VyX3BwZ3R0X29mZiA9IDA7CisJCWV4ZWNfZmxhZ3MgPSAwOworCX0K KworCS8qIGZpcnN0IGFsbG9jYXRlIEJhdGNoIGJ1ZmZlciBCTyAqLworCWJvX2FsbG9jX3NldHVw KGZkLCAmZXhlY19vYmplY3QyW0JBVENIXSwgQk9fU0laRSwgZXhlY19mbGFncywgTlVMTCk7CisK KwkvKiB0YWJsZSBCT3MgYW5kIGRhdGEgYnVmZmVyIEJPcyBhcmUgd3JpdHRlbiBieSBHUFUgYW5k IGFyZSBzb2Z0IHBpbm5lZCAqLworCWV4ZWNfZmxhZ3MgfD0gKEVYRUNfT0JKRUNUX1dSSVRFIHwg RVhFQ19PQkpFQ1RfUElOTkVEKTsKKworCS8qIEFsbG9jYXRlIGEgTDMgdGFibGUgQk8gKi8KKwli b19hbGxvY19zZXR1cChmZCwgJmV4ZWNfb2JqZWN0MltMM19UQkxdLCBUQUJMRV9TSVpFLCBleGVj X2ZsYWdzLCAmY3VyX3BwZ3R0X29mZik7CisKKwkvKiBBbGxvY2F0ZSB0d28gTDIgdGFibGUgQk9z ICovCisJYm9fYWxsb2Nfc2V0dXAoZmQsICZleGVjX29iamVjdDJbTDJfVEJMMV0sIFRBQkxFX1NJ WkUsIGV4ZWNfZmxhZ3MsICZjdXJfcHBndHRfb2ZmKTsKKwlib19hbGxvY19zZXR1cChmZCwgJmV4 ZWNfb2JqZWN0MltMMl9UQkwyXSwgVEFCTEVfU0laRSwgZXhlY19mbGFncywgJmN1cl9wcGd0dF9v ZmYpOworCisJLyogQWxsb2NhdGUgdHdvIEwxIHRhYmxlIEJPcyAqLworCWJvX2FsbG9jX3NldHVw KGZkLCAmZXhlY19vYmplY3QyW0wxX1RCTDFdLCBUQUJMRV9TSVpFLCBleGVjX2ZsYWdzLCAmY3Vy X3BwZ3R0X29mZik7CisJYm9fYWxsb2Nfc2V0dXAoZmQsICZleGVjX29iamVjdDJbTDFfVEJMMl0s IFRBQkxFX1NJWkUsIGV4ZWNfZmxhZ3MsICZjdXJfcHBndHRfb2ZmKTsKKworCS8qIEFsaWduIHRo ZSBQUEdUVCBvZmZzZXRzIGZvciB0aGUgMiBkYXRhIGJ1ZmZlcnMgdG8gbmV4dCA2NCBLQiBib3Vu ZGFyeSAqLworCWN1cl9wcGd0dF9vZmYgPSBBTElHTihjdXJfcHBndHRfb2ZmLCBUSUxFX1NJWkUp OworCisJLyogQWxsb2NhdGUgdHdvIERhdGEgYnVmZmVyIEJPcyAqLworCWJvX2FsbG9jX3NldHVw KGZkLCAmZXhlY19vYmplY3QyW0RBVEExXSwgVElMRV9TSVpFLCBleGVjX2ZsYWdzLCAmY3VyX3Bw Z3R0X29mZik7CisJYm9fYWxsb2Nfc2V0dXAoZmQsICZleGVjX29iamVjdDJbREFUQTJdLCBUSUxF X1NJWkUsIGV4ZWNfZmxhZ3MsICZjdXJfcHBndHRfb2ZmKTsKKworCS8qIEFkZCBjb21tYW5kcyB0 byB1cGRhdGUgdGhlIHR3byBMMyB0YWJsZSBlbnRyaWVzIHRvIHBvaW50IHRoZW0gdG8gdGhlIEwy IHRhYmxlcyovCisJYWRkcmVzcyA9IGV4ZWNfb2JqZWN0MltMM19UQkxdLm9mZnNldDsKKwlkYXRh NjQgPSBleGVjX29iamVjdDJbTDJfVEJMMV0ub2Zmc2V0OworCWxlbiA9IGVtaXRfc3RvcmVfcXdv cmQoZmQsIGJhdGNoX2J1ZmZlciwgbGVuLCBhZGRyZXNzLCBkYXRhNjQpOworCisJYWRkcmVzcyA9 IGV4ZWNfb2JqZWN0MltMM19UQkxdLm9mZnNldCArIDUxMSpzaXplb2YodWludDY0X3QpOworCWRh dGE2NCA9IGV4ZWNfb2JqZWN0MltMMl9UQkwyXS5vZmZzZXQ7CisJbGVuID0gZW1pdF9zdG9yZV9x d29yZChmZCwgYmF0Y2hfYnVmZmVyLCBsZW4sIGFkZHJlc3MsIGRhdGE2NCk7CisKKwkvKiBBZGQg Y29tbWFuZHMgdG8gdXBkYXRlIGFuIGVudHJ5IG9mIDIgTDIgdGFibGVzIHRvIHBvaW50IHRoZW0g dG8gdGhlIEwxIHRhYmxlcyovCisJYWRkcmVzcyA9IGV4ZWNfb2JqZWN0MltMMl9UQkwxXS5vZmZz ZXQ7CisJZGF0YTY0ID0gZXhlY19vYmplY3QyW0wxX1RCTDFdLm9mZnNldDsKKwlsZW4gPSBlbWl0 X3N0b3JlX3F3b3JkKGZkLCBiYXRjaF9idWZmZXIsIGxlbiwgYWRkcmVzcywgZGF0YTY0KTsKKwor CWFkZHJlc3MgPSBleGVjX29iamVjdDJbTDJfVEJMMl0ub2Zmc2V0ICsgNTExKnNpemVvZih1aW50 NjRfdCk7CisJZGF0YTY0ID0gZXhlY19vYmplY3QyW0wxX1RCTDJdLm9mZnNldDsKKwlsZW4gPSBl bWl0X3N0b3JlX3F3b3JkKGZkLCBiYXRjaF9idWZmZXIsIGxlbiwgYWRkcmVzcywgZGF0YTY0KTsK KworCS8qIEFkZCBjb21tYW5kcyB0byB1cGRhdGUgYW4gZW50cnkgb2YgMiBMMSB0YWJsZXMgdG8g cG9pbnQgdGhlbSB0byB0aGUgZGF0YSBidWZmZXJzKi8KKwlhZGRyZXNzID0gZXhlY19vYmplY3Qy W0wxX1RCTDFdLm9mZnNldDsKKwlkYXRhMzIgPSBleGVjX29iamVjdDJbREFUQTFdLm9mZnNldCA+ PiAxNjsKKwlsZW4gPSBlbWl0X3N0b3JlX2R3b3JkKGZkLCBiYXRjaF9idWZmZXIsIGxlbiwgYWRk cmVzcywgZGF0YTMyKTsKKworCWFkZHJlc3MgPSBleGVjX29iamVjdDJbTDFfVEJMMl0ub2Zmc2V0 ICsgMTAyMypzaXplb2YodWludDMyX3QpOworCWRhdGEzMiA9IGV4ZWNfb2JqZWN0MltEQVRBMl0u b2Zmc2V0ID4+IDE2OworCWxlbiA9IGVtaXRfc3RvcmVfZHdvcmQoZmQsIGJhdGNoX2J1ZmZlciwg bGVuLCBhZGRyZXNzLCBkYXRhMzIpOworCisJLyogQWRkIGNvbW1hbmRzIHRvIHVwZGF0ZSB0aGUg MiBkYXRhIGJ1ZmZlcnMsIHVzaW5nIHRoZWlyIFRSVFQgVkEgKi8KKwlkYXRhMzIgPSAweDEyMzQ1 Njc4OworCWxlbiA9IGVtaXRfc3RvcmVfZHdvcmQoZmQsIGJhdGNoX2J1ZmZlciwgbGVuLCBmaXJz dF90aWxlX2FkZHIsIGRhdGEzMik7CisJbGVuID0gZW1pdF9zdG9yZV9kd29yZChmZCwgYmF0Y2hf YnVmZmVyLCBsZW4sIGxhc3RfdGlsZV9hZGRyLCBkYXRhMzIpOworCisJbGVuID0gZW1pdF9iYl9l bmQoZmQsIGJhdGNoX2J1ZmZlciwgbGVuKTsKKwlnZW1fd3JpdGUoZmQsIGV4ZWNfb2JqZWN0MltC QVRDSF0uaGFuZGxlLCAwLCBiYXRjaF9idWZmZXIsIGxlbio0KTsKKworCS8qIFJlcXVlc3QgS01E IHRvIHNldHVwIHRoZSBUUi1UVCAqLworCXNldHVwX3RydHQoZmQsIGN0eF9pZCwgZXhlY19vYmpl Y3QyW0wzX1RCTF0ub2Zmc2V0LCBmaXJzdF90aWxlX2FkZHIpOworCisJcmluZyA9IEk5MTVfRVhF Q19SRU5ERVI7CisJc2V0dXBfZXhlY2J1ZmZlcigmZXhlY2J1ZiwgZXhlY19vYmplY3QyLCBjdHhf aWQsIHJpbmcsIE5VTV9CVUZGRVJTLCBsZW4qNCk7CisKKwkvKiBzdWJtaXQgY29tbWFuZCBidWZm ZXIgKi8KKwlnZW1fZXhlY2J1ZihmZCwgJmV4ZWNidWYpOworCisJLyogcmVhZCB0aGUgMiBkYXRh IGJ1ZmZlcnMgdG8gY2hlY2sgZm9yIHRoZSB2YWx1ZSB3cml0dGVuIGJ5IHRoZSBHUFUgKi8KKwlw dHIgPSBtbWFwX2JvKGZkLCBleGVjX29iamVjdDJbREFUQTFdLmhhbmRsZSwgVElMRV9TSVpFKTsK KwlpZ3RfZmFpbF9vbl9mKHB0clswXSAhPSBkYXRhMzIsCisJCSJcbkNQVSByZWFkIGRvZXMgbm90 IG1hdGNoIEdQVSB3cml0ZSxcCisJCWV4cGVjdGVkOiAweCV4LCBnb3Q6IDB4JXhcbiIsCisJCWRh dGEzMiwgcHRyWzBdKTsKKworCXB0ciA9IG1tYXBfYm8oZmQsIGV4ZWNfb2JqZWN0MltEQVRBMl0u aGFuZGxlLCBUSUxFX1NJWkUpOworCWlndF9mYWlsX29uX2YocHRyWzBdICE9IGRhdGEzMiwKKwkJ IlxuQ1BVIHJlYWQgZG9lcyBub3QgbWF0Y2ggR1BVIHdyaXRlLFwKKwkJZXhwZWN0ZWQ6IDB4JXgs IGdvdDogMHgleFxuIiwKKwkJZGF0YTMyLCBwdHJbMF0pOworCisJZ2VtX2Nsb3NlKGZkLCBleGVj X29iamVjdDJbTDNfVEJMXS5oYW5kbGUpOworCWdlbV9jbG9zZShmZCwgZXhlY19vYmplY3QyW0wy X1RCTDFdLmhhbmRsZSk7CisJZ2VtX2Nsb3NlKGZkLCBleGVjX29iamVjdDJbTDJfVEJMMl0uaGFu ZGxlKTsKKwlnZW1fY2xvc2UoZmQsIGV4ZWNfb2JqZWN0MltMMV9UQkwxXS5oYW5kbGUpOworCWdl bV9jbG9zZShmZCwgZXhlY19vYmplY3QyW0wxX1RCTDJdLmhhbmRsZSk7CisJZ2VtX2Nsb3NlKGZk LCBleGVjX29iamVjdDJbREFUQTFdLmhhbmRsZSk7CisJZ2VtX2Nsb3NlKGZkLCBleGVjX29iamVj dDJbREFUQTJdLmhhbmRsZSk7CisJZ2VtX2Nsb3NlKGZkLCBleGVjX29iamVjdDJbQkFUQ0hdLmhh bmRsZSk7CisKKwlpZiAoY3R4X2lkKQorCQlnZW1fY29udGV4dF9kZXN0cm95KGZkLCBjdHhfaWQp OworfQorCitzdGF0aWMgdm9pZCBnZW1fYmFzaWNfdHJ0dF91c2Uodm9pZCkKK3sKKwlpbnQgZmQ7 CisJdWludDY0X3Qgc2VnbWVudF9iYXNlX2FkZHI7CisKKwlmZCA9IGRybV9vcGVuX2RyaXZlcihE UklWRVJfSU5URUwpOworCWlndF9yZXF1aXJlKHVzZXNfZnVsbF9wcGd0dChmZCwgRlVMTF80OF9C SVRfUFBHVFQpKTsKKwlpZ3RfcmVxdWlyZShoYXNfc29mdHBpbl9zdXBwb3J0KGZkKSk7CisJaWd0 X3JlcXVpcmUoaGFzX3RydHRfc3VwcG9ydChmZCkpOworCisJZm9yIChzZWdtZW50X2Jhc2VfYWRk ciA9IDA7CisJICAgICBzZWdtZW50X2Jhc2VfYWRkciA8IFBQR1RUX1NJWkU7CisJICAgICBzZWdt ZW50X2Jhc2VfYWRkciArPSBUUlRUX1NFR01FTlRfU0laRSkKKwl7CisJCXN1Ym1pdF90cnR0X2Nv bnRleHQoZmQsIHNlZ21lbnRfYmFzZV9hZGRyKTsKKwl9CisKKwljbG9zZShmZCk7Cit9CisKK2ln dF9tYWluCit7CisKKwkvKiB0ZXN0IG5lZWRzIDQ4IFBQR1RUICYgU29mdCBQaW4gc3VwcG9ydCAq LworCWlndF9zdWJ0ZXN0KCJiYXNpYyIpIHsKKwkJZ2VtX2Jhc2ljX3RydHRfdXNlKCk7CisJfQor fQorCi0tIAoxLjkuMgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1n ZngK