From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lionel Landwerlin Subject: [PATCH v2 06/10] tests/perf: rework oa-exponent test Date: Wed, 23 Aug 2017 10:43:14 +0100 Message-ID: <20170823094318.18966-7-lionel.g.landwerlin@intel.com> References: <20170823094318.18966-1-lionel.g.landwerlin@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 448E46E564 for ; Wed, 23 Aug 2017 09:43:29 +0000 (UTC) In-Reply-To: <20170823094318.18966-1-lionel.g.landwerlin@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 List-Id: intel-gfx@lists.freedesktop.org TmV3IGlzc3VlcyB0aGF0IHdlcmUgZGlzY292ZXJlZCB3aGlsZSBtYWtpbmcgdGhlIHRlc3RzIHdv cmsgb24gR2VuOCsgOgoKIC0gd2UgbmVlZCB0byBtZWFzdXJlIHRpbWluZ3MgYmV0d2VlbiBwZXJp b2RpYyByZXBvcnRzIGFuZCBkaXNjYXJkIGFsbAogICBvdGhlciBraW5kIG9mIHJlcG9ydHMKCiAt IGl0IHNlZW1zIHBlcmlvZGljaXR5IG9mIHRoZSByZXBvcnRzIGNhbiBiZSBhZmZlY3RlZCBvdXRz aWRlIG9mIFJDNgogICAoZnJlcXVlbmN5IGNoYW5nZSksIHdlIGNhbiBkZXRlY3QgdGhpcyBieSBs b29raW5nIGF0IHRoZSBhbW91bnQgb2YKICAgY2xvY2sgY3ljbGVzIHBlciB0aW1lc3RhbXAgZGVs dGFzCgp2MjogRHJvcCB1bnVzZWQgZnJlcXVlbmN5IHJlbGF0ZWQgYml0cyAoTWF0dGhldykKClNp Z25lZC1vZmYtYnk6IExpb25lbCBMYW5kd2VybGluIDxsaW9uZWwuZy5sYW5kd2VybGluQGludGVs LmNvbT4KLS0tCiB0ZXN0cy9wZXJmLmMgfCA3MzQgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA2MDAgaW5z ZXJ0aW9ucygrKSwgMTM0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Rlc3RzL3BlcmYuYyBi L3Rlc3RzL3BlcmYuYwppbmRleCBiN2RlYjliMi4uZDlhZmE0OTQgMTAwNjQ0Ci0tLSBhL3Rlc3Rz L3BlcmYuYworKysgYi90ZXN0cy9wZXJmLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxm Y250bC5oPgogI2luY2x1ZGUgPGludHR5cGVzLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNs dWRlIDxzaWduYWwuaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2luY2x1ZGUgPHN5cy90aW1l Lmg+CiAjaW5jbHVkZSA8c3lzL3RpbWVzLmg+CkBAIC0zMDYsNiArMzA3LDI1IEBAIHN0YXRpYyB1 aW50MzJfdCAoKnJlYWRfcmVwb3J0X3RpY2tzKSh1aW50MzJfdCAqcmVwb3J0LAogc3RhdGljIHZv aWQgKCpzYW5pdHlfY2hlY2tfcmVwb3J0cykodWludDMyX3QgKm9hX3JlcG9ydDAsIHVpbnQzMl90 ICpvYV9yZXBvcnQxLAogCQkJCSAgICBlbnVtIGRybV9pOTE1X29hX2Zvcm1hdCBmb3JtYXQpOwog CitzdGF0aWMgYm9vbAordGltZXN0YW1wX2RlbHRhX3dpdGhpbih1aW50MzJfdCBkZWx0YSwKKwkJ ICAgICAgIHVpbnQzMl90IGV4cGVjdGVkX2RlbHRhLAorCQkgICAgICAgdWludDMyX3QgbWFyZ2lu KQoreworCXJldHVybiBkZWx0YSA+PSAoZXhwZWN0ZWRfZGVsdGEgLSBtYXJnaW4pICYmCisJICAg ICAgIGRlbHRhIDw9IChleHBlY3RlZF9kZWx0YSArIG1hcmdpbik7Cit9CisKK3N0YXRpYyBib29s Citkb3VibGVfdmFsdWVfd2l0aGluKGRvdWJsZSB2YWx1ZSwKKwkJICAgIGRvdWJsZSBleHBlY3Rl ZCwKKwkJICAgIGRvdWJsZSBwZXJjZW50X21hcmdpbikKK3sKKwlyZXR1cm4gdmFsdWUgPj0gKGV4 cGVjdGVkIC0gZXhwZWN0ZWQgKiBwZXJjZW50X21hcmdpbiAvIDEwMC4wKSAmJgorCSAgICAgICB2 YWx1ZSA8PSAoZXhwZWN0ZWQgKyBleHBlY3RlZCAqIHBlcmNlbnRfbWFyZ2luIC8gMTAwLjApOwor Cit9CisKIHN0YXRpYyB2b2lkCiBfX3BlcmZfY2xvc2UoaW50IGZkKQogewpAQCAtNDcyLDYgKzQ5 MiwyMCBAQCBnZW44X3JlYWRfcmVwb3J0X3RpY2tzKHVpbnQzMl90ICpyZXBvcnQsIGVudW0gZHJt X2k5MTVfb2FfZm9ybWF0IGZvcm1hdCkKIAlyZXR1cm4gcmVwb3J0WzNdOwogfQogCitzdGF0aWMg dm9pZAorZ2VuOF9yZWFkX3JlcG9ydF9jbG9ja19yYXRpb3ModWludDMyX3QgKnJlcG9ydCwKKwkJ CSAgICAgIHVpbnQzMl90ICpzbGljZV9mcmVxX21oeiwKKwkJCSAgICAgIHVpbnQzMl90ICp1bnNs aWNlX2ZyZXFfbWh6KQoreworCXVpbnQzMl90IHVuc2xpY2VfZnJlcSA9IHJlcG9ydFswXSAmIDB4 MWZmOworCXVpbnQzMl90IHNsaWNlX2ZyZXFfbG93ID0gKHJlcG9ydFswXSA+PiAyNSkgJiAweDdm OworCXVpbnQzMl90IHNsaWNlX2ZyZXFfaGlnaCA9IChyZXBvcnRbMF0gPj4gOSkgJiAweDM7CisJ dWludDMyX3Qgc2xpY2VfZnJlcSA9IHNsaWNlX2ZyZXFfbG93IHwgKHNsaWNlX2ZyZXFfaGlnaCA8 PCA3KTsKKworCSpzbGljZV9mcmVxX21oeiA9IChzbGljZV9mcmVxICogMTY2NjYpIC8gMTAwMDsK KwkqdW5zbGljZV9mcmVxX21oeiA9ICh1bnNsaWNlX2ZyZXEgKiAxNjY2NikgLyAxMDAwOworfQor CiBzdGF0aWMgY29uc3QgY2hhciAqCiBnZW44X3JlYWRfcmVwb3J0X3JlYXNvbihjb25zdCB1aW50 MzJfdCAqcmVwb3J0KQogewpAQCAtNDk0LDI5ICs1MjgsNiBAQCBnZW44X3JlYWRfcmVwb3J0X3Jl YXNvbihjb25zdCB1aW50MzJfdCAqcmVwb3J0KQogCQlyZXR1cm4gInVua25vd24iOwogfQogCi1z dGF0aWMgYm9vbAotb2FfcmVwb3J0X2lzX3BlcmlvZGljKHVpbnQzMl90IG9hX2V4cG9uZW50LCBj b25zdCB1aW50MzJfdCAqcmVwb3J0KQotewotCWlmIChJU19IQVNXRUxMKGRldmlkKSkgewotCQkv KiBGb3IgSGFzd2VsbCB3ZSBkb24ndCBoYXZlIGEgZG9jdW1lbnRlZCByZXBvcnQgcmVhc29uIGZp ZWxkCi0JCSAqICh0aG91Z2ggZW1waXJpY2FsbHkgcmVwb3J0WzBdIGJpdCAxMCBkb2VzIHNlZW0g dG8gY29ycmVsYXRlCi0JCSAqIHdpdGggYSB0aW1lciB0cmlnZ2VyIHJlYXNvbikgc28gd2UgaW5z dGVhZCBpbmZlciB3aGljaAotCQkgKiByZXBvcnRzIGFyZSB0aW1lciB0cmlnZ2VyZWQgYnkgY2hl Y2tpbmcgaWYgdGhlIGxlYXN0Ci0JCSAqIHNpZ25pZmljYW50IGJpdHMgYXJlIHplcm8gYW5kIHRo ZSBleHBvbmVudCBiaXQgaXMgc2V0LgotCQkgKi8KLQkJdWludDMyX3Qgb2FfZXhwb25lbnRfbWFz ayA9ICgxIDw8IChvYV9leHBvbmVudCArIDEpKSAtIDE7Ci0KLQkJaWYgKChyZXBvcnRbMV0gJiBv YV9leHBvbmVudF9tYXNrKSAhPSAoMSA8PCBvYV9leHBvbmVudCkpCi0JCQlyZXR1cm4gdHJ1ZTsK LQl9IGVsc2UgewotCQlpZiAoKHJlcG9ydFswXSA+PiBPQVJFUE9SVF9SRUFTT05fU0hJRlQpICYK LQkJICAgIE9BUkVQT1JUX1JFQVNPTl9USU1FUikKLQkJCXJldHVybiB0cnVlOwotCX0KLQotCXJl dHVybiBmYWxzZTsKLX0KLQogc3RhdGljIHVpbnQ2NF90CiB0aW1lYmFzZV9zY2FsZSh1aW50MzJf dCB1MzJfZGVsdGEpCiB7CkBAIC01NjMsNiArNTc0LDI5IEBAIG9hX2V4cG9uZW50X3RvX25zKGlu dCBleHBvbmVudCkKICAgICAgICByZXR1cm4gMTAwMDAwMDAwMFVMTCAqICgyVUxMIDw8IGV4cG9u ZW50KSAvIHRpbWVzdGFtcF9mcmVxdWVuY3k7CiB9CiAKK3N0YXRpYyBib29sCitvYV9yZXBvcnRf aXNfcGVyaW9kaWModWludDMyX3Qgb2FfZXhwb25lbnQsIGNvbnN0IHVpbnQzMl90ICpyZXBvcnQp Cit7CisJaWYgKElTX0hBU1dFTEwoZGV2aWQpKSB7CisJCS8qIEZvciBIYXN3ZWxsIHdlIGRvbid0 IGhhdmUgYSBkb2N1bWVudGVkIHJlcG9ydCByZWFzb24gZmllbGQKKwkJICogKHRob3VnaCBlbXBp cmljYWxseSByZXBvcnRbMF0gYml0IDEwIGRvZXMgc2VlbSB0byBjb3JyZWxhdGUKKwkJICogd2l0 aCBhIHRpbWVyIHRyaWdnZXIgcmVhc29uKSBzbyB3ZSBpbnN0ZWFkIGluZmVyIHdoaWNoCisJCSAq IHJlcG9ydHMgYXJlIHRpbWVyIHRyaWdnZXJlZCBieSBjaGVja2luZyBpZiB0aGUgbGVhc3QKKwkJ ICogc2lnbmlmaWNhbnQgYml0cyBhcmUgemVybyBhbmQgdGhlIGV4cG9uZW50IGJpdCBpcyBzZXQu CisJCSAqLworCQl1aW50MzJfdCBvYV9leHBvbmVudF9tYXNrID0gKDEgPDwgKG9hX2V4cG9uZW50 ICsgMSkpIC0gMTsKKworCQlpZiAoKHJlcG9ydFsxXSAmIG9hX2V4cG9uZW50X21hc2spID09ICgx IDw8IG9hX2V4cG9uZW50KSkKKwkJCXJldHVybiB0cnVlOworCX0gZWxzZSB7CisJCWlmICgocmVw b3J0WzBdID4+IE9BUkVQT1JUX1JFQVNPTl9TSElGVCkgJgorCQkgICAgT0FSRVBPUlRfUkVBU09O X1RJTUVSKQorCQkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCiBzdGF0 aWMgYm9vbAogb2FfcmVwb3J0X2N0eF9pc192YWxpZCh1aW50MzJfdCAqcmVwb3J0KQogewpAQCAt NTc4LDYgKzYxMiwxMjggQEAgb2FfcmVwb3J0X2N0eF9pc192YWxpZCh1aW50MzJfdCAqcmVwb3J0 KQogCWlndF9hc3NlcnQoISJyZWFjaGVkIik7CiB9CiAKK3N0YXRpYyB1aW50MzJfdAorb2FfcmVw b3J0X2dldF9jdHhfaWQodWludDMyX3QgKnJlcG9ydCkKK3sKKwlpZiAoIW9hX3JlcG9ydF9jdHhf aXNfdmFsaWQocmVwb3J0KSkKKwkJcmV0dXJuIDB4ZmZmZmZmZmY7CisJcmV0dXJuIHJlcG9ydFsy XTsKK30KKworc3RhdGljIGRvdWJsZQorb2FfcmVwb3J0c190aWNrX3Blcl9wZXJpb2QodWludDMy X3QgKnJlcG9ydDAsIHVpbnQzMl90ICpyZXBvcnQxKQoreworCWlmIChpbnRlbF9nZW4oZGV2aWQp IDwgOCkKKwkJcmV0dXJuIDAuMDsKKworCS8qIE1lYXN1cmUgdGhlIG51bWJlciBHUFUgdGljayBk ZWx0YSB0byB0aW1lc3RhbXAgZGVsdGEuICovCisJcmV0dXJuIChkb3VibGUpIChyZXBvcnQxWzNd IC0gcmVwb3J0MFszXSkgLworCSAgICAgICAoZG91YmxlKSAocmVwb3J0MVsxXSAtIHJlcG9ydDBb MV0pOworfQorCitzdGF0aWMgdm9pZAorc2NyYXRjaF9idWZfbWVtc2V0KGRybV9pbnRlbF9ibyAq Ym8sIGludCB3aWR0aCwgaW50IGhlaWdodCwgdWludDMyX3QgY29sb3IpCit7CisJaW50IHJldDsK KworCXJldCA9IGRybV9pbnRlbF9ib19tYXAoYm8sIHRydWUgLyogd3JpdGFibGUgKi8pOworCWln dF9hc3NlcnRfZXEocmV0LCAwKTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgd2lkdGggKiBoZWln aHQ7IGkrKykKKwkJKCh1aW50MzJfdCAqKWJvLT52aXJ0dWFsKVtpXSA9IGNvbG9yOworCisJZHJt X2ludGVsX2JvX3VubWFwKGJvKTsKK30KKworc3RhdGljIHZvaWQKK3NjcmF0Y2hfYnVmX2luaXQo ZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyLAorCQkgc3RydWN0IGlndF9idWYgKmJ1ZiwKKwkJIGlu dCB3aWR0aCwgaW50IGhlaWdodCwKKwkJIHVpbnQzMl90IGNvbG9yKQoreworCXNpemVfdCBzdHJp ZGUgPSB3aWR0aCAqIDQ7CisJc2l6ZV90IHNpemUgPSBzdHJpZGUgKiBoZWlnaHQ7CisJZHJtX2lu dGVsX2JvICpibyA9IGRybV9pbnRlbF9ib19hbGxvYyhidWZtZ3IsICIiLCBzaXplLCA0MDk2KTsK KworCXNjcmF0Y2hfYnVmX21lbXNldChibywgd2lkdGgsIGhlaWdodCwgY29sb3IpOworCisJYnVm LT5ibyA9IGJvOworCWJ1Zi0+c3RyaWRlID0gc3RyaWRlOworCWJ1Zi0+dGlsaW5nID0gSTkxNV9U SUxJTkdfTk9ORTsKKwlidWYtPnNpemUgPSBzaXplOworfQorCitzdGF0aWMgdm9pZAorZW1pdF9y ZXBvcnRfcGVyZl9jb3VudChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAorCQkgICAg ICAgZHJtX2ludGVsX2JvICpkc3RfYm8sCisJCSAgICAgICBpbnQgZHN0X29mZnNldCwKKwkJICAg ICAgIHVpbnQzMl90IHJlcG9ydF9pZCkKK3sKKwlpZiAoSVNfSEFTV0VMTChkZXZpZCkpIHsKKwkJ QkVHSU5fQkFUQ0goMywgMSk7CisJCU9VVF9CQVRDSChHRU42X01JX1JFUE9SVF9QRVJGX0NPVU5U KTsKKwkJT1VUX1JFTE9DKGRzdF9ibywgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCBJOTE1 X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sCisJCQkgIGRzdF9vZmZzZXQpOworCQlPVVRfQkFUQ0go cmVwb3J0X2lkKTsKKwkJQURWQU5DRV9CQVRDSCgpOworCX0gZWxzZSB7CisJCS8qIFhYWDogTkI6 IG4gZHdvcmRzIGFyZyBpcyBhY3R1YWxseSBtYWdpYyBzaW5jZSBpdCBpbnRlcm5hbGx5CisJCSAq IGF1dG9tYXRpY2FsbHkgYWNjb3VudHMgZm9yIGxhcmdlciBhZGRyZXNzZXMgb24gZ2VuID49IDgu Li4KKwkJICovCisJCUJFR0lOX0JBVENIKDMsIDEpOworCQlPVVRfQkFUQ0goR0VOOF9NSV9SRVBP UlRfUEVSRl9DT1VOVCk7CisJCU9VVF9SRUxPQyhkc3RfYm8sIEk5MTVfR0VNX0RPTUFJTl9JTlNU UlVDVElPTiwgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLAorCQkJICBkc3Rfb2Zmc2V0KTsK KwkJT1VUX0JBVENIKHJlcG9ydF9pZCk7CisJCUFEVkFOQ0VfQkFUQ0goKTsKKwl9Cit9CisKK3N0 YXRpYyB1aW50MzJfdAoraTkxNV9nZXRfb25lX2dwdV90aW1lc3RhbXAodWludDMyX3QgKmNvbnRl eHRfaWQpCit7CisJZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyID0gZHJtX2ludGVsX2J1Zm1ncl9n ZW1faW5pdChkcm1fZmQsIDQwOTYpOworCWRybV9pbnRlbF9jb250ZXh0ICptaV9ycGNfY3R4ID0g ZHJtX2ludGVsX2dlbV9jb250ZXh0X2NyZWF0ZShidWZtZ3IpOworCWRybV9pbnRlbF9ibyAqbWlf cnBjX2JvID0gZHJtX2ludGVsX2JvX2FsbG9jKGJ1Zm1nciwgIm1pX3JwYyBkZXN0IGJvIiwgNDA5 NiwgNjQpOworCXN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqbWlfcnBjX2JhdGNoID0gaW50ZWxf YmF0Y2hidWZmZXJfYWxsb2MoYnVmbWdyLCBkZXZpZCk7CisJaW50IHJldDsKKwl1aW50MzJfdCB0 aW1lc3RhbXA7CisKKwlkcm1faW50ZWxfYnVmbWdyX2dlbV9lbmFibGVfcmV1c2UoYnVmbWdyKTsK KworCWlmIChjb250ZXh0X2lkKSB7CisJCXJldCA9IGRybV9pbnRlbF9nZW1fY29udGV4dF9nZXRf aWQobWlfcnBjX2N0eCwgY29udGV4dF9pZCk7CisJCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKKwl9 CisKKwlpZ3RfYXNzZXJ0KG1pX3JwY19jdHgpOworCWlndF9hc3NlcnQobWlfcnBjX2JvKTsKKwlp Z3RfYXNzZXJ0KG1pX3JwY19iYXRjaCk7CisKKwlyZXQgPSBkcm1faW50ZWxfYm9fbWFwKG1pX3Jw Y19ibywgdHJ1ZSk7CisJaWd0X2Fzc2VydF9lcShyZXQsIDApOworCW1lbXNldChtaV9ycGNfYm8t PnZpcnR1YWwsIDB4ODAsIDQwOTYpOworCWRybV9pbnRlbF9ib191bm1hcChtaV9ycGNfYm8pOwor CisJZW1pdF9yZXBvcnRfcGVyZl9jb3VudChtaV9ycGNfYmF0Y2gsCisJCQkgICAgICAgbWlfcnBj X2JvLCAvKiBkc3QgKi8KKwkJCSAgICAgICAwLCAvKiBkc3Qgb2Zmc2V0IGluIGJ5dGVzICovCisJ CQkgICAgICAgMHhkZWFkYmVlZik7IC8qIHJlcG9ydCBJRCAqLworCisJaW50ZWxfYmF0Y2hidWZm ZXJfZmx1c2hfd2l0aF9jb250ZXh0KG1pX3JwY19iYXRjaCwgbWlfcnBjX2N0eCk7CisKKwlyZXQg PSBkcm1faW50ZWxfYm9fbWFwKG1pX3JwY19ibywgZmFsc2UgLyogd3JpdGUgZW5hYmxlICovKTsK KwlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7CisJdGltZXN0YW1wID0gKCh1aW50MzJfdCAqKW1pX3Jw Y19iby0+dmlydHVhbClbMV07CisJZHJtX2ludGVsX2JvX3VubWFwKG1pX3JwY19ibyk7CisKKwlk cm1faW50ZWxfYm9fdW5yZWZlcmVuY2UobWlfcnBjX2JvKTsKKwlpbnRlbF9iYXRjaGJ1ZmZlcl9m cmVlKG1pX3JwY19iYXRjaCk7CisJZHJtX2ludGVsX2dlbV9jb250ZXh0X2Rlc3Ryb3kobWlfcnBj X2N0eCk7CisJZHJtX2ludGVsX2J1Zm1ncl9kZXN0cm95KGJ1Zm1ncik7CisKKwlyZXR1cm4gdGlt ZXN0YW1wOworfQogCiBzdGF0aWMgdm9pZAogaHN3X3Nhbml0eV9jaGVja19yZW5kZXJfYmFzaWNf cmVwb3J0cyh1aW50MzJfdCAqb2FfcmVwb3J0MCwgdWludDMyX3QgKm9hX3JlcG9ydDEsCkBAIC0x MDMyLDcgKzExODgsNiBAQCBpOTE1X3JlYWRfcmVwb3J0c191bnRpbF90aW1lc3RhbXAoZW51bSBk cm1faTkxNV9vYV9mb3JtYXQgb2FfZm9ybWF0LAogCXJldHVybiB0b3RhbF9sZW47CiB9CiAKLQog LyogQ0FQX1NZU19BRE1JTiBpcyByZXF1aXJlZCB0byBvcGVuIHN5c3RlbSB3aWRlIG1ldHJpY3Ms IHVubGVzcyB0aGUgc3lzdGVtCiAgKiBjb250cm9sIHBhcmFtZXRlciBkZXYuaTkxNS5wZXJmX3N0 cmVhbV9wYXJhbm9pZCA9PSAwICovCiBzdGF0aWMgdm9pZApAQCAtMTM0NywyMCArMTUwMiw2IEBA IG9wZW5fYW5kX3JlYWRfMl9vYV9yZXBvcnRzKGludCBmb3JtYXRfaWQsCiAJX19wZXJmX2Nsb3Nl KHN0cmVhbV9mZCk7CiB9CiAKLXN0YXRpYyB2b2lkCi1nZW44X3JlYWRfcmVwb3J0X2Nsb2NrX3Jh dGlvcyh1aW50MzJfdCAqcmVwb3J0LAotCQkJICAgICAgdWludDMyX3QgKnNsaWNlX2ZyZXFfbWh6 LAotCQkJICAgICAgdWludDMyX3QgKnVuc2xpY2VfZnJlcV9taHopCi17Ci0JdWludDMyX3QgdW5z bGljZV9mcmVxID0gcmVwb3J0WzBdICYgMHgxZmY7Ci0JdWludDMyX3Qgc2xpY2VfZnJlcV9sb3cg PSAocmVwb3J0WzBdID4+IDI1KSAmIDB4N2Y7Ci0JdWludDMyX3Qgc2xpY2VfZnJlcV9oaWdoID0g KHJlcG9ydFswXSA+PiA5KSAmIDB4MzsKLQl1aW50MzJfdCBzbGljZV9mcmVxID0gc2xpY2VfZnJl cV9sb3cgfCAoc2xpY2VfZnJlcV9oaWdoIDw8IDcpOwotCi0JKnNsaWNlX2ZyZXFfbWh6ID0gKHNs aWNlX2ZyZXEgKiAxNjY2NikgLyAxMDAwOwotCSp1bnNsaWNlX2ZyZXFfbWh6ID0gKHVuc2xpY2Vf ZnJlcSAqIDE2NjY2KSAvIDEwMDA7Ci19Ci0KIHN0YXRpYyB2b2lkCiBwcmludF9yZXBvcnRzKHVp bnQzMl90ICpvYV9yZXBvcnQwLCB1aW50MzJfdCAqb2FfcmVwb3J0MSwgaW50IGZtdCkKIHsKQEAg LTE1NTIsNzQgKzE2OTMsNDU3IEBAIHRlc3Rfb2FfZm9ybWF0cyh2b2lkKQogCX0KIH0KIAorCitl bnVtIGxvYWQgeworCUxPVywKKwlISUdICit9OworCisjZGVmaW5lIExPQURfSEVMUEVSX1BBVVNF X1VTRUMgNTAwCisKK3N0YXRpYyBzdHJ1Y3QgbG9hZF9oZWxwZXIgeworCWludCBkZXZpZDsKKwlp bnQgaGFzX3BwZ3R0OworCWRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1ncjsKKwlkcm1faW50ZWxfY29u dGV4dCAqY29udGV4dDsKKwl1aW50MzJfdCBjb250ZXh0X2lkOworCXN0cnVjdCBpbnRlbF9iYXRj aGJ1ZmZlciAqYmF0Y2g7CisJZHJtX2ludGVsX2JvICp0YXJnZXRfYnVmZmVyOworCWVudW0gbG9h ZCBsb2FkOworCWJvb2wgZXhpdDsKKwlzdHJ1Y3QgaWd0X2hlbHBlcl9wcm9jZXNzIGlndF9wcm9j OworCXN0cnVjdCBpZ3RfYnVmIHNyYywgZHN0OworfSBsaCA9IHsgMCwgfTsKKworc3RhdGljIHZv aWQgbG9hZF9oZWxwZXJfc2lnbmFsX2hhbmRsZXIoaW50IHNpZykKK3sKKwlpZiAoc2lnID09IFNJ R1VTUjIpCisJCWxoLmxvYWQgPSBsaC5sb2FkID09IExPVyA/IEhJR0ggOiBMT1c7CisJZWxzZQor CQlsaC5leGl0ID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgbG9hZF9oZWxwZXJfc2V0X2xvYWQo ZW51bSBsb2FkIGxvYWQpCit7CisJaWd0X2Fzc2VydChsaC5pZ3RfcHJvYy5ydW5uaW5nKTsKKwor CWlmIChsaC5sb2FkID09IGxvYWQpCisJCXJldHVybjsKKworCWxoLmxvYWQgPSBsb2FkOworCWtp bGwobGguaWd0X3Byb2MucGlkLCBTSUdVU1IyKTsKK30KKworc3RhdGljIHZvaWQgbG9hZF9oZWxw ZXJfcnVuKGVudW0gbG9hZCBsb2FkKQoreworCS8qCisJICogRklYTUUgZm9yayBoZWxwZXJzIHdv bid0IGdldCBjbGVhbmVkIHVwIHdoZW4gc3RhcnRlZCBmcm9tIHdpdGhpbiBhCisJICogc3VidGVz dCwgc28gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIGl0IHN0aWNrcyBhcm91bmQgYSBiaXQgdG9vIGxv bmcuCisJICovCisJaWYgKGxoLmlndF9wcm9jLnJ1bm5pbmcpIHsKKwkJbG9hZF9oZWxwZXJfc2V0 X2xvYWQobG9hZCk7CisJCXJldHVybjsKKwl9CisKKwlsaC5sb2FkID0gbG9hZDsKKworCWlndF9m b3JrX2hlbHBlcigmbGguaWd0X3Byb2MpIHsKKwkJc2lnbmFsKFNJR1VTUjEsIGxvYWRfaGVscGVy X3NpZ25hbF9oYW5kbGVyKTsKKwkJc2lnbmFsKFNJR1VTUjIsIGxvYWRfaGVscGVyX3NpZ25hbF9o YW5kbGVyKTsKKworCQl3aGlsZSAoIWxoLmV4aXQpIHsKKwkJCWludCByZXQ7CisKKwkJCXJlbmRl cl9jb3B5KGxoLmJhdGNoLAorCQkJCSAgICBsaC5jb250ZXh0LAorCQkJCSAgICAmbGguc3JjLCAw LCAwLCAxOTIwLCAxMDgwLAorCQkJCSAgICAmbGguZHN0LCAwLCAwKTsKKworCQkJaW50ZWxfYmF0 Y2hidWZmZXJfZmx1c2hfd2l0aF9jb250ZXh0KGxoLmJhdGNoLAorCQkJCQkJCSAgICAgbGguY29u dGV4dCk7CisKKwkJCXJldCA9IGRybV9pbnRlbF9nZW1fY29udGV4dF9nZXRfaWQobGguY29udGV4 dCwKKwkJCQkJCQkgICAmbGguY29udGV4dF9pZCk7CisJCQlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7 CisKKwkJCWRybV9pbnRlbF9ib193YWl0X3JlbmRlcmluZyhsaC5kc3QuYm8pOworCisJCQkvKiBM b3dlciB0aGUgbG9hZCBieSBwYXVzaW5nIGFmdGVyIGV2ZXJ5IHN1Ym1pdHRlZAorCQkJICogd3Jp dGUuICovCisJCQlpZiAobGgubG9hZCA9PSBMT1cpCisJCQkJdXNsZWVwKExPQURfSEVMUEVSX1BB VVNFX1VTRUMpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBsb2FkX2hlbHBlcl9zdG9wKHZv aWQpCit7CisJa2lsbChsaC5pZ3RfcHJvYy5waWQsIFNJR1VTUjEpOworCWlndF9hc3NlcnQoaWd0 X3dhaXRfaGVscGVyKCZsaC5pZ3RfcHJvYykgPT0gMCk7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRf aGVscGVyX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJbGguZGV2aWQgPSBpbnRlbF9nZXRf ZHJtX2RldmlkKGRybV9mZCk7CisJbGguaGFzX3BwZ3R0ID0gZ2VtX3VzZXNfcHBndHQoZHJtX2Zk KTsKKworCS8qIE1JX1NUT1JFX0RBVEEgY2FuIG9ubHkgdXNlIEdUVCBhZGRyZXNzIG9uIGdlbjQr L2czMyBhbmQgbmVlZHMKKwkgKiBzbm9vcGFibGUgbWVtIG9uIHByZS1nZW42LiBIZW5jZSBsb2Fk LWhlbHBlciBvbmx5IHdvcmtzIG9uIGdlbjYrLCBidXQKKwkgKiB0aGF0J3MgYWxzbyBhbGwgd2Ug Y2FyZSBhYm91dCBmb3IgdGhlIHJwcyB0ZXN0Y2FzZSovCisJaWd0X2Fzc2VydChpbnRlbF9nZW4o bGguZGV2aWQpID49IDYpOworCWxoLmJ1Zm1nciA9IGRybV9pbnRlbF9idWZtZ3JfZ2VtX2luaXQo ZHJtX2ZkLCA0MDk2KTsKKwlpZ3RfYXNzZXJ0KGxoLmJ1Zm1ncik7CisKKwlkcm1faW50ZWxfYnVm bWdyX2dlbV9lbmFibGVfcmV1c2UobGguYnVmbWdyKTsKKworCWxoLmNvbnRleHQgPSBkcm1faW50 ZWxfZ2VtX2NvbnRleHRfY3JlYXRlKGxoLmJ1Zm1ncik7CisJaWd0X2Fzc2VydChsaC5jb250ZXh0 KTsKKworCWxoLmNvbnRleHRfaWQgPSAweGZmZmZmZmZmOworCXJldCA9IGRybV9pbnRlbF9nZW1f Y29udGV4dF9nZXRfaWQobGguY29udGV4dCwgJmxoLmNvbnRleHRfaWQpOworCWlndF9hc3NlcnRf ZXEocmV0LCAwKTsKKwlpZ3RfYXNzZXJ0X25lcShsaC5jb250ZXh0X2lkLCAweGZmZmZmZmZmKTsK KworCWxoLmJhdGNoID0gaW50ZWxfYmF0Y2hidWZmZXJfYWxsb2MobGguYnVmbWdyLCBsaC5kZXZp ZCk7CisJaWd0X2Fzc2VydChsaC5iYXRjaCk7CisKKwlzY3JhdGNoX2J1Zl9pbml0KGxoLmJ1Zm1n ciwgJmxoLmRzdCwgMTkyMCwgMTA4MCwgMCk7CisJc2NyYXRjaF9idWZfaW5pdChsaC5idWZtZ3Is ICZsaC5zcmMsIDE5MjAsIDEwODAsIDApOworfQorCitzdGF0aWMgdm9pZCBsb2FkX2hlbHBlcl9m aW5pKHZvaWQpCit7CisJaWYgKGxoLmlndF9wcm9jLnJ1bm5pbmcpCisJCWxvYWRfaGVscGVyX3N0 b3AoKTsKKworCWlmIChsaC5zcmMuYm8pCisJCWRybV9pbnRlbF9ib191bnJlZmVyZW5jZShsaC5z cmMuYm8pOworCWlmIChsaC5kc3QuYm8pCisJCWRybV9pbnRlbF9ib191bnJlZmVyZW5jZShsaC5k c3QuYm8pOworCisJaWYgKGxoLmJhdGNoKQorCQlpbnRlbF9iYXRjaGJ1ZmZlcl9mcmVlKGxoLmJh dGNoKTsKKworCWlmIChsaC5jb250ZXh0KQorCQlkcm1faW50ZWxfZ2VtX2NvbnRleHRfZGVzdHJv eShsaC5jb250ZXh0KTsKKworCWlmIChsaC5idWZtZ3IpCisJCWRybV9pbnRlbF9idWZtZ3JfZGVz dHJveShsaC5idWZtZ3IpOworfQorCiBzdGF0aWMgdm9pZAogdGVzdF9vYV9leHBvbmVudHModm9p ZCkKIHsKLQlpZ3RfZGVidWcoIlRlc3RpbmcgT0EgdGltZXIgZXhwb25lbnRzXG4iKTsKKwlsb2Fk X2hlbHBlcl9pbml0KCk7CisJbG9hZF9oZWxwZXJfcnVuKEhJR0gpOwogCiAJLyogSXQncyBhc2tp bmcgYSBsb3QgdG8gc2FtcGxlIHdpdGggYSAxNjAgbmFub3NlY29uZCBwZXJpb2QgYW5kIHRoZQog CSAqIHRlc3QgY2FuIGZhaWwgZHVlIHRvIGJ1ZmZlciBvdmVyZmxvd3MgaWYgaXQgd2Fzbid0IHBv c3NpYmxlIHRvCiAJICoga2VlcCB1cCwgc28gd2UgZG9uJ3Qgc3RhcnQgZnJvbSBhbiBleHBvbmVu dCBvZiB6ZXJvLi4uCiAJICovCi0JZm9yIChpbnQgaSA9IDU7IGkgPCAyMDsgaSsrKSB7Ci0JCXVp bnQzMl90IGV4cGVjdGVkX3RpbWVzdGFtcF9kZWx0YTsKLQkJdWludDMyX3QgdGltZXN0YW1wX2Rl bHRhOwotCQl1aW50MzJfdCBvYV9yZXBvcnQwWzY0XTsKLQkJdWludDMyX3Qgb2FfcmVwb3J0MVs2 NF07CisJZm9yIChpbnQgZXhwb25lbnQgPSA1OyBleHBvbmVudCA8IDE4OyBleHBvbmVudCsrKSB7 CisJCXVpbnQ2NF90IGV4cGVjdGVkX3RpbWVzdGFtcF9kZWx0YTsKIAkJdWludDMyX3QgdGltZV9k ZWx0YTsKLQkJdWludDMyX3QgY2xvY2tfZGVsdGE7Ci0JCXVpbnQzMl90IGZyZXE7CiAJCWludCBu X3Rlc3RlZCA9IDA7CisJCWludCBuX3RpbWVfZGVsdGFfbWF0Y2hlcyA9IDA7CiAKIAkJLyogVGhl IGV4cG9uZW50IGlzIGVmZmVjdGl2ZWx5IHNlbGVjdGluZyBhIGJpdCBpbiB0aGUgdGltZXN0YW1w CiAJCSAqIHRvIHRyaWdnZXIgcmVwb3J0cyBvbiBhbmQgc28gaW4gcHJhY3RpY2Ugd2UgZXhwZWN0 IHRoZSByYXcKIAkJICogdGltZXN0YW1wIGRlbHRhcyBmb3IgcGVyaW9kaWMgcmVwb3J0cyB0byBl eGFjdGx5IG1hdGNoIHRoZQogCQkgKiB2YWx1ZSBvZiBuZXh0IGJpdC4KIAkJICovCi0JCWV4cGVj dGVkX3RpbWVzdGFtcF9kZWx0YSA9IDIgPDwgaTsKKwkJZXhwZWN0ZWRfdGltZXN0YW1wX2RlbHRh ID0gMlVMIDw8IGV4cG9uZW50OwogCiAJCWZvciAoaW50IGogPSAwOyBuX3Rlc3RlZCA8IDEwICYm IGogPCAxMDA7IGorKykgewotCQkJdWludDMyX3QgdGlja3MwLCB0aWNrczE7Ci0KLQkJCWlndF9k ZWJ1ZygiSVRFUiAlZDogdGVzdGluZyBPQSBleHBvbmVudCAlZCAocGVyaW9kID0gJSJQUkl1NjQi bnMpXG4iLAotCQkJCSAgaiwgaSwgb2FfZXhwb25lbnRfdG9fbnMoaSkpOwotCi0JCQlvcGVuX2Fu ZF9yZWFkXzJfb2FfcmVwb3J0cyh0ZXN0X29hX2Zvcm1hdCwKLQkJCQkJCSAgIGksIC8qIGV4cG9u ZW50ICovCi0JCQkJCQkgICBvYV9yZXBvcnQwLAotCQkJCQkJICAgb2FfcmVwb3J0MSwKLQkJCQkJ CSAgIHRydWUpOyAvKiB0aW1lciB0cmlnZ2VyZWQKLQkJCQkJCQkgICAgIHJlcG9ydHMgb25seSAq LwotCi0JCQl0aW1lc3RhbXBfZGVsdGEgPSBvYV9yZXBvcnQxWzFdIC0gb2FfcmVwb3J0MFsxXTsK LQkJCWlndF9hc3NlcnRfbmVxKHRpbWVzdGFtcF9kZWx0YSwgMCk7Ci0KLQkJCWlmICh0aW1lc3Rh bXBfZGVsdGEgIT0gZXhwZWN0ZWRfdGltZXN0YW1wX2RlbHRhKSB7Ci0JCQkJaWd0X2RlYnVnKCJ0 aW1lc3RhbXAwID0gJXUvMHgleFxuIiwKLQkJCQkJICBvYV9yZXBvcnQwWzFdLCBvYV9yZXBvcnQw WzFdKTsKLQkJCQlpZ3RfZGVidWcoInRpbWVzdGFtcDEgPSAldS8weCV4XG4iLAotCQkJCQkgIG9h X3JlcG9ydDFbMV0sIG9hX3JlcG9ydDFbMV0pOworCQkJdWludDY0X3QgcHJvcGVydGllc1tdID0g eworCQkJCS8qIEluY2x1ZGUgT0EgcmVwb3J0cyBpbiBzYW1wbGVzICovCisJCQkJRFJNX0k5MTVf UEVSRl9QUk9QX1NBTVBMRV9PQSwgdHJ1ZSwKKworCQkJCS8qIE9BIHVuaXQgY29uZmlndXJhdGlv biAqLworCQkJCURSTV9JOTE1X1BFUkZfUFJPUF9PQV9NRVRSSUNTX1NFVCwgdGVzdF9tZXRyaWNf c2V0X2lkLAorCQkJCURSTV9JOTE1X1BFUkZfUFJPUF9PQV9GT1JNQVQsIHRlc3Rfb2FfZm9ybWF0 LAorCQkJCURSTV9JOTE1X1BFUkZfUFJPUF9PQV9FWFBPTkVOVCwgZXhwb25lbnQsCisJCQl9Owor CQkJc3RydWN0IGRybV9pOTE1X3BlcmZfb3Blbl9wYXJhbSBwYXJhbSA9IHsKKwkJCQkuZmxhZ3Mg PSBJOTE1X1BFUkZfRkxBR19GRF9DTE9FWEVDLAorCQkJCS5udW1fcHJvcGVydGllcyA9IEFSUkFZ X1NJWkUocHJvcGVydGllcykgLyAyLAorCQkJCS5wcm9wZXJ0aWVzX3B0ciA9IHRvX3VzZXJfcG9p bnRlcihwcm9wZXJ0aWVzKSwKKwkJCX07CisJCQlpbnQgcmV0OworCQkJdWludDY0X3QgYXZlcmFn ZV90aW1lc3RhbXBfZGVsdGE7CisJCQl1aW50MzJfdCBuX3JlcG9ydHMgPSAwOworCQkJdWludDMy X3Qgbl9yZXBvcnRfbG9zdCA9IDA7CisJCQl1aW50MzJfdCBuX2lkbGVfcmVwb3J0cyA9IDA7CisJ CQl1aW50MzJfdCBuX3JlYWRzID0gMDsKKwkJCXVpbnQzMl90IGNvbnRleHRfaWQ7CisJCQl1aW50 NjRfdCBmaXJzdF90aW1lc3RhbXAgPSAwOworCQkJYm9vbCBjaGVja19maXJzdF90aW1lc3RhbXAg PSB0cnVlOworCQkJc3RydWN0IGRybV9pOTE1X3BlcmZfcmVjb3JkX2hlYWRlciAqaGVhZGVyOwor CQkJdWludDY0X3QgZGVsdGFfZGVsdGE7CisJCQlzdHJ1Y3QgeworCQkJCXVpbnQzMl90IHJlcG9y dFs2NF07CisJCQl9IHJlcG9ydHNbMzBdOworCQkJc3RydWN0IHsKKwkJCQl1aW50OF90ICpidWY7 CisJCQkJc2l6ZV90IGxlbjsKKwkJCX0gcmVhZHNbMTAwMF07CisJCQlkb3VibGUgZXJyb3I7CisJ CQlkb3VibGUgdGlja19wZXJfcGVyaW9kOworCisJCQlpZ3RfZGVidWcoIklURVIgJWQ6IHRlc3Rp bmcgT0EgZXhwb25lbnQgJWQsIgorCQkJCSAgIiBleHBlY3RlZCB0cyBkZWx0YSA9ICUiUFJJdTY0 IiAoJSJQUkl1NjQibnMvJS4yZnVzLyUuMmZtcylcbiIsCisJCQkJICBqLCBleHBvbmVudCwKKwkJ CQkgIGV4cGVjdGVkX3RpbWVzdGFtcF9kZWx0YSwKKwkJCQkgIG9hX2V4cG9uZW50X3RvX25zKGV4 cG9uZW50KSwKKwkJCQkgIG9hX2V4cG9uZW50X3RvX25zKGV4cG9uZW50KSAvIDEwMDAuMCwKKwkJ CQkgIG9hX2V4cG9uZW50X3RvX25zKGV4cG9uZW50KSAvICgxMDAwLjAgKiAxMDAwLjApKTsKKwor CQkJc3RyZWFtX2ZkID0gX19wZXJmX29wZW4oZHJtX2ZkLCAmcGFyYW0pOworCisJCQkvKiBSaWdo dCBhZnRlciBvcGVuaW5nIHRoZSBPQSBzdHJlYW0sIHJlYWQgYQorCQkJICogZmlyc3QgdGltZXN0 YW1wIGFzIHdheSB0byBmaWx0ZXIgcHJldmlvdXNseQorCQkJICogc2NoZWR1bGVkIHdvcmsgdGhh dCB3b3VsZCBoYXZlIGNvbmZpZ3VyZWQKKwkJCSAqIHRoZSBPQSB1bml0IGF0IGEgZGlmZmVyZW50 IHBlcmlvZC4gKi8KKwkJCWZpcnN0X3RpbWVzdGFtcCA9IGk5MTVfZ2V0X29uZV9ncHVfdGltZXN0 YW1wKCZjb250ZXh0X2lkKTsKKworCQkJd2hpbGUgKG5fcmVhZHMgPCBBUlJBWV9TSVpFKHJlYWRz KSAmJgorCQkJICAgICAgIG5fcmVwb3J0cyA8IEFSUkFZX1NJWkUocmVwb3J0cykpIHsKKwkJCQlj b25zdCBzaXplX3QgYnVmX3NpemUgPSAxMDI0ICogMTAyNDsKKwkJCQl1aW50OF90ICpidWYgPSBy ZWFkc1tuX3JlYWRzKytdLmJ1ZiA9IGNhbGxvYygxLCBidWZfc2l6ZSk7CisKKwkJCQl3aGlsZSAo KHJldCA9IHJlYWQoc3RyZWFtX2ZkLCBidWYsIGJ1Zl9zaXplKSkgPCAwICYmCisJCQkJICAgICAg IGVycm5vID09IEVJTlRSKQorCQkJCQk7CisKKwkJCQkvKiBXZSBzaG91bGQgbmV2ZXIgaGF2ZSBu byBkYXRhLiAqLworCQkJCWlndF9hc3NlcnQocmV0ID4gMCk7CisJCQkJcmVhZHNbbl9yZWFkcyAt IDFdLmxlbiA9IHJldDsKKworCQkJCWlndF9kZWJ1ZygiID4gcmVhZCAlaSBieXRlc1xuIiwgcmV0 KTsKKworCQkJCWZvciAoaW50IG9mZnNldCA9IDA7CisJCQkJICAgICBvZmZzZXQgPCByZXQgJiYg bl9yZXBvcnRzIDwgQVJSQVlfU0laRShyZXBvcnRzKTsKKwkJCQkgICAgIG9mZnNldCArPSBoZWFk ZXItPnNpemUpIHsKKwkJCQkJdWludDMyX3QgKnJlcG9ydDsKKwkJCQkJZG91YmxlIHByZXZpb3Vz X3RpY2tfcGVyX3BlcmlvZDsKKworCQkJCQloZWFkZXIgPSAodm9pZCAqKShidWYgKyBvZmZzZXQp OworCisJCQkJCWlmIChoZWFkZXItPnR5cGUgPT0gRFJNX0k5MTVfUEVSRl9SRUNPUkRfT0FfQlVG RkVSX0xPU1QpIHsKKwkJCQkJCWlndF9hc3NlcnQoISJyZWFjaGVkIik7CisJCQkJCQlicmVhazsK KwkJCQkJfQorCisJCQkJCWlmIChoZWFkZXItPnR5cGUgPT0gRFJNX0k5MTVfUEVSRl9SRUNPUkRf T0FfUkVQT1JUX0xPU1QpIHsKKwkJCQkJCW5fcmVwb3J0X2xvc3QrKzsKKwkJCQkJCW5fcmVwb3J0 cyA9IDA7CisJCQkJCQluX3JlcG9ydF9sb3N0ID0gMDsKKwkJCQkJCW5faWRsZV9yZXBvcnRzID0g MDsKKwkJCQkJCWZvciAoaW50IHIgPSAwOyByIDwgbl9yZWFkczsgcisrKQorCQkJCQkJCWZyZWUo cmVhZHNbcl0uYnVmKTsKKwkJCQkJCW5fcmVhZHMgPSAwOworCQkJCQkJYnJlYWs7CisJCQkJCX0K KworCQkJCQlpZiAoaGVhZGVyLT50eXBlICE9IERSTV9JOTE1X1BFUkZfUkVDT1JEX1NBTVBMRSkK KwkJCQkJCWNvbnRpbnVlOworCisJCQkJCXJlcG9ydCA9ICh2b2lkICopKGhlYWRlciArIDEpOwor CisJCQkJCS8qIFNraXAgYW55dGhpbmcgYmVmb3JlIHRoZSBmaXJzdAorCQkJCQkgKiB0aW1lc3Rh bXAsIGl0IG1pZ2h0IG5vdCBiZSBhdCB0aGUKKwkJCQkJICogcmlnaHQgcGVyaW9kaWMgZXhwb25l bnQuICovCisJCQkJCWlmIChjaGVja19maXJzdF90aW1lc3RhbXAgJiYKKwkJCQkJICAgIHJlcG9y dFsxXSA8IGZpcnN0X3RpbWVzdGFtcCkgeworCQkJCQkJaWd0X2RlYnVnKCIgPiBEcm9wcGluZyB0 cz0ldSAocHJpb3IgJSJQUkl1NjQiKVxuIiwKKwkJCQkJCQkgIHJlcG9ydFsxXSwgZmlyc3RfdGlt ZXN0YW1wKTsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisKKwkJCQkJLyogT25jZSB3ZSd2ZSBw YXNzZWQgdGhlIGZpcnN0CisJCQkJCSAqIHRpbWVzdGFtcCwgbm8gbmVlZCB0byBjaGVjay4gKi8K KwkJCQkJY2hlY2tfZmlyc3RfdGltZXN0YW1wID0gZmFsc2U7CisKKwkJCQkJaWYgKCFvYV9yZXBv cnRfY3R4X2lzX3ZhbGlkKHJlcG9ydCkpCisJCQkJCQluX2lkbGVfcmVwb3J0cysrOworCisJCQkJ CS8qIFdlIG9ubHkgbWVhc3VyZSB0aW1lc3RhbXBzIGJldHdlZW4KKwkJCQkJICogcGVyaW9kaWMg cmVwb3J0cy4gKi8KKwkJCQkJaWYgKCFvYV9yZXBvcnRfaXNfcGVyaW9kaWMoZXhwb25lbnQsIHJl cG9ydCkpCisJCQkJCQljb250aW51ZTsKKworCQkJCQlpZ3RfZGVidWcoIiA+IHdyaXRlICVpIHRp bWVzdGFtcD0ldVxuIiwgbl9yZXBvcnRzLCByZXBvcnRbMV0pOworCQkJCQltZW1jcHkocmVwb3J0 c1tuX3JlcG9ydHNdLnJlcG9ydCwgcmVwb3J0LAorCQkJCQkgICAgICAgc2l6ZW9mKHJlcG9ydHNb bl9yZXBvcnRzXS5yZXBvcnQpKTsKKwkJCQkJbl9yZXBvcnRzKys7CisKKwkJCQkJcHJldmlvdXNf dGlja19wZXJfcGVyaW9kID0gdGlja19wZXJfcGVyaW9kOworCisJCQkJCWlmIChuX3JlcG9ydHMg PiAxKSB7CisJCQkJCQl0aWNrX3Blcl9wZXJpb2QgPQorCQkJCQkJCW9hX3JlcG9ydHNfdGlja19w ZXJfcGVyaW9kKHJlcG9ydHNbbl9yZXBvcnRzIC0gMl0ucmVwb3J0LAorCQkJCQkJCQkJCSAgIHJl cG9ydHNbbl9yZXBvcnRzIC0gMV0ucmVwb3J0KTsKKworCQkJCQkJLyogRGlzbWlzcyB0aGUgc2Vy aWVzIG9mIHJlcG9ydAorCQkJCQkJICogaWYgd2Ugbm90aWNlIGNsb2NrIGZyZXF1ZW5jeQorCQkJ CQkJICogY2hhbmdlcy4gKi8KKwkJCQkJCWlmICghZG91YmxlX3ZhbHVlX3dpdGhpbih0aWNrX3Bl cl9wZXJpb2QsCisJCQkJCQkJCQkgcHJldmlvdXNfdGlja19wZXJfcGVyaW9kLCA1KSkgeworCQkJ CQkJCQlpZ3RfZGVidWcoIk5vdGljZWQgY2xvY2sgZnJlcXVlbmN5IGNoYW5nZSBhdCB0cz0ldSAo JWYgLyAlZiksICIKKwkJCQkJCQkJCSAgImRyb3BwaW5nIHJlcG9ydHMgYW5kIHRyeWluZyBhZ2Fp blxuIiwKKwkJCQkJCQkJCSAgcmVwb3J0WzFdLCBwcmV2aW91c190aWNrX3Blcl9wZXJpb2QsIHRp Y2tfcGVyX3BlcmlvZCk7CisJCQkJCQkJCW5fcmVwb3J0cyA9IDA7CisJCQkJCQkJCW5fcmVwb3J0 X2xvc3QgPSAwOworCQkJCQkJCQluX2lkbGVfcmVwb3J0cyA9IDA7CisJCQkJCQkJCWZvciAoaW50 IHIgPSAwOyByIDwgbl9yZWFkczsgcisrKQorCQkJCQkJCQkJZnJlZShyZWFkc1tyXS5idWYpOwor CQkJCQkJCQluX3JlYWRzID0gMDsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKwkJ CQl9CiAJCQl9CiAKLQkJCWlndF9hc3NlcnRfZXEodGltZXN0YW1wX2RlbHRhLCBleHBlY3RlZF90 aW1lc3RhbXBfZGVsdGEpOworCQkJX19wZXJmX2Nsb3NlKHN0cmVhbV9mZCk7CisJCQlpZ3RfZGVi dWcoImNsb3NlZCBzdHJlYW1cbiIpOwogCi0JCQl0aWNrczAgPSByZWFkX3JlcG9ydF90aWNrcyhv YV9yZXBvcnQwLCB0ZXN0X29hX2Zvcm1hdCk7Ci0JCQl0aWNrczEgPSByZWFkX3JlcG9ydF90aWNr cyhvYV9yZXBvcnQxLCB0ZXN0X29hX2Zvcm1hdCk7Ci0JCQljbG9ja19kZWx0YSA9IHRpY2tzMSAt IHRpY2tzMDsKKwkJCWlndF9hc3NlcnRfZXEobl9yZXBvcnRzLCBBUlJBWV9TSVpFKHJlcG9ydHMp KTsKIAotCQkJdGltZV9kZWx0YSA9IHRpbWViYXNlX3NjYWxlKHRpbWVzdGFtcF9kZWx0YSk7CisJ CQlhdmVyYWdlX3RpbWVzdGFtcF9kZWx0YSA9IDA7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IChu X3JlcG9ydHMgLSAxKTsgaSsrKSB7CisJCQkJLyogWFhYOiBjYWxjdWxhdGluZyB3aXRoIHUzMiBh cml0aG1ldGljIHRvIGFjY291bnQgZm9yIG92ZXJmbG93ICovCisJCQkJdWludDMyX3QgdTMyX2Rl bHRhID0gcmVwb3J0c1tpICsgMV0ucmVwb3J0WzFdIC0gcmVwb3J0c1tpXS5yZXBvcnRbMV07CiAK LQkJCWZyZXEgPSAoKHVpbnQ2NF90KWNsb2NrX2RlbHRhICogMTAwMCkgLyB0aW1lX2RlbHRhOwot CQkJaWd0X2RlYnVnKCJJVEVSICVkOiB0aW1lIGRlbHRhID0gJSJQUkl1MzIiKG5zKSBjbG9jayBk ZWx0YSA9ICUiUFJJdTMyIiBmcmVxID0gJSJQUkl1MzIiKG1oeilcbiIsCi0JCQkJICBqLCB0aW1l X2RlbHRhLCBjbG9ja19kZWx0YSwgZnJlcSk7CisJCQkJYXZlcmFnZV90aW1lc3RhbXBfZGVsdGEg Kz0gdTMyX2RlbHRhOworCQkJfQorCQkJYXZlcmFnZV90aW1lc3RhbXBfZGVsdGEgLz0gKG5fcmVw b3J0cyAtIDEpOworCisJCQlpZiAoYXZlcmFnZV90aW1lc3RhbXBfZGVsdGEgPiBleHBlY3RlZF90 aW1lc3RhbXBfZGVsdGEpCisJCQkJZGVsdGFfZGVsdGEgID0gYXZlcmFnZV90aW1lc3RhbXBfZGVs dGEgLSBleHBlY3RlZF90aW1lc3RhbXBfZGVsdGE7CisJCQllbHNlCisJCQkJZGVsdGFfZGVsdGEg PSBleHBlY3RlZF90aW1lc3RhbXBfZGVsdGEgLSBhdmVyYWdlX3RpbWVzdGFtcF9kZWx0YTsKKwkJ CWVycm9yID0gKGRlbHRhX2RlbHRhIC8gKGRvdWJsZSlleHBlY3RlZF90aW1lc3RhbXBfZGVsdGEp ICogMTAwLjA7CisKKwkJCXRpbWVfZGVsdGEgPSB0aW1lYmFzZV9zY2FsZShhdmVyYWdlX3RpbWVz dGFtcF9kZWx0YSk7CisKKwkJCWlndF9kZWJ1ZygiID4gQXZnLiB0aW1lIGRlbHRhID0gJSJQUkl1 MzIiKG5zKSwiCisJCQkJICAiIGxvc3QgcmVwb3J0cyA9ICV1LCBuIGlkbGUgcmVwb3J0cyA9ICV1 LCIKKwkJCQkgICIgbiByZWFkcyA9ICV1LCBlcnJvcj0lZlxuIiwKKwkJCQkgIHRpbWVfZGVsdGEs IG5fcmVwb3J0X2xvc3QsIG5faWRsZV9yZXBvcnRzLCBuX3JlYWRzLCBlcnJvcik7CisJCQlpZiAo ZXJyb3IgPiA1KSB7CisJCQkJdWludDMyX3QgKnJwdCA9IE5VTEwsICpsYXN0ID0gTlVMTCwgKmxh c3RfcGVyaW9kaWMgPSBOVUxMOworCisJCQkJaWd0X2RlYnVnKCIgPiBNb3JlIHRoYW4gNSUlIGVy cm9yOiBhdmdfdHNfZGVsdGEgPSAlIlBSSXU2NCIsIGRlbHRhX2RlbHRhID0gJSJQUkl1NjQiLCAi CisJCQkJCSAgImV4cGVjdGVkX2RlbHRhID0gJSJQUkl1NjQiLCBmaXJzdF90aW1lc3RhbXAgPSAl IlBSSXU2NCIgY3R4X2lkPSUiUFJJdTMyIlxuIiwKKwkJCQkJICBhdmVyYWdlX3RpbWVzdGFtcF9k ZWx0YSwgZGVsdGFfZGVsdGEsIGV4cGVjdGVkX3RpbWVzdGFtcF9kZWx0YSwgZmlyc3RfdGltZXN0 YW1wLCBjb250ZXh0X2lkKTsKKwkJCQlmb3IgKGludCBpID0gMDsgaSA8IChuX3JlcG9ydHMgLSAx KTsgaSsrKSB7CisJCQkJCS8qIFhYWDogY2FsY3VsYXRpbmcgd2l0aCB1MzIgYXJpdGhtZXRpYyB0 byBhY2NvdW50IGZvciBvdmVyZmxvdyAqLworCQkJCQl1aW50MzJfdCB1MzJfZGVsdGEgPQorCQkJ CQkJcmVwb3J0c1tpICsgMV0ucmVwb3J0WzFdIC0gcmVwb3J0c1tpXS5yZXBvcnRbMV07CisKKwkJ CQkJaWYgKHUzMl9kZWx0YSA+IGV4cGVjdGVkX3RpbWVzdGFtcF9kZWx0YSkKKwkJCQkJCWRlbHRh X2RlbHRhICA9IHUzMl9kZWx0YSAtIGV4cGVjdGVkX3RpbWVzdGFtcF9kZWx0YTsKKwkJCQkJZWxz ZQorCQkJCQkJZGVsdGFfZGVsdGEgPSBleHBlY3RlZF90aW1lc3RhbXBfZGVsdGEgLSB1MzJfZGVs dGE7CisJCQkJCWVycm9yID0gKGRlbHRhX2RlbHRhIC8gKGRvdWJsZSlleHBlY3RlZF90aW1lc3Rh bXBfZGVsdGEpICogMTAwLjA7CisKKwkJCQkJaWd0X2RlYnVnKCIgPiB0cz0ldS0ldSB0aW1lc3Rh bXAgZGVsdGEgZnJvbSAlMmQgdG8gJTJkID0gJS04dSAoZXJyb3IgPSAldSUlLCBjdHhfaWQgPSAl eClcbiIsCisJCQkJCQkgIHJlcG9ydHNbaSArIDFdLnJlcG9ydFsxXSwgcmVwb3J0c1tpXS5yZXBv cnRbMV0sCisJCQkJCQkgIGksIGkgKyAxLCB1MzJfZGVsdGEsICh1bnNpZ25lZCllcnJvciwKKwkJ CQkJCSAgb2FfcmVwb3J0X2dldF9jdHhfaWQocmVwb3J0c1tpICsgMV0ucmVwb3J0KSk7CisJCQkJ fQorCQkJCWZvciAoaW50IHIgPSAwOyByIDwgbl9yZWFkczsgcisrKSB7CisJCQkJCWlndF9kZWJ1 ZygiID4gcmVhZFxuIik7CisJCQkJCWZvciAoaW50IG9mZnNldCA9IDA7CisJCQkJCSAgICAgb2Zm c2V0IDwgcmVhZHNbcl0ubGVuOworCQkJCQkgICAgIG9mZnNldCArPSBoZWFkZXItPnNpemUpIHsK KwkJCQkJCWludCBjb3VudGVyX3ByaW50ID0gMTM7CisJCQkJCQl1aW50NjRfdCBhMCA9IDAsIGFO ID0gMDsKKwkJCQkJCWRvdWJsZSBsb2NhbF9wZXJpb2QgPSAwOworCisJCQkJCQloZWFkZXIgPSAo dm9pZCAqKSAmcmVhZHNbcl0uYnVmW29mZnNldF07CisKKwkJCQkJCWlmIChoZWFkZXItPnR5cGUg IT0gRFJNX0k5MTVfUEVSRl9SRUNPUkRfU0FNUExFKSB7CisJCQkJCQkJaWd0X2RlYnVnKCIgPiBs b3NzXG4iKTsKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCX0KKworCQkJCQkJcnB0ID0gKHZvaWQg KikoaGVhZGVyICsgMSk7CisKKwkJCQkJCWlmIChsYXN0KSB7CisJCQkJCQkJYTAgPSBnZW44X3Jl YWRfNDBiaXRfYV9jb3VudGVyKHJwdCwgdGVzdF9vYV9mb3JtYXQsIDApIC0KKwkJCQkJCQkJZ2Vu OF9yZWFkXzQwYml0X2FfY291bnRlcihsYXN0LCB0ZXN0X29hX2Zvcm1hdCwgMCk7CisJCQkJCQkJ YU4gPSBnZW44X3JlYWRfNDBiaXRfYV9jb3VudGVyKHJwdCwgdGVzdF9vYV9mb3JtYXQsIGNvdW50 ZXJfcHJpbnQpIC0KKwkJCQkJCQkJZ2VuOF9yZWFkXzQwYml0X2FfY291bnRlcihsYXN0LCB0ZXN0 X29hX2Zvcm1hdCwgY291bnRlcl9wcmludCk7CisJCQkJCQl9CisKKwkJCQkJCWlmIChsYXN0X3Bl cmlvZGljICYmCisJCQkJCQkgICAgb2FfcmVwb3J0X2lzX3BlcmlvZGljKGV4cG9uZW50LCBycHQp KSB7CisJCQkJCQkJbG9jYWxfcGVyaW9kID0KKwkJCQkJCQkJKCh1aW50NjRfdCkgcnB0WzNdIC0g bGFzdF9wZXJpb2RpY1szXSkgIC8KKwkJCQkJCQkJKCh1aW50NjRfdCkgcnB0WzFdIC0gbGFzdF9w ZXJpb2RpY1sxXSk7CisJCQkJCQl9CisKKwkJCQkJCWlndF9kZWJ1ZygiID4gcmVwb3J0IHRzPSV1 IgorCQkJCQkJCSAgIiB0c19kZWx0YV9sYXN0PSU4dSB0c19kZWx0YV9sYXN0X3BlcmlvZGljPSU4 dSBpc190aW1lcj0laSBjdHhfaWQ9JTh4IGdwdV90aWNrcz0ldSBwZXJpb2Q9JS4yZiBBMD0lbHUg QSVpPSVsdVxuIiwKKwkJCQkJCQkgIHJwdFsxXSwKKwkJCQkJCQkgIChsYXN0ICE9IE5VTEwpID8g KHJwdFsxXSAtIGxhc3RbMV0pIDogMCwKKwkJCQkJCQkgIChsYXN0X3BlcmlvZGljICE9IE5VTEwp ID8gKHJwdFsxXSAtIGxhc3RfcGVyaW9kaWNbMV0pIDogMCwKKwkJCQkJCQkgIG9hX3JlcG9ydF9p c19wZXJpb2RpYyhleHBvbmVudCwgcnB0KSwKKwkJCQkJCQkgIG9hX3JlcG9ydF9nZXRfY3R4X2lk KHJwdCksCisJCQkJCQkJICAobGFzdCAhPSBOVUxMKSA/IChycHRbM10gLSBsYXN0WzNdKSA6IDAs CisJCQkJCQkJICBsb2NhbF9wZXJpb2QsCisJCQkJCQkJICBhMCwgY291bnRlcl9wcmludCwgYU4p OworCisJCQkJCQlsYXN0ID0gcnB0OworCQkJCQkJaWYgKG9hX3JlcG9ydF9pc19wZXJpb2RpYyhl eHBvbmVudCwgcnB0KSkKKwkJCQkJCQlsYXN0X3BlcmlvZGljID0gcnB0OworCQkJCQl9CisJCQkJ fQorCisJCQkJaWd0X2Fzc2VydCghInJlYWNoZWQiKTsKKwkJCX0KKworCQkJaWYgKHRpbWVzdGFt cF9kZWx0YV93aXRoaW4oYXZlcmFnZV90aW1lc3RhbXBfZGVsdGEsCisJCQkJCQkgICBleHBlY3Rl ZF90aW1lc3RhbXBfZGVsdGEsCisJCQkJCQkgICBleHBlY3RlZF90aW1lc3RhbXBfZGVsdGEgKiAw LjA1KSkgeworCQkJCWlndF9kZWJ1ZygiID4gdGltZXN0YW1wIGRlbHRhIG1hdGNoaW5nICUiUFJJ dTY0Im5zIH49IGV4cGVjdGVkICUiUFJJdTY0IiEgOilcbiIsCisJCQkJCSAgdGltZWJhc2Vfc2Nh bGUoYXZlcmFnZV90aW1lc3RhbXBfZGVsdGEpLAorCQkJCQkgIHRpbWViYXNlX3NjYWxlKGV4cGVj dGVkX3RpbWVzdGFtcF9kZWx0YSkpOworCQkJCW5fdGltZV9kZWx0YV9tYXRjaGVzKys7CisJCQl9 IGVsc2UgeworCQkJCWlndF9kZWJ1ZygiID4gdGltZXN0YW1wIGRlbHRhIG1pc21hdGNoOiAlIlBS SXU2NCJucyAhPSBleHBlY3RlZCAlIlBSSXU2NCJuc1xuIiwKKwkJCQkJICB0aW1lYmFzZV9zY2Fs ZShhdmVyYWdlX3RpbWVzdGFtcF9kZWx0YSksCisJCQkJCSAgdGltZWJhc2Vfc2NhbGUoZXhwZWN0 ZWRfdGltZXN0YW1wX2RlbHRhKSk7CisJCQkJaWd0X2Fzc2VydChhdmVyYWdlX3RpbWVzdGFtcF9k ZWx0YSA8CisJCQkJCSAgIChleHBlY3RlZF90aW1lc3RhbXBfZGVsdGEgKiAyKSk7CisJCQl9CiAK IAkJCW5fdGVzdGVkKys7CisKKwkJCWZvciAoaW50IHIgPSAwOyByIDwgbl9yZWFkczsgcisrKQor CQkJCWZyZWUocmVhZHNbcl0uYnVmKTsKIAkJfQogCiAJCWlmIChuX3Rlc3RlZCA8IDEwKQotCQkJ aWd0X2RlYnVnKCJzeXNmcyBmcmVxdWVuY3kgcGlubmluZyB0b28gdW5zdGFibGUgZm9yIGNyb3Nz LXJlZmVyZW5jaW5nIHdpdGggT0EgZGVyaXZlZCBmcmVxdWVuY3kiKTsKKwkJCWlndF9kZWJ1Zygi VG9vIG1hbnkgdGVzdCBpdGVyYXRpb25zIGhhZCB0byBiZSBza2lwcGVkXG4iKTsKIAkJaWd0X2Fz c2VydF9lcShuX3Rlc3RlZCwgMTApOworCisJCWlndF9kZWJ1ZygiTnVtYmVyIG9mIGl0ZXJhdGlv bnMgd2l0aCBleHBlY3RlZCB0aW1lc3RhbXAgZGVsdGEgPSAlZFxuIiwKKwkJCSAgbl90aW1lX2Rl bHRhX21hdGNoZXMpOworCisJCS8qIFRoZSBIVyBkb2Vzbid0IGdpdmUgdXMgYW55IHN0cmljdCBn dWFyYW50ZWUgdGhhdCB0aGUKKwkJICogdGltZXN0YW1wcyBhcmUgZXhhY3RseSBhbGlnbmVkIHdp dGggdGhlIGV4cG9uZW50IG1hc2sgYnV0CisJCSAqIGluIHByYWN0aWNlIGl0IHNlZW1zIHZlcnkg cmFyZSBmb3IgdGhhdCBub3QgdG8gYmUgdGhlIGNhc2UKKwkJICogc28gaXQgYSB1c2VmdWwgc2Fu aXR5IGNoZWNrIHRvIGFzc2VydCBxdWl0ZSBzdHJpY3RseS4uLgorCQkgKi8KKwkJaWd0X2Fzc2Vy dChuX3RpbWVfZGVsdGFfbWF0Y2hlcyA+PSA5KTsKIAl9CisKKwlsb2FkX2hlbHBlcl9zdG9wKCk7 CisJbG9hZF9oZWxwZXJfZmluaSgpOwogfQogCiAvKiBUaGUgT0EgZXhwb25lbnQgc2VsZWN0cyBh IHRpbWVzdGFtcCBjb3VudGVyIGJpdCB0byB0cmlnZ2VyIHJlcG9ydHMgb24uCkBAIC0yNDg1LDMy ICszMDA5LDYgQEAgdGVzdF9kaXNhYmxlZF9yZWFkX2Vycm9yKHZvaWQpCiAJX19wZXJmX2Nsb3Nl KHN0cmVhbV9mZCk7CiB9CiAKLXN0YXRpYyB2b2lkCi1lbWl0X3JlcG9ydF9wZXJmX2NvdW50KHN0 cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCSAgICAgICBkcm1faW50ZWxfYm8gKmRz dF9ibywKLQkJICAgICAgIGludCBkc3Rfb2Zmc2V0LAotCQkgICAgICAgdWludDMyX3QgcmVwb3J0 X2lkKQotewotCWlmIChJU19IQVNXRUxMKGRldmlkKSkgewotCQlCRUdJTl9CQVRDSCgzLCAxKTsK LQkJT1VUX0JBVENIKEdFTjZfTUlfUkVQT1JUX1BFUkZfQ09VTlQpOwotCQlPVVRfUkVMT0MoZHN0 X2JvLCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVD VElPTiwKLQkJCSAgZHN0X29mZnNldCk7Ci0JCU9VVF9CQVRDSChyZXBvcnRfaWQpOwotCQlBRFZB TkNFX0JBVENIKCk7Ci0JfSBlbHNlIHsKLQkJLyogWFhYOiBOQjogbiBkd29yZHMgYXJnIGlzIGFj dHVhbGx5IG1hZ2ljIHNpbmNlIGl0IGludGVybmFsbHkKLQkJICogYXV0b21hdGljYWxseSBhY2Nv dW50cyBmb3IgbGFyZ2VyIGFkZHJlc3NlcyBvbiBnZW4gPj0gOC4uLgotCQkgKi8KLQkJQkVHSU5f QkFUQ0goMywgMSk7Ci0JCU9VVF9CQVRDSChHRU44X01JX1JFUE9SVF9QRVJGX0NPVU5UKTsKLQkJ T1VUX1JFTE9DKGRzdF9ibywgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCBJOTE1X0dFTV9E T01BSU5fSU5TVFJVQ1RJT04sCi0JCQkgIGRzdF9vZmZzZXQpOwotCQlPVVRfQkFUQ0gocmVwb3J0 X2lkKTsKLQkJQURWQU5DRV9CQVRDSCgpOwotCX0KLX0KLQogc3RhdGljIHZvaWQKIHRlc3RfbWlf cnBjKHZvaWQpCiB7CkBAIC0yNTgwLDM4ICszMDc4LDYgQEAgdGVzdF9taV9ycGModm9pZCkKIAlf X3BlcmZfY2xvc2Uoc3RyZWFtX2ZkKTsKIH0KIAotc3RhdGljIHZvaWQKLXNjcmF0Y2hfYnVmX21l bXNldChkcm1faW50ZWxfYm8gKmJvLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVpbnQzMl90IGNv bG9yKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBkcm1faW50ZWxfYm9fbWFwKGJvLCB0cnVlIC8q IHdyaXRhYmxlICovKTsKLQlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7Ci0KLQlmb3IgKGludCBpID0g MDsgaSA8IHdpZHRoICogaGVpZ2h0OyBpKyspCi0JCSgodWludDMyX3QgKiliby0+dmlydHVhbClb aV0gPSBjb2xvcjsKLQotCWRybV9pbnRlbF9ib191bm1hcChibyk7Ci19Ci0KLXN0YXRpYyB2b2lk Ci1zY3JhdGNoX2J1Zl9pbml0KGRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1nciwKLQkJIHN0cnVjdCBp Z3RfYnVmICpidWYsCi0JCSBpbnQgd2lkdGgsIGludCBoZWlnaHQsCi0JCSB1aW50MzJfdCBjb2xv cikKLXsKLQlzaXplX3Qgc3RyaWRlID0gd2lkdGggKiA0OwotCXNpemVfdCBzaXplID0gc3RyaWRl ICogaGVpZ2h0OwotCWRybV9pbnRlbF9ibyAqYm8gPSBkcm1faW50ZWxfYm9fYWxsb2MoYnVmbWdy LCAiIiwgc2l6ZSwgNDA5Nik7Ci0KLQlzY3JhdGNoX2J1Zl9tZW1zZXQoYm8sIHdpZHRoLCBoZWln aHQsIGNvbG9yKTsKLQotCWJ1Zi0+Ym8gPSBibzsKLQlidWYtPnN0cmlkZSA9IHN0cmlkZTsKLQli dWYtPnRpbGluZyA9IEk5MTVfVElMSU5HX05PTkU7Ci0JYnVmLT5zaXplID0gc2l6ZTsKLX0KLQog c3RhdGljIHZvaWQKIGVtaXRfc3RhbGxfdGltZXN0YW1wX2FuZF9ycGMoc3RydWN0IGludGVsX2Jh dGNoYnVmZmVyICpiYXRjaCwKIAkJCSAgICAgZHJtX2ludGVsX2JvICpkc3QsCi0tIAoyLjE0LjEK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdm eCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=