From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by gabe.freedesktop.org (Postfix) with ESMTPS id E01226E393 for ; Fri, 22 Mar 2019 14:09:04 +0000 (UTC) From: Venkata Sandeep Dhanalakota Date: Fri, 22 Mar 2019 07:09:04 -0700 Message-Id: <20190322140904.11358-1-venkata.s.dhanalakota@intel.com> In-Reply-To: <20190321001316.28178-1-chris@chris-wilson.co.uk> References: <20190321001316.28178-1-chris@chris-wilson.co.uk> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t] i915/gem_sparseobject: Add sparse object IGT tests 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: igt-dev@lists.freedesktop.org List-ID: U3BhcnNlIG9iamVjdCBpcyBhIHByb3h5IG9iamVjdCB0aGF0IGNhbiBsaW5rIHRoZSBwYWdlcyBm cm9tCm90aGVyIG9iamVjdHMuIFR5cGljYWwgdXNlIGNhc2UgYXJlIGh1Z2UgY29udGludW9zIGZy YW1lYnVmZmVyCnRoYXQgaXMgdG9vIGJpZyB0byBoYW5kbGUgc2Nhbm91dC4gU3BhcnNlIG9iamVj dCBjYW4gdXNlZCBhcwphbnkgb3RoZXIgcmVndWxhciBvYmplY3QgYWZ0ZXIgdGhlIHBhZ2VzIGZy b20gc291cmNlIG9iamVjdAphcmUgbGlua2VkLgpUaGlzIHBhdGNoIGludHJvZHVjZXMgaWd0IHRl c3QgdG8gZXhlcmNpc2UgdmFyaW91cyB1c2FnZXMKb2YgdGhlIHNwYXJzZSBvYmplY3QsIHdoaWNo IGluY2x1ZGU6CjEpIHJlYWQvd3JpdGUvbW1hcCBzcGFyc2Ugb2JqZWN0IGFmdGVyIGl0IGlzIGxp bmtlZCB0byB2YXJpb3VzCiAgIHNvdXJjZSBvYmplY3RzIHdoaWNoIGhhdmUgYmFja2luZyBwYWdl cyBpbiBzdG9sZW4gbWVtb3J5LAogICBpbnRlcm5hbCBtZW1vcnkgZXRjLgoyKSBGZWVkaW5nIHNw YXJzZSBvYmplY3QgdG8gZXhlY2J1ZiBhZnRlciBpdCBpcyBsaW5rZWQgd2l0aAogICBzb3VyY2Ug b2JqZWN0LgoKRHJpdmVyIGNoYW5nZXMgYXJlIHBvc3RlZCBoZXJlCmh0dHBzOi8vY2dpdC5mcmVl ZGVza3RvcC5vcmcvfmlja2xlL2xpbnV4LTIuNi8KY29tbWl0Lz9oPXdpcC1zcGFyc2VvYmplY3Qm aWQ9Y2RkNmY5M2YwNWM2NjA2ZDdkMDFjYjBlODU5NmUyMWIyZTdlZWYwNAoKVGhpcyBpcyBzdGls bCBXSVAgZ2V0cyB1cGRhdGVkLgpDb21waWxlLXRlc3RlZCBvbmx5LgoKU2lnbmVkLW9mZi1ieTog VmVua2F0YSBTYW5kZWVwLCBEaGFuYWxha290YSA8dmVua2F0YS5zLmRoYW5hbGFrb3RhQGludGVs LmNvbT4KLS0tCiBpbmNsdWRlL2RybS11YXBpL2k5MTVfZHJtLmggICB8ICA0MiArKysKIGxpYi9N YWtlZmlsZS5zb3VyY2VzICAgICAgICAgIHwgICAyICsKIGxpYi9pOTE1L2dlbV9zcGFyc2UuYyAg ICAgICAgIHwgMTIxICsrKysrKysKIGxpYi9pOTE1L2dlbV9zcGFyc2UuaCAgICAgICAgIHwgIDM5 ICsrKwogbGliL2lvY3RsX3dyYXBwZXJzLmMgICAgICAgICAgfCAgMTkgKy0KIGxpYi9pb2N0bF93 cmFwcGVycy5oICAgICAgICAgIHwgICAxICsKIGxpYi9tZXNvbi5idWlsZCAgICAgICAgICAgICAg IHwgICAxICsKIHRlc3RzL01ha2VmaWxlLnNvdXJjZXMgICAgICAgIHwgICAzICsKIHRlc3RzL2k5 MTUvZ2VtX3NwYXJzZW9iamVjdC5jIHwgNjE1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKIHRlc3RzL21lc29uLmJ1aWxkICAgICAgICAgICAgIHwgICAxICsKIDEwIGZpbGVzIGNo YW5nZWQsIDgzNyBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAw NjQ0IGxpYi9pOTE1L2dlbV9zcGFyc2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9pOTE1L2dl bV9zcGFyc2UuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2k5MTUvZ2VtX3NwYXJzZW9iamVj dC5jCgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0tdWFwaS9pOTE1X2RybS5oIGIvaW5jbHVkZS9k cm0tdWFwaS9pOTE1X2RybS5oCmluZGV4IDRhZTFjNmZmLi4zZjYxNGM4NSAxMDA2NDQKLS0tIGEv aW5jbHVkZS9kcm0tdWFwaS9pOTE1X2RybS5oCisrKyBiL2luY2x1ZGUvZHJtLXVhcGkvaTkxNV9k cm0uaApAQCAtMzIxLDYgKzMyMSw3IEBAIHR5cGVkZWYgc3RydWN0IF9kcm1faTkxNV9zYXJlYSB7 CiAjZGVmaW5lIERSTV9JOTE1X1BFUkZfQUREX0NPTkZJRwkweDM3CiAjZGVmaW5lIERSTV9JOTE1 X1BFUkZfUkVNT1ZFX0NPTkZJRwkweDM4CiAjZGVmaW5lIERSTV9JOTE1X1FVRVJZCQkJMHgzOQor I2RlZmluZSBEUk1fSTkxNV9HRU1fU0VUX1BBR0VTICAgICAgICAgMHgzYQogLyogTXVzdCBiZSBr ZXB0IGNvbXBhY3QgLS0gbm8gaG9sZXMgKi8KIAogI2RlZmluZSBEUk1fSU9DVExfSTkxNV9JTklU CQlEUk1fSU9XKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfSU5JVCwgZHJtX2k5MTVfaW5p dF90KQpAQCAtMzUzLDYgKzM1NCw3IEBAIHR5cGVkZWYgc3RydWN0IF9kcm1faTkxNV9zYXJlYSB7 CiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9FTlRFUlZUCURSTV9JTyhEUk1fQ09NTUFORF9C QVNFICsgRFJNX0k5MTVfR0VNX0VOVEVSVlQpCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9M RUFWRVZUCURSTV9JTyhEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX0xFQVZFVlQpCiAj ZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9DUkVBVEUJRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFT RSArIERSTV9JOTE1X0dFTV9DUkVBVEUsIHN0cnVjdCBkcm1faTkxNV9nZW1fY3JlYXRlKQorI2Rl ZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fQ1JFQVRFX0VYVAlEUk1fSU9XUihEUk1fQ09NTUFORF9C QVNFICsgRFJNX0k5MTVfR0VNX0NSRUFURSwgc3RydWN0IGRybV9pOTE1X2dlbV9jcmVhdGVfZXh0 KQogI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fUFJFQUQJRFJNX0lPVyAoRFJNX0NPTU1BTkRf QkFTRSArIERSTV9JOTE1X0dFTV9QUkVBRCwgc3RydWN0IGRybV9pOTE1X2dlbV9wcmVhZCkKICNk ZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX1BXUklURQlEUk1fSU9XIChEUk1fQ09NTUFORF9CQVNF ICsgRFJNX0k5MTVfR0VNX1BXUklURSwgc3RydWN0IGRybV9pOTE1X2dlbV9wd3JpdGUpCiAjZGVm aW5lIERSTV9JT0NUTF9JOTE1X0dFTV9NTUFQCQlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsg RFJNX0k5MTVfR0VNX01NQVAsIHN0cnVjdCBkcm1faTkxNV9nZW1fbW1hcCkKQEAgLTM4MCw2ICsz ODIsNyBAQCB0eXBlZGVmIHN0cnVjdCBfZHJtX2k5MTVfc2FyZWEgewogI2RlZmluZSBEUk1fSU9D VExfSTkxNV9QRVJGX0FERF9DT05GSUcJRFJNX0lPVyhEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5 MTVfUEVSRl9BRERfQ09ORklHLCBzdHJ1Y3QgZHJtX2k5MTVfcGVyZl9vYV9jb25maWcpCiAjZGVm aW5lIERSTV9JT0NUTF9JOTE1X1BFUkZfUkVNT1ZFX0NPTkZJRwlEUk1fSU9XKERSTV9DT01NQU5E X0JBU0UgKyBEUk1fSTkxNV9QRVJGX1JFTU9WRV9DT05GSUcsIF9fdTY0KQogI2RlZmluZSBEUk1f SU9DVExfSTkxNV9RVUVSWQkJCURSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9R VUVSWSwgc3RydWN0IGRybV9pOTE1X3F1ZXJ5KQorI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1f U0VUX1BBR0VTICAgRFJNX0lPVyhEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX1NFVF9Q QUdFUywgc3RydWN0IGRybV9pOTE1X2dlbV9zZXRfcGFnZXMpCiAKIC8qIEFsbG93IGRyaXZlcnMg dG8gc3VibWl0IGJhdGNoYnVmZmVycyBkaXJlY3RseSB0byBoYXJkd2FyZSwgcmVseWluZwogICog b24gdGhlIHNlY3VyaXR5IG1lY2hhbmlzbXMgcHJvdmlkZWQgYnkgaGFyZHdhcmUuCkBAIC01NjMs NiArNTY2LDEyIEBAIHR5cGVkZWYgc3RydWN0IGRybV9pOTE1X2lycV93YWl0IHsKICAqLwogI2Rl ZmluZSBJOTE1X1BBUkFNX01NQVBfR1RUX0NPSEVSRU5UCTUyCiAKKy8qCisgKiBRdWVyeSB0aGUg dmVyc2lvbiBvZiBEUk1fSTkxNV9HRU1fQ1JFQVRFIHN1cHBvcnRlZC4KKyAqIHYwIC0gSW5pdGlh bCB2ZXJzaW9uCisgKiB2MSAtIEFkZHMgZmxhZ3MgYW5kIHN1cHBvcnQgZm9yIGNyZWF0aW5nIG9m IHNwYXJzZSBvYmplY3RzCisgKi8KKyNkZWZpbmUgSTkxNV9QQVJBTV9DUkVBVEVfVkVSU0lPTiAg ICAgIDUzCiAvKiBNdXN0IGJlIGtlcHQgY29tcGFjdCAtLSBubyBob2xlcyBhbmQgd2VsbCBkb2N1 bWVudGVkICovCiAKIHR5cGVkZWYgc3RydWN0IGRybV9pOTE1X2dldHBhcmFtIHsKQEAgLTY2Niw2 ICs2NzUsMjUgQEAgc3RydWN0IGRybV9pOTE1X2dlbV9jcmVhdGUgewogCV9fdTMyIHBhZDsKIH07 CiAKK3N0cnVjdCBkcm1faTkxNV9nZW1fY3JlYXRlX2V4dCB7CisJLyoqCisJICogUmVxdWVzdGVk IHNpemUgZm9yIHRoZSBvYmplY3QuCisJICoKKwkgKiBUaGUgKHBhZ2UtYWxpZ25lZCkgYWxsb2Nh dGVkIHNpemUgZm9yIHRoZSBvYmplY3Qgd2lsbCBiZSByZXR1cm5lZC4KKwkgKi8KKwlfX3U2NCBz aXplOworCS8qKgorCSAqIFJldHVybmVkIGhhbmRsZSBmb3IgdGhlIG9iamVjdC4KKwkgKgorCSAq IE9iamVjdCBoYW5kbGVzIGFyZSBub256ZXJvLgorCSAqLworCV9fdTMyIGhhbmRsZTsKKwlfX3Uz MiBwYWQ7CisKKwlfX3U2NCBmbGFnczsKKyNkZWZpbmUgSTkxNV9HRU1fQ1JFQVRFX1NQQVJTRSAw eDEKK307CisKIHN0cnVjdCBkcm1faTkxNV9nZW1fcHJlYWQgewogCS8qKiBIYW5kbGUgZm9yIHRo ZSBvYmplY3QgYmVpbmcgcmVhZC4gKi8KIAlfX3UzMiBoYW5kbGU7CkBAIC0xMzExLDYgKzEzMzks MjAgQEAgc3RydWN0IGRybV9pOTE1X2dlbV9tYWR2aXNlIHsKIAlfX3UzMiByZXRhaW5lZDsKIH07 CiAKK3N0cnVjdCBkcm1faTkxNV9nZW1fc2V0X3BhZ2VzIHsKKwlfX3UzMiBkc3RfaGFuZGxlOwor CV9fdTMyIHNyY19oYW5kbGU7CisKKwlfX3U2NCBkc3Rfb2Zmc2V0OworCV9fdTY0IHNyY19vZmZz ZXQ7CisKKwlfX3U2NCBkc3Rfc3RyaWRlOworCV9fdTY0IHNyY19zdHJpZGU7CisKKwlfX3U2NCB3 aWR0aDsKKwlfX3U2NCBoZWlnaHQ7Cit9OworCiAvKiBmbGFncyAqLwogI2RlZmluZSBJOTE1X09W RVJMQVlfVFlQRV9NQVNLIAkJMHhmZgogI2RlZmluZSBJOTE1X09WRVJMQVlfWVVWX1BMQU5BUiAJ MHgwMQpkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlLnNvdXJjZXMgYi9saWIvTWFrZWZpbGUuc291 cmNlcwppbmRleCBjZjI3MjA5OC4uMzJkNTE1MjkgMTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZS5z b3VyY2VzCisrKyBiL2xpYi9NYWtlZmlsZS5zb3VyY2VzCkBAIC05LDYgKzksOCBAQCBsaWJfc291 cmNlX2xpc3QgPQkgCVwKIAlpOTE1L2dlbV9zY2hlZHVsZXIuaAlcCiAJaTkxNS9nZW1fc3VibWlz c2lvbi5jCVwKIAlpOTE1L2dlbV9zdWJtaXNzaW9uLmgJXAorCWk5MTUvZ2VtX3NwYXJzZS5oCVwK KwlpOTE1L2dlbV9zcGFyc2UuYwlcCiAJaTkxNS9nZW1fcmluZy5oCVwKIAlpOTE1L2dlbV9yaW5n LmMJXAogCWk5MTUvZ2VtX21tYW4uYwlcCmRpZmYgLS1naXQgYS9saWIvaTkxNS9nZW1fc3BhcnNl LmMgYi9saWIvaTkxNS9nZW1fc3BhcnNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAuLjhmMmE4YTg0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2k5MTUvZ2VtX3NwYXJzZS5j CkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTcgSW50ZWwgQ29ycG9y YXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJn ZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFu ZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRv IGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRo b3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdl LCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVz IG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBT b2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBj b25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBl cm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwg YmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUK KyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBX SVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNM VURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1F TlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERF UlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElU WSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBB UklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FS RSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKi8K KworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJp b2N0bF93cmFwcGVycy5oIgorI2luY2x1ZGUgImRybXRlc3QuaCIKKworI2luY2x1ZGUgImdlbV9z cGFyc2UuaCIKKworLyoqCisgKiBnZW1fY3JlYXRlX3NwYXJzZToKKyAqIEBmZDogb3BlbiBpOTE1 IGRybSBmaWxlIGRlc2NyaXB0b3IKKyAqIEBzaXplOiBkZXNpcmVkIHNpemUgb2YgdGhlIGJ1ZmZl cgorICoKKyAqIFRoaXMgd3JhcHMgdGhlIG5ldyBHRU1fQ1JFQVRFIGlvY3RsLCB3aGljaCBhbGxv Y2F0ZXMgYSBuZXcgc3BhcnNlIGdlbSBidWZmZXIKKyAqIG9iamVjdCBvZiBAc2l6ZS4KKyAqCisg KiBSZXR1cm5zOiBUaGUgZmlsZS1wcml2YXRlIGhhbmRsZSBvZiB0aGUgY3JlYXRlZCBidWZmZXIg b2JqZWN0CisgKi8KKworc3RhdGljIGludCBfX2dlbV9jcmVhdGVfc3BhcnNlKGludCBmZCwgdWlu dDY0X3Qgc2l6ZSwgdWludDMyX3QgKm91dCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NyZWF0 ZV9leHQgY3JlYXRlID0geworCQkuc2l6ZSA9IHNpemUsCisJCS5mbGFncyA9IEk5MTVfR0VNX0NS RUFURV9TUEFSU0UsCisJfTsKKwlpbnQgZXJyOworCisJaWYgKGlndF9pb2N0bChmZCwgRFJNX0lP Q1RMX0k5MTVfR0VNX0NSRUFURV9FWFQsICZjcmVhdGUpID09IDApIHsKKwkJKm91dCA9IGNyZWF0 ZS5oYW5kbGU7CisJCWVyciA9IDA7CisJfSBlbHNlIHsKKwkJZXJyID0gLWVycm5vOworCQlpZ3Rf YXNzdW1lKGVycik7CisJfQorCisJZXJybm8gPSAwOworCXJldHVybiBlcnI7Cit9CisKK3VpbnQz Ml90IGdlbV9jcmVhdGVfc3BhcnNlKGludCBpOTE1LCB1aW50NjRfdCBzaXplKQoreworCXVpbnQz Ml90IGhhbmRsZSA9IDA7CisKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NyZWF0ZV9zcGFyc2UoaTkx NSwgc2l6ZSwgJmhhbmRsZSksIDApOworCWlndF9hc3NlcnQoaGFuZGxlKTsKKworCXJldHVybiBo YW5kbGU7Cit9CisKK2ludCBfX2dlbV9zZXRfcGFnZXMoaW50IGZkLCB1aW50MzJfdCBkc3RfaGFu ZGxlLCB1aW50MzJfdCBkc3Rfb2Zmc2V0LAorCQkgIHVpbnQzMl90IGRzdF9zdHJpZGUsIHVpbnQz Ml90IHNyY19oYW5kbGUsCisJCSAgdWludDMyX3Qgc3JjX29mZnNldCwgdWludDMyX3Qgc3JjX3N0 cmlkZSwKKwkJICB1aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0KQoreworCXN0cnVjdCBk cm1faTkxNV9nZW1fc2V0X3BhZ2VzIHNldF9wYWdlczsKKwlpbnQgZXJyOworCisJc2V0X3BhZ2Vz LmRzdF9oYW5kbGUgPSBkc3RfaGFuZGxlOworCXNldF9wYWdlcy5kc3Rfb2Zmc2V0ID0gZHN0X29m ZnNldDsKKwlzZXRfcGFnZXMuZHN0X3N0cmlkZSA9IGRzdF9zdHJpZGU7CisJc2V0X3BhZ2VzLnNy Y19oYW5kbGUgPSBzcmNfaGFuZGxlOworCXNldF9wYWdlcy5zcmNfb2Zmc2V0ID0gc3JjX29mZnNl dDsKKwlzZXRfcGFnZXMuc3JjX3N0cmlkZSA9IHNyY19zdHJpZGU7CisJc2V0X3BhZ2VzLndpZHRo ID0gd2lkdGg7CisJc2V0X3BhZ2VzLmhlaWdodCA9IGhlaWdodDsKKworCWVyciA9IDA7CisJaWYo aWd0X2lvY3RsKGZkLCBEUk1fSU9DVExfSTkxNV9HRU1fU0VUX1BBR0VTLCAmc2V0X3BhZ2VzKSkK KwkJZXJyID0gLWVycm5vOworCWVycm5vID0gMDsKKwlyZXR1cm4gZXJyOworfQorCisvKioKKyAq IGdlbV9zZXRfcGFnZXM6CisgKiBBbGwgcGFyYW1ldGVycyBvdGhlciB0aGFuIGZkIGFuZCBoYW5k bGVzIGFyZSBpbiB1bml0cyBvZiBwYWdlcy4KKyAqIEBmZDogb3BlbiBpOTE1IGRybSBmaWxlIGRl c2NyaXB0b3IKKyAqIEBkc3RfaGFuZGxlOiBkZXN0aW5hdGlvbiBzcGFyc2Ugb2JqZWN0IGhhbmRs ZQorICogQGRzdF9vZmZzZXQ6IG9mZnNldCBpbiBkZXN0aW5hdGlvbiBvYmplY3Qgd2hlcmUgbWFw cGluZyBpcyBkb25lCisgKiBAZHN0X3N0cmlkZTogZGVzdGluYXRpb24gb2JqZWN0IHN0cmlkZQor ICogQHNyY19oYW5kbGU6IHNvdXJjZSBvYmplY3QgaGFuZGxlCisgKiBAc3JjX29mZnNldDogb2Zm c2V0IGluIHRoZSBzb3VyY2Ugb2JqZWN0CisgKiBAc3JjX3N0cmlkZTogc3JjIG9iamVjdCBzdHJp ZGUKKyAqIEB3aWR0aDogd2lkdGggb2YgcmVjdGFuZ2xlIHRvIG1hcAorICogQGhlaWdodDogaGVp Z2h0IG9mIHJlY3RhbmdlIHRvIG1hcAorICoKKyAqIFRoaXMgd3JhcHMgU0VUX1BBR0VTIGlvY3Rs LCB3aGljaCBtYXBzIHBhZ2VzIGZyb20gc3JjIG9iamVjdCB0byB0aGUKKyAqIGRlc3RpbmF0aW9u IG9iamVjdC4KKyAqLwordm9pZCBnZW1fc2V0X3BhZ2VzKGludCBmZCwgdWludDMyX3QgZHN0X2hh bmRsZSwgdWludDMyX3QgZHN0X29mZnNldCwKKwkJICB1aW50MzJfdCBkc3Rfc3RyaWRlLCB1aW50 MzJfdCBzcmNfaGFuZGxlLAorCQkgIHVpbnQzMl90IHNyY19vZmZzZXQsIHVpbnQzMl90IHNyY19z dHJpZGUsCisJCSAgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCkKK3sKKwlpZ3RfYXNz ZXJ0X2VxKF9fZ2VtX3NldF9wYWdlcyhmZCwgZHN0X2hhbmRsZSwgZHN0X29mZnNldCwgZHN0X3N0 cmlkZSwKKwkJCQkgICAgICBzcmNfaGFuZGxlLCBzcmNfb2Zmc2V0LCBzcmNfc3RyaWRlLAorCQkJ CSAgICAgIHdpZHRoLCBoZWlnaHQpLCAwKTsKK30KZGlmZiAtLWdpdCBhL2xpYi9pOTE1L2dlbV9z cGFyc2UuaCBiL2xpYi9pOTE1L2dlbV9zcGFyc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMC4uMzI0OGJlY2YKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvaTkxNS9nZW1fc3Bh cnNlLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE3IEludGVsIENv cnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj aGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2Fy ZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisg KiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcg d2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBt ZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNv cGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQor ICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dp bmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhp cyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNo YWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2Yg dGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwg SU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklO R0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBI T0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lT RSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09G VFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgor ICovCisKKyNpZm5kZWYgR0VNX1NQQVJTRV9ICisjZGVmaW5lIEdFTV9TUEFSU0VfSAorCisjaW5j bHVkZSA8c3RkaW50Lmg+CisKK3VpbnQzMl90IGdlbV9jcmVhdGVfc3BhcnNlKGludCBpOTE1LCB1 aW50NjRfdCBzaXplKTsKK3ZvaWQgZ2VtX3NldF9wYWdlcyhpbnQgZmQsIHVpbnQzMl90IGRzdF9o YW5kbGUsIHVpbnQzMl90IGRzdF9vZmZzZXQsCisJCSAgdWludDMyX3QgZHN0X3N0cmlkZSwgdWlu dDMyX3Qgc3JjX2hhbmRsZSwKKwkJICB1aW50MzJfdCBzcmNfb2Zmc2V0LCB1aW50MzJfdCBzcmNf c3RyaWRlLAorCQkgIHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQpOworCitpbnQgX19n ZW1fc2V0X3BhZ2VzKGludCBmZCwgdWludDMyX3QgZHN0X2hhbmRsZSwgdWludDMyX3QgZHN0X29m ZnNldCwKKwkJICB1aW50MzJfdCBkc3Rfc3RyaWRlLCB1aW50MzJfdCBzcmNfaGFuZGxlLAorCQkg IHVpbnQzMl90IHNyY19vZmZzZXQsIHVpbnQzMl90IHNyY19zdHJpZGUsCisJCSAgdWludDMyX3Qg d2lkdGgsIHVpbnQzMl90IGhlaWdodCk7CisjZW5kaWYgLyogR0VNX1NQQVJTRV9IICovCmRpZmYg LS1naXQgYS9saWIvaW9jdGxfd3JhcHBlcnMuYyBiL2xpYi9pb2N0bF93cmFwcGVycy5jCmluZGV4 IGE2NmViNGJjLi5hYTQzMmZhOSAxMDA2NDQKLS0tIGEvbGliL2lvY3RsX3dyYXBwZXJzLmMKKysr IGIvbGliL2lvY3RsX3dyYXBwZXJzLmMKQEAgLTMwNSw2ICszMDUsMTcgQEAgdWludDMyX3QgZ2Vt X2ZsaW5rKGludCBmZCwgdWludDMyX3QgaGFuZGxlKQogCXJldHVybiBmbGluay5uYW1lOwogfQog CitpbnQgX19nZW1fY2xvc2UoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUpCit7CisJaW50IGVyciA9 IDA7CisKKwlpZiAoaWd0X2lvY3RsKGZkLCBEUk1fSU9DVExfR0VNX0NMT1NFLCAmaGFuZGxlKSkK KwkJZXJyID0gLWVycm5vOworCisJZXJybm8gPSAwOworCXJldHVybiBlcnI7Cit9CisKIC8qKgog ICogZ2VtX2Nsb3NlOgogICogQGZkOiBvcGVuIGk5MTUgZHJtIGZpbGUgZGVzY3JpcHRvcgpAQCAt MzE1LDEzICszMjYsNyBAQCB1aW50MzJfdCBnZW1fZmxpbmsoaW50IGZkLCB1aW50MzJfdCBoYW5k bGUpCiAgKi8KIHZvaWQgZ2VtX2Nsb3NlKGludCBmZCwgdWludDMyX3QgaGFuZGxlKQogewotCXN0 cnVjdCBkcm1fZ2VtX2Nsb3NlIGNsb3NlX2JvOwotCi0JaWd0X2Fzc2VydF9uZXEoaGFuZGxlLCAw KTsKLQotCW1lbXNldCgmY2xvc2VfYm8sIDAsIHNpemVvZihjbG9zZV9ibykpOwotCWNsb3NlX2Jv LmhhbmRsZSA9IGhhbmRsZTsKLQlkb19pb2N0bChmZCwgRFJNX0lPQ1RMX0dFTV9DTE9TRSwgJmNs b3NlX2JvKTsKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2Nsb3NlKGZkLCBoYW5kbGUpLCAwKTsKIH0K IAogaW50IF9fZ2VtX3dyaXRlKGludCBmZCwgdWludDMyX3QgaGFuZGxlLCB1aW50NjRfdCBvZmZz ZXQsIGNvbnN0IHZvaWQgKmJ1ZiwgdWludDY0X3QgbGVuZ3RoKQpkaWZmIC0tZ2l0IGEvbGliL2lv Y3RsX3dyYXBwZXJzLmggYi9saWIvaW9jdGxfd3JhcHBlcnMuaAppbmRleCBhZDkzZGFmZi4uMTM2 MTIxNWIgMTAwNjQ0Ci0tLSBhL2xpYi9pb2N0bF93cmFwcGVycy5oCisrKyBiL2xpYi9pb2N0bF93 cmFwcGVycy5oCkBAIC02Niw2ICs2Niw3IEBAIHZvaWQgZ2VtX3NldF9jYWNoaW5nKGludCBmZCwg dWludDMyX3QgaGFuZGxlLCB1aW50MzJfdCBjYWNoaW5nKTsKIHVpbnQzMl90IGdlbV9nZXRfY2Fj aGluZyhpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSk7CiB1aW50MzJfdCBnZW1fZmxpbmsoaW50IGZk LCB1aW50MzJfdCBoYW5kbGUpOwogdWludDMyX3QgZ2VtX29wZW4oaW50IGZkLCB1aW50MzJfdCBu YW1lKTsKK2ludCBfX2dlbV9jbG9zZShpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSk7CiB2b2lkIGdl bV9jbG9zZShpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSk7CiBpbnQgX19nZW1fd3JpdGUoaW50IGZk LCB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2NF90IG9mZnNldCwgY29uc3Qgdm9pZCAqYnVmLCB1aW50 NjRfdCBsZW5ndGgpOwogdm9pZCBnZW1fd3JpdGUoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIHVp bnQ2NF90IG9mZnNldCwgIGNvbnN0IHZvaWQgKmJ1ZiwgdWludDY0X3QgbGVuZ3RoKTsKZGlmZiAt LWdpdCBhL2xpYi9tZXNvbi5idWlsZCBiL2xpYi9tZXNvbi5idWlsZAppbmRleCAwZWI1NTg1ZC4u N2JhZWZhMmMgMTAwNjQ0Ci0tLSBhL2xpYi9tZXNvbi5idWlsZAorKysgYi9saWIvbWVzb24uYnVp bGQKQEAgLTMsNiArMyw3IEBAIGxpYl9zb3VyY2VzID0gWwogCSdpOTE1L2dlbV9jb250ZXh0LmMn LAogCSdpOTE1L2dlbV9zY2hlZHVsZXIuYycsCiAJJ2k5MTUvZ2VtX3N1Ym1pc3Npb24uYycsCisJ J2k5MTUvZ2VtX3NwYXJzZS5jJywKIAknaTkxNS9nZW1fcmluZy5jJywKIAknaTkxNS9nZW1fbW1h bi5jJywKIAknaWd0X2NvbG9yX2VuY29kaW5nLmMnLApkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZp bGUuc291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKaW5kZXggNzFjY2YwMGEuLjk2MjMz YThiIDEwMDY0NAotLS0gYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCisrKyBiL3Rlc3RzL01ha2Vm aWxlLnNvdXJjZXMKQEAgLTI3MCw2ICsyNzAsOSBAQCBnZW1fZ3R0X3NwZWVkX1NPVVJDRVMgPSBp OTE1L2dlbV9ndHRfc3BlZWQuYwogVEVTVFNfcHJvZ3MgKz0gZ2VtX2xhcmdlb2JqZWN0CiBnZW1f bGFyZ2VvYmplY3RfU09VUkNFUyA9IGk5MTUvZ2VtX2xhcmdlb2JqZWN0LmMKIAorVEVTVFNfcHJv Z3MgKz0gZ2VtX3NwYXJzZW9iamVjdAorZ2VtX3NwYXJzZW9iamVjdF9TT1VSQ0VTID0gaTkxNS9n ZW1fc3BhcnNlb2JqZWN0LmMKKwogVEVTVFNfcHJvZ3MgKz0gZ2VtX2xpbmVhcl9ibGl0cwogZ2Vt X2xpbmVhcl9ibGl0c19TT1VSQ0VTID0gaTkxNS9nZW1fbGluZWFyX2JsaXRzLmMKIApkaWZmIC0t Z2l0IGEvdGVzdHMvaTkxNS9nZW1fc3BhcnNlb2JqZWN0LmMgYi90ZXN0cy9pOTE1L2dlbV9zcGFy c2VvYmplY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uMjExNzE5OGEK LS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9pOTE1L2dlbV9zcGFyc2VvYmplY3QuYwpAQCAtMCww ICsxLDYxNSBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDA4IEludGVsIENvcnBvcmF0aW9uCisg KgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFu eSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2Np YXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGlu IHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1p dGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlz aCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUg U29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUg aXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u czoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9u IG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1 ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0 d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBX QVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJV VCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4g Tk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJ QUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwor ICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhF IFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqCisgKi8K KworI2luY2x1ZGUgImlndC5oIgorI2luY2x1ZGUgImk5MTUvZ2VtX3NwYXJzZS5oIgorCisjaW5j bHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4K KyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaW5jbHVkZSA8ZXJy bm8uaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2lu Y2x1ZGUgImRybS5oIgorCitJR1RfVEVTVF9ERVNDUklQVElPTigiVGhpcyBpcyBhIHRlc3QgdG8g ZXhlcmNpc2Ugc3BhcnNlIG9iamVjdCBhbmQgYmFja2luZyBpdCB3aXRoLCIKKwkJICAgICAiIGFs bG9jYXRpb24gb2Ygb2JqZWN0IGZyb20gc3RvbGVuIG1lbW9yeSBhbmQgc2htZW0uIik7CisKKyNk ZWZpbmUgVTY0X01BWCAgICAgICAgICgodWludDY0X3QpfjBVTEwpCisjZGVmaW5lIFUzMl9NQVgg ICAgICAgICAoKHVpbnQzMl90KX4wVUxMKQorI2RlZmluZSBPQkpfU0laRSAJKDQgKiA0MDk2KQor I2RlZmluZSBQQUdFX1NJWkUgCTQwOTYKKyNkZWZpbmUgVElNRU9VVCAJMjAKKyNkZWZpbmUgTUFY X0hBTkRMRVMgCTQwOTYKKyNkZWZpbmUgTEFSR0VfT0JKRUNUX1NJWkUgICgxNiAqIDEwMjQgKiAx MDI0KQorI2RlZmluZSBNQVhfVVNSUFRSIAkyMAorI2RlZmluZSBNQVhfU1JDX09CSkVDVFMgMjAK KyNkZWZpbmUgTUFYX1BBVFRFUk4JMworCitlbnVtIHNvdXJjZV90eXBlIHsKKwlVTlNFVCwKKwlT SE1FTSwKKwlVU0VSUFRSLAorCV9fTEFTVF9TT1VSQ0VfXworfTsKKwordm9pZCAqX191c2VycHRy WzQwOTZdOworCit1aW50MzJfdCBwYXR0ZXJuc1tdID0geyAweDAsCisJCQkweGRlYWRiZWVmLAor CQkgICAgICAgIDB4ZmVlZGJlZWZ9OworCitzdGF0aWMgdWludDMyX3QgZ2VtX2NyZWF0ZV91c2Vy cHRyKGludCBpOTE1LCB1aW50NjRfdCBzaXplKQoreworCXVpbnQzMl90IGhhbmRsZTsKKwl2b2lk ICpwdHI7CisKKwlpZ3RfYXNzZXJ0KHBvc2l4X21lbWFsaWduKCZwdHIsIFBBR0VfU0laRSwgc2l6 ZSkgPT0gMCk7CisKKwlnZW1fdXNlcnB0cihpOTE1LCBwdHIsIHNpemUsIDAsIDAsICZoYW5kbGUp OworCisJaWd0X2Fzc2VydChoYW5kbGUgPCBBUlJBWV9TSVpFKF9fdXNlcnB0cikpOworCV9fdXNl cnB0cltoYW5kbGVdID0gcHRyOworCisJcmV0dXJuIGhhbmRsZTsKK30KKworc3RhdGljIGNvbnN0 IGNoYXIgKnNvdXJjZV9uYW1lKGVudW0gc291cmNlX3R5cGUgdHlwZSkKK3sKKwlzd2l0Y2ggKHR5 cGUpIHsKKwljYXNlIFVOU0VUOiByZXR1cm4gInVuc2V0IjsKKwljYXNlIFNITUVNOiByZXR1cm4g InNobWVtIjsKKwljYXNlIFVTRVJQVFI6IHJldHVybiAidXNlcnB0ciI7CisJZGVmYXVsdDogaWd0 X2Fzc2VydCgwKTsgcmV0dXJuICJ1bmtub3duIjsKKwl9Cit9CisKK3N0YXRpYyB1aW50MzJfdCBz b3VyY2VfY3JlYXRlKGludCBpOTE1LCBlbnVtIHNvdXJjZV90eXBlIHR5cGUsIHVpbnQ2NF90IHNp emUpCit7CisJc3dpdGNoKHR5cGUpIHsKKwljYXNlIFVOU0VUOiByZXR1cm4gMDsKKwljYXNlIFNI TUVNOiByZXR1cm4gZ2VtX2NyZWF0ZShpOTE1LCBzaXplKTsKKwljYXNlIFVTRVJQVFI6IHJldHVy biBnZW1fY3JlYXRlX3VzZXJwdHIoaTkxNSwgc2l6ZSk7CisJZGVmYXVsdDogaWd0X2Fzc2VydCgw KTsgcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgdm9pZCBzb3VyY2VfZGVzdHJveShpbnQgaTkx NSwgdWludDMyX3QgaGFuZGxlKQoreworCWlmICghaGFuZGxlKQorCQlyZXR1cm47CisKKwlnZW1f Y2xvc2UoaTkxNSwgaGFuZGxlKTsKKworCWZyZWUoX191c2VycHRyW2hhbmRsZV0pOworCV9fdXNl cnB0cltoYW5kbGVdID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQKK2ZpbGxfc291cmNlcyhpbnQg aTkxNSwgdWludDMyX3Qgc291cmNlc1tdLCBpbnQgc2l6ZSwgYm9vbCBmaWxsKQoreworCWVudW0g c291cmNlX3R5cGUgdHlwZTsKKwl0eXBlID0gU0hNRU07CisJZm9yIChpbnQgaSA9IDA7IGkgPCBz aXplOyBpKyssIHR5cGUrKykgeworCQlpZiAoKGkgJSAoX19MQVNUX1NPVVJDRV9fIC0gMSkgPT0g MCkpCisJCQl0eXBlID0gU0hNRU07CisJCXNvdXJjZXNbaV0gPSBzb3VyY2VfY3JlYXRlKGk5MTUs IHR5cGUsIE9CSl9TSVpFKTsKKwkJaWYgKGZpbGwpCisJCQlnZW1fd3JpdGUoaTkxNSwgc291cmNl c1tpXSwgMCwKKwkJCQkgICZwYXR0ZXJuc1t0eXBlXSwgc2l6ZW9mKHVpbnQzMl90KSk7CisJfQor fQorCitzdGF0aWMgdm9pZAorZ2VtX2xpbmtfc291cmNlcyhpbnQgaTkxNSwgdWludDMyX3Qgc3Bh cnNlX2hhbmRsZSwgdWludDMyX3Qgc291cmNlc1tdLCBpbnQgc3opCit7CisJaW50IGk7CisJY2hh ciBleHBlY3RlZFtPQkpfU0laRV07CisJY2hhciBidWZbT0JKX1NJWkVdOworCWludCBucGFnZXMg PSBPQkpfU0laRSAvIFBBR0VfU0laRTsKKworCW1lbXNldChleHBlY3RlZCwgMHhmZWVkYmVlZiwg T0JKX1NJWkUpOworCWkgPSAwOworCXdoaWxlKGkgPCBzeikgeworCQl1aW50MzJfdCBodCA9IDA7 CisJCXVpbnQzMl90IHNyY19zdHJpZGUgPSAocmFuZCgpICUgKG5wYWdlcyAtIDEpKSArIDE7CisJ CXVpbnQzMl90IGRzdF9zdHJpZGUgPSAocmFuZCgpICUgKG5wYWdlcyAtIDEpKSArIDE7CisJCXVp bnQzMl90IHdpZHRoID0gcmFuZCgpICUgbWluKHNyY19zdHJpZGUsIGRzdF9zdHJpZGUpOworCQl1 aW50MzJfdCBoZWlnaHQgPSByYW5kKCkgJSBtYXgoc3JjX3N0cmlkZSwgZHN0X3N0cmlkZSk7CisJ CXVpbnQzMl90IHNyY19vZmZzZXQgPSByYW5kKCkgJSAobnBhZ2VzIC0gKHNyY19zdHJpZGUgKgor CQkJCQkJCSAgKGhlaWdodCAtIDEpKSAtIHdpZHRoKTsKKwkJdWludDMyX3QgZHN0X29mZnNldCA9 IHJhbmQoKSAlIChucGFnZXMgLSAoZHN0X3N0cmlkZSAqCisJCQkJCQkJICAoaGVpZ2h0IC0gMSkp IC0gd2lkdGgpOworCQljaGFyICpkYXRhOworCQlkYXRhID0gZXhwZWN0ZWQ7CisJCS8qIFdyaXRl IGEgcGF0dGVybiBpbnRvIHNyYyBvYmplY3QgKi8KKwkJd2hpbGUgKGh0IDw9IGhlaWdodCkgewor CQkJZ2VtX3dyaXRlKGk5MTUsIHNvdXJjZXNbaV0sCisJCQkJICBzcmNfb2Zmc2V0ICsgKGh0ICog c3JjX3N0cmlkZSAqIFBBR0VfU0laRSksCisJCQkJICBkYXRhLCB3aWR0aCAqIFBBR0VfU0laRSk7 CisJCQlkYXRhICs9ICh3aWR0aCAqIFBBR0VfU0laRSk7CisJCQlodCsrOworCQl9CisKKwkJLyog aW9jdGwgdG8gbGluayBwYWdlcyBmcm9tIHNyYyB0byBzcGFyc2Ugb2JqZWN0ICovCisJCWdlbV9z ZXRfcGFnZXMoaTkxNSwgc3BhcnNlX2hhbmRsZSwgZHN0X29mZnNldCwgZHN0X3N0cmlkZSwKKwkJ CSAgICAgIHNvdXJjZXNbaV0sIHNyY19vZmZzZXQsIHNyY19zdHJpZGUsIHdpZHRoLCBoZWlnaHQp OworCQlodCA9IDA7CisJCWRhdGEgPSBidWY7CisJCS8qIHJlYWQgYmFjayB0aGUgZGF0YSBmcm9t IHNwYXJzZSAqLworCQl3aGlsZSAoaHQgPD0gaGVpZ2h0KSB7CisJCQlnZW1fcmVhZChpOTE1LCBz cGFyc2VfaGFuZGxlLAorCQkJCSBkc3Rfb2Zmc2V0ICsgKGh0ICogZHN0X3N0cmlkZSksCisJCQkJ IGRhdGEsICh3aWR0aCAqIFBBR0VfU0laRSkpOworCQkJZGF0YSArPSAod2lkdGggKiBQQUdFX1NJ WkUpOworCQkJaHQrKzsKKwkJfQorCQlpZ3RfYXNzZXJ0KG1lbWNtcChidWYsIGV4cGVjdGVkLCB3 aWR0aCAqIGhlaWdodCAqIFBBR0VfU0laRSkgPT0gMCk7CisJCWkrKzsKKwl9Cit9CisKK3N0YXRp YyB2b2lkCitzZXRfdmVyaWZ5X3BhZ2VzKGludCBpOTE1LCB1aW50MzJfdCBzcGFyc2UsIHVpbnQz Ml90IHNvdXJjZXNbXSwgaW50IHNpemUpCit7CisJdWludDMyX3QgdHlwZSwgeCwgaTsKKworCWZv ciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCisJCWdlbV9zZXRfcGFnZXMoaTkxNSwgc3BhcnNlLCBp LCAwLAorCQkJICAgICAgc291cmNlc1tpXSwgMCwgMCwgMSwgMSk7CisJdHlwZSA9IDE7CisJZm9y IChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQlnZW1fcmVhZChpOTE1LCBzcGFyc2UsIFBBR0Vf U0laRSAqIGksCisJCQkgJngsIHNpemVvZih4KSk7CisJCWlndF9hc3NlcnRfbmVxX3UzMih4LCBw YXR0ZXJuc1t0eXBlXSk7CisJCWlmICgrK3R5cGUgPT0gTUFYX1BBVFRFUk4pCisJCQl0eXBlID0g MTsKKwl9Cit9CisKKy8qCisgKiBSYW5kb21seSBwaWNrcyB0aGUgc291cmNlIG9iamVjdHMgYW5k IGxpbmtzIHdpdGgKKyAqIHNwYXJzZSBvYmplY3QuCisgKi8KK3N0YXRpYyB2b2lkCitpZ3RfZ2Vt X3NwYXJzZV9saW5rX25zb3VyY2VzKGludCBpOTE1KQoreworCWludCBzaXplOworCXVpbnQzMl90 IHNvdXJjZXNbTUFYX1NSQ19PQkpFQ1RTXTsKKwl1aW50MzJfdCBzcGFyc2U7CisJaW50IGk7CisK KwlzcGFyc2UgPSBnZW1fY3JlYXRlX3NwYXJzZShpOTE1LCBVNjRfTUFYKTsKKwlpZ3RfdW50aWxf dGltZW91dCg1ICogVElNRU9VVCkgeworCQlzaXplID0gcmFuZCgpICUgTUFYX1NSQ19PQkpFQ1RT OworCQlmaWxsX3NvdXJjZXMoaTkxNSwgc291cmNlcywgc2l6ZSwgdHJ1ZSk7CisJCXNldF92ZXJp ZnlfcGFnZXMoaTkxNSwgc3BhcnNlLCBzb3VyY2VzLCBzaXplKTsKKwkJZ2VtX2Nsb3NlKGk5MTUs IHNwYXJzZSk7CisJCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCisJCQlzb3VyY2VfZGVzdHJv eShpOTE1LCBzb3VyY2VzW2ldKTsKKwl9Cit9CisKKy8qIFNtb2tlIHRlc3Qgd2l0aCBzaW5nbGUg ZGVzdGluYXRpb24gc3BhcnNlIG9iamVjdCBOOjEgc21va2UgKi8KK3N0YXRpYyB2b2lkIGlndF9n ZW1fc3BhcnNlX3Ntb2tldGVzdF9zaW5nbGVfZGVzdGluYXRpb24oaW50IGk5MTUpCit7CisJdWlu dDMyX3Qgc3BhcnNlOworCXVpbnQzMl90IHNvdXJjZXNbTUFYX0hBTkRMRVNdOworCWludCBzaXpl LCBpOworCisJc3BhcnNlID0gZ2VtX2NyZWF0ZV9zcGFyc2UoaTkxNSwgT0JKX1NJWkUpOworCWln dF91bnRpbF90aW1lb3V0KFRJTUVPVVQpIHsKKwkJc2l6ZSA9IHJhbmQoKSAlIE1BWF9TUkNfT0JK RUNUUzsKKwkJZmlsbF9zb3VyY2VzKGk5MTUsIHNvdXJjZXMsIHNpemUsIGZhbHNlKTsKKwkJZ2Vt X2xpbmtfc291cmNlcyhpOTE1LCBzcGFyc2UsIHNvdXJjZXMsIHNpemUpOworCQlmb3IgKGkgPSAw OyBpIDwgc2l6ZTsgaSsrKQorCQkJc291cmNlX2Rlc3Ryb3koaTkxNSwgc291cmNlc1tpXSk7CisJ CWdlbV9jbG9zZShpOTE1LCBzcGFyc2UpOworCX0KK30KKworLyogc3BhcnNlIG9iamVjdCBzbW9r ZSB0ZXN0IHdpdGggc2luZ2xlIHNvdXJjZSAxOk4gc21va2V0ZXN0ICovCitzdGF0aWMgdm9pZCBp Z3RfZ2VtX3NwYXJzZV9zbW9rZXRlc3Rfc2luZ2xlX3NvdXJjZShpbnQgaTkxNSkKK3sKKwl1aW50 MzJfdCBzcGFyc2UsIHNyY1sxXTsKKwl1aW50MzJfdCBoYW5kbGVzW01BWF9IQU5ETEVTXTsKKwlp bnQgY291bnQsIGk7CisKKwlzcmNbMF0gPSBnZW1fY3JlYXRlKGk5MTUsIE9CSl9TSVpFKTsKKwlj b3VudCA9IDA7CisJaWd0X3VudGlsX3RpbWVvdXQoVElNRU9VVCkgeworCQlzcGFyc2UgPSBnZW1f Y3JlYXRlX3NwYXJzZShpOTE1LCBPQkpfU0laRSk7CisJCWhhbmRsZXNbY291bnQrK10gPSBzcGFy c2U7CisJCWdlbV9saW5rX3NvdXJjZXMoaTkxNSwgc3BhcnNlLCBzcmMsIDEpOworCX0KKwlmb3Ig KGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKwkJZ2VtX2Nsb3NlKGk5MTUsIGhhbmRsZXNbaV0pOwor CXNvdXJjZV9kZXN0cm95KGk5MTUsIHNyY1swXSk7Cit9CisKK3N0YXRpYyB2b2lkIGlndF9zcGFy c2VfcmVhZChpbnQgaTkxNSwgdWludDMyX3Qgc3JjKQoreworCXVpbnQzMl90IHNwYXJzZTsKKwor CXNwYXJzZSA9IGdlbV9jcmVhdGVfc3BhcnNlKGk5MTUsIE9CSl9TSVpFKTsKKworCS8qIGZvcndh cmRzICovCisJaWYgKHNyYykgeworCQlmb3IgKHVpbnQzMl90IG4gPSAwOyBuIDwgNDsgbisrKSB7 CisJCQlnZW1fc2V0X3BhZ2VzKGk5MTUsCisJCQkJICAgICAgc3BhcnNlLCBuLCAwLAorCQkJCSAg ICAgIHNyYywgbiwgMCwKKwkJCQkgICAgICAxLCAxKTsKKwkJCWdlbV93cml0ZShpOTE1LCBzcmMs IFBBR0VfU0laRSAqIG4sICZuLCBzaXplb2YobikpOworCQl9CisJfQorCisJZm9yICh1aW50MzJf dCBuID0gMDsgbiA8IDQ7IG4rKykgeworCQl1aW50MzJfdCBleHBlY3RlZCA9IHNyYyA/IG4gOiAw OworCQl1aW50MzJfdCB4OworCisJCWdlbV9yZWFkKGk5MTUsIHNwYXJzZSwgUEFHRV9TSVpFICog biAsICZ4LCBzaXplb2YoeCkpOworCQlpZ3RfYXNzZXJ0X2VxKHgsIGV4cGVjdGVkKTsKKwl9CisK KwlpZiAoc3JjKSB7CisJCWZvciAodWludDMyX3QgbiA9IDA7IG4gPCA0OyBuKyspIHsKKwkJCWdl bV9zZXRfcGFnZXMoaTkxNSwKKwkJCQkgICAgICBzcGFyc2UsIG4sIDAsCisJCQkJICAgICAgc3Jj LCA0IC0gbiAtMSwgMCwKKwkJCQkgICAgICAxLCAxKTsKKwkJCWdlbV93cml0ZShpOTE1LCBzcmMs CisJCQkJICBQQUdFX1NJWkUgKiBuICsgMTAyNCwgJm4sIHNpemVvZihuKSk7CisJCX0KKwl9CisK Kwlmb3IgKHVpbnQzMl90IG4gPSAwOyBuIDwgNDsgbisrKSB7CisJCXVpbnQzMl90IGV4cGVjdGVk ID0gc3JjID8gNCAtIG4gLSAxIDogMDsKKwkJdWludDMyX3QgeDsKKworCQlnZW1fcmVhZChpOTE1 LCBzcGFyc2UsIFBBR0VfU0laRSAqIG4gKyAxMDI0LCAmeCwgc2l6ZW9mKHgpKTsKKwkJaWd0X2Fz c2VydF9lcSh4LCBleHBlY3RlZCk7CisJfQorCisJZ2VtX2Nsb3NlKGk5MTUsIHNwYXJzZSk7Cit9 CisKK3N0YXRpYyB2b2lkIGlndF9zcGFyc2Vfd3JpdGUoaW50IGk5MTUsIHVpbnQzMl90IHNyYykK K3sKKwl1aW50MzJfdCBzcGFyc2U7CisKKwlpZ3RfcmVxdWlyZShzcmMpOworCisJc3BhcnNlID0g Z2VtX2NyZWF0ZV9zcGFyc2UoaTkxNSwgT0JKX1NJWkUpOworCisJLyogZm9yd2FyZHMgKi8KKwlm b3IgKHVpbnQzMl90IG4gPSAwOyBuIDwgNDsgbisrKSB7CisJCXVpbnQzMl90IGV4ID0gbiwgeDsK KworCQlnZW1fc2V0X3BhZ2VzKGk5MTUsCisJCQkgICAgICBzcGFyc2UsIG4sIDAsCisJCQkgICAg ICBzcmMsIG4sIDAsCisJCQkgICAgICAxLCAxKTsKKworCQlnZW1fd3JpdGUoaTkxNSwgc3BhcnNl LCBQQUdFX1NJWkUgKiBuICwgJmV4LCBzaXplb2YoZXgpKTsKKwkJZ2VtX3JlYWQoaTkxNSwgc3Jj LCBQQUdFX1NJWkUgKiBuLCAmeCwgc2l6ZW9mKHgpKTsKKworCQlpZ3RfYXNzZXJ0X2VxKHgsIGV4 KTsKKwl9CisKKwlmb3IgKHVpbnQzMl90IG4gPSAwOyBuIDwgNDsgbisrKSB7CisJCXVpbnQzMl90 IGV4ID0gNCAtIG4gLSAxLCB4OworCisJCWdlbV9zZXRfcGFnZXMoaTkxNSwKKwkJCSAgICAgIHNw YXJzZSwgbiwgMCwKKwkJCSAgICAgIHNyYywgNCAtIG4gLSAxLCAwLAorCQkJICAgICAgMSwgMSk7 CisKKwkJZ2VtX3dyaXRlKGk5MTUsIHNwYXJzZSwgUEFHRV9TSVpFICogbiArIDEwMjQsICZleCwg c2l6ZW9mKGV4KSk7CisJCWdlbV9yZWFkKGk5MTUsIHNyYywgUEFHRV9TSVpFICogZXggKyAxMDI0 LCAmeCwgc2l6ZW9mKHgpKTsKKworCQlpZ3RfYXNzZXJ0X2VxKHgsIGV4KTsKKwl9CisKKwlnZW1f Y2xvc2UoaTkxNSwgc3BhcnNlKTsKK30KKworc3RhdGljIHZvaWQgaWd0X3NwYXJzZV9tbWFwKGlu dCBpOTE1LCB1aW50MzJfdCBzcmMpCit7CisJdWludDMyX3Qgc3BhcnNlOworCXVpbnQzMl90ICpw dHI7CisKKwlpZ3RfcmVxdWlyZShzcmMpOworCisJc3BhcnNlID0gZ2VtX2NyZWF0ZV9zcGFyc2Uo aTkxNSwgT0JKX1NJWkUpOworCXB0ciA9IGdlbV9tbWFwX19ndHQoaTkxNSwgc3BhcnNlLCBPQkpf U0laRSwgUFJPVF9SRUFEKTsKKworCWZvciAodWludDMyX3QgbiA9IDA7IG4gPCA0OyBuKyspIHsK KwkJdWludDMyX3QgZXggPSBuOworCisJCWdlbV9zZXRfcGFnZXMoaTkxNSwKKwkJCSAgICAgIHNw YXJzZSwgbiwgMCwKKwkJCSAgICAgIHNyYywgbiwgMCwKKwkJCSAgICAgIDEsIDEpOworCisJCWdl bV93cml0ZShpOTE1LCBzcmMsIFBBR0VfU0laRSAqIG4gLCAmZXgsIHNpemVvZihleCkpOworCQlp Z3RfYXNzZXJ0X2VxKHB0cltQQUdFX1NJWkUgKiBuIC8gc2l6ZW9mKCpwdHIpXSwgZXgpOworCisJ fQorCisJbXVubWFwKHB0ciwgT0JKX1NJWkUpOworCWdlbV9jbG9zZShpOTE1LCBzcGFyc2UpOwor fQorCitzdGF0aWMgdm9pZCBzdG9yZV9kd29yZChpbnQgaTkxNSwgdW5zaWduZWQgZW5naW5lLAor CQkJdWludDMyX3QgZHN0LCB1aW50MzJfdCBvZmZzZXQsCisJCQl1aW50MzJfdCB2YWx1ZSkKK3sK Kwljb25zdCBpbnQgZ2VuID0gaW50ZWxfZ2VuKGludGVsX2dldF9kcm1fZGV2aWQoaTkxNSkpOwor CXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9ialsyXTsKKwlzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgcmVsb2M7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVj YnVmZmVyMiBleGVjYnVmOworCXVpbnQzMl90IGJhdGNoWzE2XTsKKwlpbnQgaTsKKworCW1lbXNl dCgmZXhlY2J1ZiwgMCwgc2l6ZW9mKGV4ZWNidWYpKTsKKwlleGVjYnVmLmJ1ZmZlcnNfcHRyID0g dG9fdXNlcl9wb2ludGVyKG9iaik7CisJZXhlY2J1Zi5idWZmZXJfY291bnQgPSAyOworCWV4ZWNi dWYuZmxhZ3MgPSBlbmdpbmU7CisJaWYgKGdlbiA8IDYpCisJCWV4ZWNidWYuZmxhZ3MgfD0gSTkx NV9FWEVDX1NFQ1VSRTsKKworCW1lbXNldChvYmosIDAsIHNpemVvZihvYmopKTsKKwlvYmpbMF0u aGFuZGxlID0gZHN0OworCW9ialsxXS5oYW5kbGUgPSBnZW1fY3JlYXRlKGk5MTUsIDQwOTYpOwor CisJbWVtc2V0KCZyZWxvYywgMCwgc2l6ZW9mKHJlbG9jKSk7CisJcmVsb2MudGFyZ2V0X2hhbmRs ZSA9IG9ialswXS5oYW5kbGU7CisJcmVsb2MucHJlc3VtZWRfb2Zmc2V0ID0gMDsKKwlyZWxvYy5v ZmZzZXQgPSBzaXplb2YodWludDMyX3QpOworCXJlbG9jLmRlbHRhID0gb2Zmc2V0OworCXJlbG9j LnJlYWRfZG9tYWlucyA9IEk5MTVfR0VNX0RPTUFJTl9SRU5ERVI7CisJcmVsb2Mud3JpdGVfZG9t YWluID0gSTkxNV9HRU1fRE9NQUlOX1JFTkRFUjsKKwlvYmpbMV0ucmVsb2NzX3B0ciA9IHRvX3Vz ZXJfcG9pbnRlcigmcmVsb2MpOworCW9ialsxXS5yZWxvY2F0aW9uX2NvdW50ID0gMTsKKworCWkg PSAwOworCWJhdGNoW2ldID0gTUlfU1RPUkVfRFdPUkRfSU1NIHwgKGdlbiA8IDYgPyAxIDw8IDIy IDogMCk7CisJaWYgKGdlbiA+PSA4KSB7CisJCWJhdGNoWysraV0gPSBvZmZzZXQ7CisJCWJhdGNo WysraV0gPSAwOworCX0gZWxzZSBpZiAoZ2VuID49IDQpIHsKKwkJYmF0Y2hbKytpXSA9IDA7CisJ CWJhdGNoWysraV0gPSBvZmZzZXQ7CisJCXJlbG9jLm9mZnNldCArPSBzaXplb2YodWludDMyX3Qp OworCX0gZWxzZSB7CisJCWJhdGNoW2ldLS07CisJCWJhdGNoWysraV0gPSBvZmZzZXQ7CisJfQor CWJhdGNoWysraV0gPSB2YWx1ZTsKKwliYXRjaFsrK2ldID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsK KwlnZW1fd3JpdGUoaTkxNSwgb2JqWzFdLmhhbmRsZSwgMCwgYmF0Y2gsIHNpemVvZihiYXRjaCkp OworCWdlbV9leGVjYnVmKGk5MTUsICZleGVjYnVmKTsKKwlnZW1fY2xvc2UoaTkxNSwgb2JqWzFd LmhhbmRsZSk7Cit9CisKK3N0YXRpYyB2b2lkIGlndF9zcGFyc2VfZXhlY2J1ZihpbnQgaTkxNSwg dWludDMyX3Qgc3JjKQoreworCXVpbnQzMl90IHNwYXJzZTsKKworCWlndF9yZXF1aXJlKHNyYyk7 CisKKwlzcGFyc2UgPSBnZW1fY3JlYXRlX3NwYXJzZShpOTE1LCBPQkpfU0laRSk7CisKKwlmb3Ig KHVpbnQzMl90IG4gPSAwOyBuIDwgNDsgbisrKSB7CisJCXVuc2lnbmVkIGludCBlbmdpbmU7CisK KwkJZ2VtX3NldF9wYWdlcyhpOTE1LAorCQkJICAgICAgc3BhcnNlLCBuLCAwLAorCQkJICAgICAg c3JjLCBuLCAwLAorCQkJICAgICAgMSwgMSk7CisKKwkJZm9yX2VhY2hfcGh5c2ljYWxfZW5naW5l KGk5MTUsIGVuZ2luZSkgeworCQkJdWludDMyX3QgZXggPSBlbmdpbmUsIHg7CisKKwkJCWlmICgh Z2VtX2Nhbl9zdG9yZV9kd29yZChpOTE1LCBlbmdpbmUpKQorCQkJCWNvbnRpbnVlOworCisJCQl4 ID0gfmV4OworCQkJZ2VtX3dyaXRlKGk5MTUsIHNyYywgUEFHRV9TSVpFICogbiAsICZ4LCBzaXpl b2YoeCkpOworCisJCQlzdG9yZV9kd29yZChpOTE1LCBlbmdpbmUsIHNwYXJzZSwgUEFHRV9TSVpF ICogbiwgZXgpOworCQkJZ2VtX3N5bmMoaTkxNSwgc3BhcnNlKTsKKworCQkJZ2VtX3JlYWQoaTkx NSwgc3JjLCBQQUdFX1NJWkUgKiBuICwgJngsIHNpemVvZih4KSk7CisKKwkJCWlndF9hc3NlcnRf ZXEoeCwgZXgpOworCQl9CisJfQorCisJZ2VtX2Nsb3NlKGk5MTUsIHNwYXJzZSk7Cit9CisKK3N0 YXRpYyB2b2lkIGlndF9zcGFyc2VfaW52YWxpZF9zcGFyc2VfcmVhZChpbnQgaTkxNSkKK3sKKwl1 aW50MzJfdCBzcGFyc2U7CisJc3RydWN0IGRybV9pOTE1X2dlbV9wcmVhZCBnZW1fcHJlYWQ7CisJ Y2hhciBidWZbMjU2XTsKKworCXNwYXJzZSA9IGdlbV9jcmVhdGVfc3BhcnNlKGk5MTUsIE9CSl9T SVpFKTsKKworCW1lbXNldCgmZ2VtX3ByZWFkLCAwLCBzaXplb2YoZ2VtX3ByZWFkKSk7CisJZ2Vt X3ByZWFkLmhhbmRsZSA9IHNwYXJzZTsKKwlnZW1fcHJlYWQub2Zmc2V0ID0gT0JKX1NJWkU7CisJ Z2VtX3ByZWFkLnNpemUgPSAyNTY7CisJZ2VtX3ByZWFkLmRhdGFfcHRyID0gdG9fdXNlcl9wb2lu dGVyKGJ1Zik7CisKKwlpZ3RfZmFpbF9vbighZHJtSW9jdGwoaTkxNSwgRFJNX0lPQ1RMX0k5MTVf R0VNX1BSRUFELCAmZ2VtX3ByZWFkKSk7Cit9CisKK3N0YXRpYyB2b2lkIGlndF9zcGFyc2VfaW52 YWxpZF9saW5rKGludCBpOTE1KQoreworCXVpbnQzMl90IHNwYXJzZSwgc3JjOworCXVpbnQzMl90 IG5wYWdlcyA9IE9CSl9TSVpFIC8gUEFHRV9TSVpFOworCisJc3BhcnNlID0gZ2VtX2NyZWF0ZV9z cGFyc2UoaTkxNSwgT0JKX1NJWkUpOworCXNyYyA9IGdlbV9jcmVhdGUoaTkxNSwgT0JKX1NJWkUp OworCisJLyogd2lkdGggPiBzcmNfc3RyaWRlICovCisJaWd0X2ZhaWxfb24oIV9fZ2VtX3NldF9w YWdlcyhpOTE1LCBzcGFyc2UsIDAsIDMsCisJCSAgICAgIHNyYywgMCwgMSwgMiwgMikpOworCisJ Lyogd2lkdGggPiBkZXN0X3N0cmlkZSAqLworCWlndF9mYWlsX29uKCFfX2dlbV9zZXRfcGFnZXMo aTkxNSwgc3BhcnNlLCAwLCAxLAorCQkgICAgICBzcmMsIDAsIDMsIDIsIDIpKTsKKworCS8qIHdp ZHRoIGNhbm5vdCBiZSB6ZXJvICovCisJaWd0X2ZhaWxfb24oIV9fZ2VtX3NldF9wYWdlcyhpOTE1 LCBzcGFyc2UsIDAsIDEsCisJCSAgICAgIHNyYywgMCwgMSwgLTEsIDApKTsKKworCS8qIG92ZXJm bG93cyAqLworCWlndF9mYWlsX29uKCFfX2dlbV9zZXRfcGFnZXMoaTkxNSwgc3BhcnNlLCAwLCBV MzJfTUFYLAorCQkgICAgICBzcmMsIDAsIDIsIDIsIDIpKTsKKworCS8qIGxpbmsgb3V0c2lkZSBv ZiBkc3Qgb2JqZWN0ICovCisJaWd0X2ZhaWxfb24oIV9fZ2VtX3NldF9wYWdlcyhpOTE1LCBzcGFy c2UsIG5wYWdlcyAtIDEsIDIsCisJCSAgICAgIHNyYywgMCwgMiwgMywgMykpOworCisJLyogbGlu a2luZyBwYWdlcyB3aGljaCBhcmUgb3V0c2lkZSBvZiBzcmMgb2JqZWN0ICovCisJaWd0X2ZhaWxf b24oIV9fZ2VtX3NldF9wYWdlcyhpOTE1LCBzcGFyc2UsIDAsIDIsCisJCSAgICAgIHNyYywgbnBh Z2VzIC0gMSwgMiwgMywgMykpOworfQorCitzdGF0aWMgdm9pZCBpZ3Rfc3BhcnNlX2ludmFsaWRf c291cmNlKGludCBpOTE1KQoreworCXVpbnQzMl90IHNwYXJzZSwgc3JjOworCisJc3BhcnNlID0g Z2VtX2NyZWF0ZV9zcGFyc2UoaTkxNSwgT0JKX1NJWkUpOworCXNyYyA9IDB4MTAxMDEwMDE7CisJ aWd0X2ZhaWxfb24oIV9fZ2VtX3NldF9wYWdlcyhpOTE1LCBzcGFyc2UsIDAsIDAsCisJCSAgICAg IHNyYywgMCwgMCwgMSwgMSkpOworCWdlbV9jbG9zZShpOTE1LCBzcGFyc2UpOworfQorCitzdGF0 aWMgdm9pZCBpZ3Rfc3BhcnNlX2ludmFsaWRfc2l6ZShpbnQgaTkxNSkKK3sKKwlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX2NyZWF0ZV9leHQgY3JlYXRlID0geworCQkuc2l6ZSA9IDAsCisJCS5mbGFncyA9 IEk5MTVfR0VNX0NSRUFURV9TUEFSU0UsCisJfTsKKwlpZ3RfZmFpbF9vbighaWd0X2lvY3RsKGk5 MTUsIERSTV9JT0NUTF9JOTE1X0dFTV9DUkVBVEVfRVhULAorCQkJICAgICAgICZjcmVhdGUpKTsK K30KKworc3RhdGljIHZvaWQgaWd0X3NwYXJzZV9odWdlKGludCBpOTE1KQoreworCXVpbnQzMl90 IGhhbmRsZSA9CisJCWdlbV9jcmVhdGVfc3BhcnNlKGk5MTUsIGludGVsX2dldF90b3RhbF9yYW1f bWIoKSA8PCAyNCk7CisKKwlnZW1fc2V0X2RvbWFpbihpOTE1LCBoYW5kbGUsIEk5MTVfR0VNX0RP TUFJTl9DUFUsIDApOworCWdlbV9jbG9zZShpOTE1LCBoYW5kbGUpOworfQorCitzdGF0aWMgaW50 IGNyZWF0ZV92ZXJzaW9uKGludCBpOTE1KQoreworCWludCB2YWwgPSAwOworCXN0cnVjdCBkcm1f aTkxNV9nZXRwYXJhbSBncCA9IHsKKwkJZ3AucGFyYW0gPSA1NCwgLyogQ1JFQVRFX1ZFUlNJT04g Ki8KKwkJZ3AudmFsdWUgPSAmdmFsLAorCX07CisKKwlpb2N0bChpOTE1LCBEUk1fSU9DVExfSTkx NV9HRVRQQVJBTSwgJmdwKTsKKwlyZXR1cm4gdmFsOworfQorCitpZ3RfbWFpbgoreworCWludCBp OTE1ID0gLTE7CisKKwlpZ3RfZml4dHVyZSB7CisJCWk5MTUgPSBkcm1fb3Blbl9kcml2ZXIoRFJJ VkVSX0lOVEVMKTsKKwkJaWd0X3JlcXVpcmVfZ2VtKGk5MTUpOworCQlpZ3RfcmVxdWlyZShjcmVh dGVfdmVyc2lvbihpOTE1KSA+PSAxKTsKKwl9CisKKwlpZ3Rfc3VidGVzdCgiaHVnZSIpCisJCWln dF9zcGFyc2VfaHVnZShpOTE1KTsKKworCS8qIHNwYXJzZV9zaXplID0gMCAqLworCWlndF9zdWJ0 ZXN0KCJzcGFyc2VfaW52YWxpZF9zaXplIikKKwkJaWd0X3NwYXJzZV9pbnZhbGlkX3NpemUoaTkx NSk7CisKKwkvKiBzcmNfaGFuZGxlID0gLTEgKi8KKwlpZ3Rfc3VidGVzdCgic3BhcnNlX2ludmFs aWRfc291cmNlIikKKwkJaWd0X3NwYXJzZV9pbnZhbGlkX3NvdXJjZShpOTE1KTsKKworCWlndF9z dWJ0ZXN0KCJzcGFyc2VfaW52YWxpZF9saW5rIikKKwkJaWd0X3NwYXJzZV9pbnZhbGlkX2xpbmso aTkxNSk7CisKKwkvKiByZWFkaW5nIG91dHNpZGUgc2l6ZW9mIHNwYXJzZSAqLworCWlndF9zdWJ0 ZXN0KCJzcGFyc2VfaW52YWxpZF9wcmVhZCIpCisJCWlndF9zcGFyc2VfaW52YWxpZF9zcGFyc2Vf cmVhZChpOTE1KTsKKworCisJZm9yIChlbnVtIHNvdXJjZV90eXBlIHR5cGUgPSBVTlNFVDsgdHlw ZSA8IF9fTEFTVF9TT1VSQ0VfXzsgdHlwZSsrKSB7CisJCWNvbnN0IGNoYXIgKm5hbWUgPSBzb3Vy Y2VfbmFtZSh0eXBlKTsKKwkJdWludDMyX3QgaGFuZGxlID0gMDsKKworCQlpZ3RfZml4dHVyZSB7 CisJCQloYW5kbGUgPSBzb3VyY2VfY3JlYXRlKGk5MTUsIHR5cGUsIE9CSl9TSVpFKTsKKwkJfQor CisJCWlndF9zdWJ0ZXN0X2YoIiVzLXNwYXJzZS1yZWFkIiwgbmFtZSkKKwkJCWlndF9zcGFyc2Vf cmVhZChpOTE1LCBoYW5kbGUpOworCisJCWlndF9zdWJ0ZXN0X2YoIiVzLXNwYXJzZS13cml0ZSIs IG5hbWUpCisJCQlpZ3Rfc3BhcnNlX3dyaXRlKGk5MTUsIGhhbmRsZSk7CisKKwkJaWd0X3N1YnRl c3RfZigiJXMtc3BhcnNlLW1tYXAiLCBuYW1lKQorCQkJaWd0X3NwYXJzZV9tbWFwKGk5MTUsIGhh bmRsZSk7CisKKwkJaWd0X3N1YnRlc3RfZigiJXMtc3BhcnNlLWV4ZWNidWYiLCBuYW1lKQorCQkJ aWd0X3NwYXJzZV9leGVjYnVmKGk5MTUsIGhhbmRsZSk7CisKKwkJaWd0X2ZpeHR1cmUgeworCQkJ c291cmNlX2Rlc3Ryb3koaTkxNSwgaGFuZGxlKTsKKwkJfQorCX0KKworCWlndF9zdWJ0ZXN0KCJz cGFyc2VfbGlua19tdWx0aXBsZV9zb3VyY2VzIikKKwkJaWd0X2dlbV9zcGFyc2VfbGlua19uc291 cmNlcyhpOTE1KTsKKworCWlndF9zdWJ0ZXN0KCJzcGFyc2Vfc21va2VfdGVzdF9zaW5nbGVfc291 cmNlIikKKwkJaWd0X2dlbV9zcGFyc2Vfc21va2V0ZXN0X3NpbmdsZV9zb3VyY2UoaTkxNSk7CisK KwlpZ3Rfc3VidGVzdCgic3BhcnNlX3Ntb2tlX3Rlc3Rfc2luZ2xlX2Rlc3RpbmF0aW9uIikKKwkJ aWd0X2dlbV9zcGFyc2Vfc21va2V0ZXN0X3NpbmdsZV9kZXN0aW5hdGlvbihpOTE1KTsKKworCWln dF9maXh0dXJlIHsKKwkJY2xvc2UoaTkxNSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvbWVz b24uYnVpbGQgYi90ZXN0cy9tZXNvbi5idWlsZAppbmRleCA5MDE1ZjgwOS4uOWJmMTIxMTggMTAw NjQ0Ci0tLSBhL3Rlc3RzL21lc29uLmJ1aWxkCisrKyBiL3Rlc3RzL21lc29uLmJ1aWxkCkBAIC0x NTMsNiArMTUzLDcgQEAgaTkxNV9wcm9ncyA9IFsKIAknZ2VtX2d0dF9ob2cnLAogCSdnZW1fZ3R0 X3NwZWVkJywKIAknZ2VtX2xhcmdlb2JqZWN0JywKKwknZ2VtX3NwYXJzZW9iamVjdCcsCiAJJ2dl bV9saW5lYXJfYmxpdHMnLAogCSdnZW1fbHV0X2hhbmRsZScsCiAJJ2dlbV9tYWR2aXNlJywKLS0g CjIuMTcuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K aWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2