From mboxrd@z Thu Jan 1 00:00:00 1970 From: Igal.Liberman Subject: [RFC,v3,11/12] fsl/fman: Add FMan Port Support Date: Wed, 29 Apr 2015 12:28:53 +0300 Message-ID: <1430299733-29395-1-git-send-email-igal.liberman@freescale.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: Igal Liberman , linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, madalin.bucur@freescale.com To: Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: linuxppc-dev-bounces+glppe-linuxppc-embedded-2=m.gmane.org@lists.ozlabs.org Sender: "Linuxppc-dev" List-Id: netdev.vger.kernel.org RnJvbTogSWdhbCBMaWJlcm1hbiA8SWdhbC5MaWJlcm1hbkBmcmVlc2NhbGUuY29tPgoKVGhpcyBw YXRjaCBhZGRzIFRoZSBGTWFuIFBvcnQgY29uZmlndXJhdGlvbiwgaW5pdGlhbGl6YXRpb24gYW5k CnJ1bnRpbWUgY29udHJvbCByb3V0aW5lcy4KClNpZ25lZC1vZmYtYnk6IElnYWwgTGliZXJtYW4g PElnYWwuTGliZXJtYW5AZnJlZXNjYWxlLmNvbT4KLS0tCiBkcml2ZXJzL25ldC9ldGhlcm5ldC9m cmVlc2NhbGUvZm1hbi9NYWtlZmlsZSAgICAgICB8ICAgIDIgKy0KIGRyaXZlcnMvbmV0L2V0aGVy bmV0L2ZyZWVzY2FsZS9mbWFuL2ZtLmMgICAgICAgICAgIHwgIDQ5MiArKysrKystCiBkcml2ZXJz L25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbV9jb21tb24uaCAgICB8ICAxNzIgKystCiBk cml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbV9kcnYuYyAgICAgICB8ICAxMTkg Ky0KIGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtX2Rydi5oICAgICAgIHwg ICAgMiArCiBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbV9wb3J0X2Rydi5j ICB8ICA1MzYgKysrKysrKwogZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vaW5j L2ZtX2V4dC5oICAgfCAgIDU4ICsKIC4uLi9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vaW5j L2ZtX3BvcnRfZXh0LmggIHwgIDM5NyArKysrKysKIC4uLi9uZXQvZXRoZXJuZXQvZnJlZXNjYWxl L2ZtYW4vaW5jL2ZzbF9mbWFuX2Rydi5oIHwgICA5OCArKwogZHJpdmVycy9uZXQvZXRoZXJuZXQv ZnJlZXNjYWxlL2ZtYW4vcG9ydC9NYWtlZmlsZSAgfCAgICAyICstCiBkcml2ZXJzL25ldC9ldGhl cm5ldC9mcmVlc2NhbGUvZm1hbi9wb3J0L2ZtX3BvcnQuYyB8IDE0ODQgKysrKysrKysrKysrKysr KysrKysKIGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL3BvcnQvZm1fcG9ydC5o IHwgIDcxMSArKysrKysrKysrCiAxMiBmaWxlcyBjaGFuZ2VkLCA0MDY2IGluc2VydGlvbnMoKyks IDcgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvZXRoZXJuZXQv ZnJlZXNjYWxlL2ZtYW4vZm1fcG9ydF9kcnYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv bmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2luYy9mbV9wb3J0X2V4dC5oCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vcG9ydC9mbV9wb3J0 LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1h bi9wb3J0L2ZtX3BvcnQuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVz Y2FsZS9mbWFuL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4v TWFrZWZpbGUKaW5kZXggYzZjM2UyNC4uOGQ2MzdlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQv ZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJu ZXQvZnJlZXNjYWxlL2ZtYW4vTWFrZWZpbGUKQEAgLTQsNyArNCw3IEBAIHN1YmRpci1jY2ZsYWdz LXkgKz0gLUkkKHNyY3RyZWUpL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2Zs aWIgXAogCiBvYmoteQkJKz0gZnNsX2ZtYW4ubwogCi1mc2xfZm1hbi1vYmpzCTo9IGZtYW4ubyBm bV9tdXJhbS5vIGZtLm8gZm1fZHJ2Lm8KK2ZzbF9mbWFuLW9ianMJOj0gZm1hbi5vIGZtX211cmFt Lm8gZm0ubyBmbV9kcnYubyBmbV9wb3J0X2Rydi5vCiAKIG9iai15CSs9IHBvcnQvCiBvYmoteQkr PSBtYWMvCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9m bS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm0uYwppbmRleCBjODg4 OWJkLi43NjcwZmVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUv Zm1hbi9mbS5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtLmMK QEAgLTQ1OSwxMSArNDU5LDM2IEBAIHN0YXRpYyB2b2lkIHFtaV9lcnJfZXZlbnQoc3RydWN0IGZt X3QgKnBfZm0pCiAKIHN0YXRpYyB2b2lkIGRtYV9lcnJfZXZlbnQoc3RydWN0IGZtX3QgKnBfZm0p CiB7Ci0JdWludDMyX3Qgc3RhdHVzOworCXVpbnQzMl90IHN0YXR1cywgY29tX2lkOworCXVpbnQ4 X3QgdG51bTsKKwl1aW50OF90IHBvcnRfaWQ7CisJdWludDhfdCByZWxhdGl2ZV9wb3J0X2lkOwor CXVpbnQxNl90IGxpb2RuOwogCXN0cnVjdCBmbWFuX2RtYV9yZWdzIF9faW9tZW0gKmRtYV9yZyA9 IHBfZm0tPnBfZm1fZG1hX3JlZ3M7CiAKIAlzdGF0dXMgPSBmbWFuX2dldF9kbWFfZXJyX2V2ZW50 KGRtYV9yZyk7CiAKKwlpZiAoc3RhdHVzICYgRE1BX1NUQVRVU19CVVNfRVJSKSB7CisJCWNvbV9p ZCA9IGZtYW5fZ2V0X2RtYV9jb21faWQoZG1hX3JnKTsKKwkJcG9ydF9pZCA9ICh1aW50OF90KSgo KGNvbV9pZCAmIERNQV9UUkFOU0ZFUl9QT1JUSURfTUFTSykgPj4KKwkJCQkJCURNQV9UUkFOU0ZF Ul9QT1JUSURfU0hJRlQpKTsKKwkJSFdfUE9SVF9JRF9UT19TV19QT1JUX0lEKHBfZm0tPnBfZm1f c3RhdGVfc3RydWN0LT5yZXZfaW5mby4KKwkJCQkJIG1ham9yX3JldiwKKwkJCQkJIHJlbGF0aXZl X3BvcnRfaWQsCisJCQkJCSBwb3J0X2lkKTsKKwkJdG51bSA9CisJCSAgICAodWludDhfdCkoKGNv bV9pZCAmIERNQV9UUkFOU0ZFUl9UTlVNX01BU0spID4+CisJCQkgICAgICAgRE1BX1RSQU5TRkVS X1ROVU1fU0hJRlQpOworCQlsaW9kbiA9ICh1aW50MTZfdCkoY29tX2lkICYgRE1BX1RSQU5TRkVS X0xJT0ROX01BU0spOworCQlBU1NFUlQocF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPgorCQkJICAg IHBvcnRzX3R5cGVzW3BvcnRfaWRdICE9CisJCQkgICAgRk1fUE9SVF9UWVBFX0RVTU1ZKTsKKwkJ cF9mbS0+Zl9idXNfZXJyb3IocF9mbS0+aF9hcHAsCisJCQkJIHBfZm0tPnBfZm1fc3RhdGVfc3Ry dWN0LT4KKwkJCQkgcG9ydHNfdHlwZXNbcG9ydF9pZF0sCisJCQkJIHJlbGF0aXZlX3BvcnRfaWQs CisJCQkJIGZtYW5fZ2V0X2RtYV9hZGRyKGRtYV9yZyksIHRudW0sIGxpb2RuKTsKKwl9CiAJaWYg KHN0YXR1cyAmIERNQV9TVEFUVVNfRk1fU1BEQVRfRUNDKQogCQlwX2ZtLT5mX2V4Y2VwdGlvbihw X2ZtLT5oX2FwcCwgRk1fRVhfRE1BX1NJTkdMRV9QT1JUX0VDQyk7CiAJaWYgKHN0YXR1cyAmIERN QV9TVEFUVVNfUkVBRF9FQ0MpCkBAIC03NjksNiArNzk0LDQ2NyBAQCB1aW50OF90IGZtX2dldF9p ZCh2b2lkICpoX2ZtKQogCXJldHVybiBwX2ZtLT5wX2ZtX3N0YXRlX3N0cnVjdC0+Zm1faWQ7CiB9 CiAKK2ludCBmbV9nZXRfc2V0X3BvcnRfcGFyYW1zKHZvaWQgKmhfZm0sCisJCQkgICBzdHJ1Y3Qg Zm1faW50ZXJfbW9kdWxlX3BvcnRfaW5pdF9wYXJhbXNfdAorCQkJICAgKnBfcG9ydF9wYXJhbXMp Cit7CisJc3RydWN0IGZtX3QgKnBfZm0gPSAoc3RydWN0IGZtX3QgKiloX2ZtOworCWludCBlcnI7 CisJdW5zaWduZWQgbG9uZyBpbnRfZmxhZ3M7CisJdWludDhfdCBwb3J0X2lkID0gcF9wb3J0X3Bh cmFtcy0+cG9ydF9pZCwgbWFjX2lkOworCXN0cnVjdCBmbWFuX3JnIGZtYW5fcmc7CisKKwlmbWFu X3JnLmJtaV9yZyA9IHBfZm0tPnBfZm1fYm1pX3JlZ3M7CisJZm1hbl9yZy5xbWlfcmcgPSBwX2Zt LT5wX2ZtX3FtaV9yZWdzOworCWZtYW5fcmcuZnBtX3JnID0gcF9mbS0+cF9mbV9mcG1fcmVnczsK KwlmbWFuX3JnLmRtYV9yZyA9IHBfZm0tPnBfZm1fZG1hX3JlZ3M7CisKKwlBU1NFUlQoSU5fUkFO R0UoMSwgcG9ydF9pZCwgNjMpKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKHBfZm0tPnNwaW5sb2Nr LCBpbnRfZmxhZ3MpOworCisJcF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPnBvcnRzX3R5cGVzW3Bv cnRfaWRdID0KKwkgICAgcF9wb3J0X3BhcmFtcy0+cG9ydF90eXBlOworCisJZXJyID0KKwkgICAg Zm1fc2V0X251bV9vZl90YXNrcyhwX2ZtLCBwX3BvcnRfcGFyYW1zLT5wb3J0X2lkLAorCQkJCSZw X3BvcnRfcGFyYW1zLT5udW1fb2ZfdGFza3MsCisJCQkJJnBfcG9ydF9wYXJhbXMtPm51bV9vZl9l eHRyYV90YXNrcywgdHJ1ZSk7CisJaWYgKGVycikgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3Jl KHBfZm0tPnNwaW5sb2NrLCBpbnRfZmxhZ3MpOworCQlyZXR1cm4gZXJyOworCX0KKyNpZmRlZiBG TV9RTUlfTk9fREVRX09QVElPTlNfU1VQUE9SVAorCWlmIChwX2ZtLT5wX2ZtX3N0YXRlX3N0cnVj dC0+cmV2X2luZm8ubWFqb3JfcmV2ICE9IDQpCisjZW5kaWYgLyogRk1fUU1JX05PX0RFUV9PUFRJ T05TX1NVUFBPUlQgKi8KKwkJLyogZm9yIHRyYW5zbWl0Jk8vSCBwb3J0cyAqLworCQlpZiAocF9w b3J0X3BhcmFtcy0+cG9ydF90eXBlICE9IEZNX1BPUlRfVFlQRV9SWCkgeworCQkJdWludDhfdCBl bnFfdGg7CisJCQl1aW50OF90IGRlcV90aDsKKworCQkJLyogdXBkYXRlIHFtaSBFTlEvREVRIHRo cmVzaG9sZCAqLworCQkJcF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPmFjY3VtdWxhdGVkX251bV9v Zl9kZXFfdG51bXMgKz0KKwkJCSAgICBwX3BvcnRfcGFyYW1zLT5kZXFfcGlwZWxpbmVfZGVwdGg7 CisJCQllbnFfdGggPSBmbWFuX2dldF9xbWlfZW5xX3RoKGZtYW5fcmcucW1pX3JnKTsKKwkJCS8q IGlmIGVucV90aCBpcyB0b28gYmlnLCB3ZSByZWR1Y2UgaXQgdG8gdGhlIG1heCB2YWx1ZQorCQkJ ICogdGhhdCBpcyBzdGlsbCAwCisJCQkgKi8KKwkJCWlmIChlbnFfdGggPj0KKwkJCSAgICAocF9m bS0+aW50Zy0+cW1pX21heF9udW1fb2ZfdG51bXMgLQorCQkJICAgICBwX2ZtLT5wX2ZtX3N0YXRl X3N0cnVjdC0+CisJCQkgICAgIGFjY3VtdWxhdGVkX251bV9vZl9kZXFfdG51bXMpKSB7CisJCQkJ ZW5xX3RoID0gKHVpbnQ4X3QpKAorCQkJCQlwX2ZtLT5pbnRnLT4KKwkJCQkJCXFtaV9tYXhfbnVt X29mX3RudW1zIC0KKwkJCQkJcF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPgorCQkJCQlhY2N1bXVs YXRlZF9udW1fb2ZfZGVxX3RudW1zIC0gMSk7CisJCQkJZm1hbl9zZXRfcW1pX2VucV90aChmbWFu X3JnLnFtaV9yZywgZW5xX3RoKTsKKwkJCX0KKworCQkJZGVxX3RoID0gZm1hbl9nZXRfcW1pX2Rl cV90aChmbWFuX3JnLnFtaV9yZyk7CisJCQkvKiBpZiBkZXFfdGggaXMgdG9vIHNtYWxsLCB3ZSBl bmxhcmdlIGl0IHRvIHRoZSBtaW4KKwkJCSAqIHZhbHVlIHRoYXQgaXMgc3RpbGwgMC4KKwkJCSAq IGRlcFRoIG1heSBub3QgYmUgbGFyZ2VyIHRoYW4gNjMKKwkJCSAqIChwX2ZtLT5pbnRnLT5xbWlf bWF4X251bV9vZl90bnVtcy0xKS4KKwkJCSAqLworCQkJaWYgKChkZXFfdGggPD0KKwkJCQlwX2Zt LT5wX2ZtX3N0YXRlX3N0cnVjdC0+CisJCQkJCQlhY2N1bXVsYXRlZF9udW1fb2ZfZGVxX3RudW1z KSAmJgorCQkJCShkZXFfdGggPAorCQkJCQlwX2ZtLT5pbnRnLT4KKwkJCQkJCXFtaV9tYXhfbnVt X29mX3RudW1zIC0gMSkpIHsKKwkJCQkJZGVxX3RoID0gKHVpbnQ4X3QpKHBfZm0tPgorCQkJCQkJ ICBwX2ZtX3N0YXRlX3N0cnVjdC0+CisJCQkJCQkgIGFjY3VtdWxhdGVkX251bV9vZl9kZXFfdG51 bXMKKwkJCQkJCSAgKyAxKTsKKwkJCQlmbWFuX3NldF9xbWlfZGVxX3RoKGZtYW5fcmcucW1pX3Jn LCBkZXFfdGgpOworCQkJfQorCQl9CisjaWZkZWYgRk1fTE9XX0VORF9SRVNUUklDVElPTgorCWlm IChwX2ZtLT5wX2ZtX3N0YXRlX3N0cnVjdC0+cmV2X2luZm8ubWFqb3JfcmV2ID09IDB4NCkgewor CQlpZiAoKHBvcnRfaWQgPT0gMHgxKSB8fCAocG9ydF9pZCA9PSAweDI5KSkgeworCQkJaWYgKHBf Zm0tPnBfZm1fc3RhdGVfc3RydWN0LT5sb3dfZW5kX3Jlc3RyaWN0aW9uKSB7CisJCQkJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZShwX2ZtLT5zcGlubG9jaywKKwkJCQkJCSAgICAgICBpbnRfZmxhZ3Mp OworCQkJCXByX2VycigiT1AjMCBjYW4ndCB3b3JrIHdpdGggVHggUG9ydDFcbiIpOworCQkJCXJl dHVybiAtRUFHQUlOOworCQkJfQorCQkJcF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPmxvd19lbmRf cmVzdHJpY3Rpb24gPSB0cnVlOworCQkJfQorCQl9CisjZW5kaWYgLyogRk1fTE9XX0VORF9SRVNU UklDVElPTiAqLworCisJZXJyID0gZm1fc2V0X3NpemVfb2ZfZmlmbyhwX2ZtLAorCQkJCSAgcF9w b3J0X3BhcmFtcy0+cG9ydF9pZCwKKwkJCQkgICZwX3BvcnRfcGFyYW1zLT5zaXplX29mX2ZpZm8s CisJCQkJICAmcF9wb3J0X3BhcmFtcy0+ZXh0cmFfc2l6ZV9vZl9maWZvLCB0cnVlKTsKKwlpZiAo ZXJyKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocF9mbS0+c3BpbmxvY2ssIGludF9mbGFn cyk7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gZm1fc2V0X251bV9vZl9vcGVuX2RtYXMo cF9mbSwKKwkJCQkgICAgICBwX3BvcnRfcGFyYW1zLT5wb3J0X2lkLAorCQkJCSAgICAgICZwX3Bv cnRfcGFyYW1zLT5udW1fb2Zfb3Blbl9kbWFzLAorCQkJCSAgICAgICZwX3BvcnRfcGFyYW1zLT5u dW1fb2ZfZXh0cmFfb3Blbl9kbWFzLAorCQkJCSAgICAgIHRydWUpOworCWlmIChlcnIpIHsKKwkJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShwX2ZtLT5zcGlubG9jaywKKwkJCQkgICAgICAgKHVuc2ln bmVkIGxvbmcpaW50X2ZsYWdzKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlmbWFuX3NldF9saW9k bl9wZXJfcG9ydCgmZm1hbl9yZywKKwkJCQlwb3J0X2lkLAorCQkJCXBfcG9ydF9wYXJhbXMtPmxp b2RuX2Jhc2UsCisJCQkJcF9wb3J0X3BhcmFtcy0+bGlvZG5fb2Zmc2V0KTsKKworCWlmIChwX2Zt LT5wX2ZtX3N0YXRlX3N0cnVjdC0+cmV2X2luZm8ubWFqb3JfcmV2IDwgNikKKwkJZm1hbl9zZXRf b3JkZXJfcmVzdG9yYXRpb25fcGVyX3BvcnQoZm1hbl9yZy5mcG1fcmcsCisJCQkJCQkgICAgcG9y dF9pZCwKKwkJCQkJCSAgICAhISgocF9wb3J0X3BhcmFtcy0+CisJCQkJCQkJIHBvcnRfdHlwZSA9 PQorCQkJCQkJCSBGTV9QT1JUX1RZUEVfUlgpKSk7CisKKwlIV19QT1JUX0lEX1RPX1NXX1BPUlRf SUQocF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPnJldl9pbmZvLm1ham9yX3JldiwKKwkJCQkgbWFj X2lkLAorCQkJCSBwb3J0X2lkKTsKKworCWlmIChwX3BvcnRfcGFyYW1zLT5tYXhfZnJhbWVfbGVu Z3RoID49CisJICAgIHBfZm0tPnBfZm1fc3RhdGVfc3RydWN0LT5tYWNfbWF4X2ZyYW1lX2xlbmd0 aHNbbWFjX2lkXSkgeworCQlwX2ZtLT5wX2ZtX3N0YXRlX3N0cnVjdC0+cG9ydF9tYXhfZnJhbWVf bGVuZ3Roc1ttYWNfaWRdID0KKwkJCQkJcF9wb3J0X3BhcmFtcy0+bWF4X2ZyYW1lX2xlbmd0aDsK Kwl9IGVsc2UgeworCQlwcl93YXJuKCJQb3J0IG1heF9mcmFtZV9sZW5ndGggaXMgc21hbGxlciB0 aGFuIE1BQyBjdXJyZW50IE1UVVxuIik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocF9mbS0+ c3BpbmxvY2ssCisJCQkJICAgICAgICh1bnNpZ25lZCBsb25nKWludF9mbGFncyk7CisJCXJldHVy biAtRURPTTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKHBfZm0tPnNwaW5sb2NrLCAo dW5zaWduZWQgbG9uZylpbnRfZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZm1fZnJl ZV9wb3J0X3BhcmFtcyh2b2lkICpoX2ZtLAorCQkJIHN0cnVjdCBmbV9pbnRlcl9tb2R1bGVfcG9y dF9mcmVlX3BhcmFtc190CisJCQkgKnBfcG9ydF9wYXJhbXMpCit7CisJc3RydWN0IGZtX3QgKnBf Zm0gPSAoc3RydWN0IGZtX3QgKiloX2ZtOworCXVuc2lnbmVkIGxvbmcgaW50X2ZsYWdzOworCXVp bnQ4X3QgcG9ydF9pZCA9IHBfcG9ydF9wYXJhbXMtPnBvcnRfaWQ7CisJdWludDhfdCBudW1fb2Zf dGFza3MsIG51bV9vZl9kbWFzLCBtYWNfaWQ7CisJdWludDE2X3Qgc2l6ZV9vZl9maWZvOworCXN0 cnVjdCBmbWFuX3FtaV9yZWdzIF9faW9tZW0gKnFtaV9yZyA9IHBfZm0tPnBfZm1fcW1pX3JlZ3M7 CisJc3RydWN0IGZtYW5fYm1pX3JlZ3MgX19pb21lbSAqYm1pX3JnID0gcF9mbS0+cF9mbV9ibWlf cmVnczsKKworCUFTU0VSVChJTl9SQU5HRSgxLCBwb3J0X2lkLCA2MykpOworCisJc3Bpbl9sb2Nr X2lycXNhdmUocF9mbS0+c3BpbmxvY2ssIGludF9mbGFncyk7CisKKwlwX2ZtLT5wX2ZtX3N0YXRl X3N0cnVjdC0+cG9ydHNfdHlwZXNbcG9ydF9pZF0gPQorCSAgICBGTV9QT1JUX1RZUEVfRFVNTVk7 CisKKwkvKiBmcmVlIG51bV9vZl90YXNrcyAqLworCW51bV9vZl90YXNrcyA9IGZtYW5fZ2V0X251 bV9vZl90YXNrcyhibWlfcmcsIHBvcnRfaWQpOworCUFTU0VSVChwX2ZtLT5wX2ZtX3N0YXRlX3N0 cnVjdC0+YWNjdW11bGF0ZWRfbnVtX29mX3Rhc2tzID49CisJCSAgICBudW1fb2ZfdGFza3MpOwor CXBfZm0tPnBfZm1fc3RhdGVfc3RydWN0LT5hY2N1bXVsYXRlZF9udW1fb2ZfdGFza3MgLT0gbnVt X29mX3Rhc2tzOworCisJLyogZnJlZSBudW1fb2Zfb3Blbl9kbWFzICovCisJbnVtX29mX2RtYXMg PSBmbWFuX2dldF9udW1fb2ZfZG1hcyhibWlfcmcsIHBvcnRfaWQpOworCUFTU0VSVChwX2ZtLT5w X2ZtX3N0YXRlX3N0cnVjdC0+YWNjdW11bGF0ZWRfbnVtX29mX29wZW5fZG1hcyA+PQorCQkgICAg bnVtX29mX2RtYXMpOworCXBfZm0tPnBfZm1fc3RhdGVfc3RydWN0LT5hY2N1bXVsYXRlZF9udW1f b2Zfb3Blbl9kbWFzIC09IG51bV9vZl9kbWFzOworCisjaWZkZWYgRk1fSEFTX1RPVEFMX0RNQVMK KwlpZiAocF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPnJldl9pbmZvLm1ham9yX3JldiA8IDYpIHsK KwkJLyogdXBkYXRlIHRvdGFsIG51bSBvZiBETUEncyB3aXRoIGNvbW1pdHRlZCBudW1iZXIKKwkJ ICogb2Ygb3BlbiBETUFTLCBhbmQgbWF4IHVuY29tbWl0dGVkIHBvb2wuCisJCSAqLworCQlmbWFu X3NldF9udW1fb2Zfb3Blbl9kbWFzKGJtaV9yZywKKwkJCQkJICBwb3J0X2lkLAorCQkJCQkgIDEs CisJCQkJCSAgMCwKKwkJCQkJICAodWludDhfdCkKKwkJCQkJICAocF9mbS0+cF9mbV9zdGF0ZV9z dHJ1Y3QtPgorCQkJCQkgICBhY2N1bXVsYXRlZF9udW1fb2Zfb3Blbl9kbWFzICsKKwkJCQkJCSAg ICAgcF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPgorCQkJCQkJICAgICBleHRyYV9vcGVuX2RtYXNf cG9vbF9zaXplCisJCQkJCQkgICAgICkpOworCX0KKyNlbmRpZiAvKiBGTV9IQVNfVE9UQUxfRE1B UyAqLworCisJLyogZnJlZSBzaXplX29mX2ZpZm8gKi8KKwlzaXplX29mX2ZpZm8gPSBmbWFuX2dl dF9zaXplX29mX2ZpZm8oYm1pX3JnLCBwb3J0X2lkKTsKKwlBU1NFUlQocF9mbS0+cF9mbV9zdGF0 ZV9zdHJ1Y3QtPmFjY3VtdWxhdGVkX2ZpZm9fc2l6ZSA+PQorCQkoc2l6ZV9vZl9maWZvICogQk1J X0ZJRk9fVU5JVFMpKTsKKwlwX2ZtLT5wX2ZtX3N0YXRlX3N0cnVjdC0+YWNjdW11bGF0ZWRfZmlm b19zaXplIC09CisJCShzaXplX29mX2ZpZm8gKiBCTUlfRklGT19VTklUUyk7CisKKyNpZmRlZiBG TV9RTUlfTk9fREVRX09QVElPTlNfU1VQUE9SVAorCWlmIChwX2ZtLT5wX2ZtX3N0YXRlX3N0cnVj dC0+cmV2X2luZm8ubWFqb3JfcmV2ICE9IDQpCisjZW5kaWYgLyogRk1fUU1JX05PX0RFUV9PUFRJ T05TX1NVUFBPUlQgKi8KKwkJLyogZm9yIHRyYW5zbWl0Jk8vSCBwb3J0cyAqLworCQlpZiAocF9w b3J0X3BhcmFtcy0+cG9ydF90eXBlICE9IEZNX1BPUlRfVFlQRV9SWCkgeworCQkJdWludDhfdCBl bnFfdGg7CisJCQl1aW50OF90IGRlcV90aDsKKworCQkJLyogdXBkYXRlIHFtaSBFTlEvREVRIHRo cmVzaG9sZCAqLworCQkJcF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPmFjY3VtdWxhdGVkX251bV9v Zl9kZXFfdG51bXMgLT0KKwkJCSAgICBwX3BvcnRfcGFyYW1zLT5kZXFfcGlwZWxpbmVfZGVwdGg7 CisKKwkJCS8qIHBfZm0tPnBfZm1fc3RhdGVfc3RydWN0LT4KKwkJCSAqIGFjY3VtdWxhdGVkX251 bV9vZl9kZXFfdG51bXMgaXMgbm93IHNtYWxsZXIsCisJCQkgKiBzbyB3ZSBjYW4gZW5sYXJnZSBl bnFfdGgKKwkJCSAqLworCQkJZW5xX3RoID0KKwkJCSAgICAodWludDhfdCkocF9mbS0+aW50Zy0+ cW1pX21heF9udW1fb2ZfdG51bXMgLQorCQkJCSAgICAgICBwX2ZtLT5wX2ZtX3N0YXRlX3N0cnVj dC0+CisJCQkJICAgICAgIGFjY3VtdWxhdGVkX251bV9vZl9kZXFfdG51bXMgLSAxKTsKKworCQkJ LyogcF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPgorCQkJICogYWNjdW11bGF0ZWRfbnVtX29mX2Rl cV90bnVtcyBpcyBub3cgc21hbGxlciwKKwkJCSAqIHNvIHdlIGNhbiByZWR1Y2UgZGVxX3RoCisJ CQkgKi8KKwkJCWRlcV90aCA9CisJCQkgICAgKHVpbnQ4X3QpKHBfZm0tPnBfZm1fc3RhdGVfc3Ry dWN0LT4KKwkJCQkgICAgICAgYWNjdW11bGF0ZWRfbnVtX29mX2RlcV90bnVtcyArIDEpOworCisJ CQlmbWFuX3NldF9xbWlfZW5xX3RoKHFtaV9yZywgZW5xX3RoKTsKKwkJCWZtYW5fc2V0X3FtaV9k ZXFfdGgocW1pX3JnLCBkZXFfdGgpOworCQl9CisKKwlIV19QT1JUX0lEX1RPX1NXX1BPUlRfSUQo cF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPnJldl9pbmZvLm1ham9yX3JldiwKKwkJCQkgbWFjX2lk LAorCQkJCSBwb3J0X2lkKTsKKworCXBfZm0tPnBfZm1fc3RhdGVfc3RydWN0LT5wb3J0X21heF9m cmFtZV9sZW5ndGhzW21hY19pZF0gPSAwOworCisjaWZkZWYgRk1fTE9XX0VORF9SRVNUUklDVElP TgorCWlmIChwX2ZtLT5wX2ZtX3N0YXRlX3N0cnVjdC0+cmV2X2luZm8ubWFqb3JfcmV2ID09IDB4 NCkgeworCQlpZiAoKHBvcnRfaWQgPT0gMHgxKSB8fCAocG9ydF9pZCA9PSAweDI5KSkKKwkJCXBf Zm0tPnBfZm1fc3RhdGVfc3RydWN0LT5sb3dfZW5kX3Jlc3RyaWN0aW9uID0gZmFsc2U7CisJfQor I2VuZGlmIC8qIEZNX0xPV19FTkRfUkVTVFJJQ1RJT04gKi8KKwlzcGluX3VubG9ja19pcnFyZXN0 b3JlKHBfZm0tPnNwaW5sb2NrLCBpbnRfZmxhZ3MpOworfQorCitpbnQgZm1fc2V0X3NpemVfb2Zf Zmlmbyh2b2lkICpoX2ZtLAorCQkJdWludDhfdCBwb3J0X2lkLAorCQkJdWludDMyX3QgKnBfc2l6 ZV9vZl9maWZvLAorCQkJdWludDMyX3QgKnBfZXh0cmFfc2l6ZV9vZl9maWZvLAorCQkJYm9vbCBp bml0aWFsX2NvbmZpZykKK3sKKwlzdHJ1Y3QgZm1fdCAqcF9mbSA9IChzdHJ1Y3QgZm1fdCAqKWhf Zm07CisJc3RydWN0IGZtYW5fYm1pX3JlZ3MgX19pb21lbSAqYm1pX3JnID0gcF9mbS0+cF9mbV9i bWlfcmVnczsKKwl1aW50MzJfdCBzaXplX29mX2ZpZm8gPSAqcF9zaXplX29mX2ZpZm8sIGV4dHJh X3NpemVfb2ZfZmlmbyA9CisJICAgICpwX2V4dHJhX3NpemVfb2ZfZmlmbzsKKwl1aW50MTZfdCBj dXJyZW50X3ZhbCA9IDAsIGN1cnJlbnRfZXh0cmFfdmFsID0gMDsKKworCUFTU0VSVChJTl9SQU5H RSgxLCBwb3J0X2lkLCA2MykpOworCisJaWYgKCFpbml0aWFsX2NvbmZpZykgeworCQkvKiAhaW5p dGlhbF9jb25maWcgLSBydW50aW1lIGNoYW5nZSBvZiBleGlzdGluZyB2YWx1ZS4KKwkJICogLSBy ZWFkIHRoZSBjdXJyZW50IEZJRk8gYW5kIGV4dHJhIEZJRk8gc2l6ZQorCQkgKi8KKwkJY3VycmVu dF9leHRyYV92YWwgPQorCQkgICAgZm1hbl9nZXRfc2l6ZV9vZl9leHRyYV9maWZvKGJtaV9yZywg cG9ydF9pZCk7CisJCWN1cnJlbnRfdmFsID0gZm1hbl9nZXRfc2l6ZV9vZl9maWZvKGJtaV9yZywg cG9ydF9pZCk7CisJfQorCisJaWYgKGV4dHJhX3NpemVfb2ZfZmlmbyA+IGN1cnJlbnRfZXh0cmFf dmFsKSB7CisJCWlmIChleHRyYV9zaXplX29mX2ZpZm8gJiYKKwkJICAgICFwX2ZtLT5wX2ZtX3N0 YXRlX3N0cnVjdC0+ZXh0cmFfZmlmb19wb29sX3NpemUpCisJCQkvKiBpZiB0aGlzIGlzIHRoZSBm aXJzdCB0aW1lIGEgcG9ydAorCQkJICogcmVxdWlyZXMgZXh0cmFfZmlmb19wb29sX3NpemUsCisJ CQkgKiB0aGUgdG90YWwgZXh0cmFfZmlmb19wb29sX3NpemUKKwkJCSAqIG11c3QgYmUgaW5pdGlh bGl6ZWQgdG8gMSBidWZmZXIgcGVyIHBvcnQKKwkJCSAqLworCQkJcF9mbS0+cF9mbV9zdGF0ZV9z dHJ1Y3QtPmV4dHJhX2ZpZm9fcG9vbF9zaXplID0KKwkJCXBfZm0tPmludGctPm51bV9vZl9yeF9w b3J0cyAqIEJNSV9GSUZPX1VOSVRTOworCisJCXBfZm0tPnBfZm1fc3RhdGVfc3RydWN0LT5leHRy YV9maWZvX3Bvb2xfc2l6ZSA9CisJCQltYXgocF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPmV4dHJh X2ZpZm9fcG9vbF9zaXplLAorCQkJICAgIGV4dHJhX3NpemVfb2ZfZmlmbyk7CisJfQorCisJLyog Y2hlY2sgdGhhdCB0aGVyZSBhcmUgZW5vdWdoIHVuY29tbWl0dGVkIGZpZm8gc2l6ZSAqLworCWlm ICgocF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPmFjY3VtdWxhdGVkX2ZpZm9fc2l6ZSAtIGN1cnJl bnRfdmFsICsKKwkgICAgIHNpemVfb2ZfZmlmbykgPgorCSAgICAocF9mbS0+cF9mbV9zdGF0ZV9z dHJ1Y3QtPnRvdGFsX2ZpZm9fc2l6ZSAtCisJICAgICBwX2ZtLT5wX2ZtX3N0YXRlX3N0cnVjdC0+ ZXh0cmFfZmlmb19wb29sX3NpemUpKSB7CisJCXByX2VycigiUmVxdWVzdGVkIGZpZm8gc2l6ZSBh bmQgZXh0cmEgc2l6ZSBleGNlZWQgdG90YWwgRklGTyBzaXplLlxuIik7CisJCXJldHVybiAtRUFH QUlOOworCX0KKwkvKiB1cGRhdGUgYWNjdW11bGF0ZWQgKi8KKwlBU1NFUlQocF9mbS0+cF9mbV9z dGF0ZV9zdHJ1Y3QtPmFjY3VtdWxhdGVkX2ZpZm9fc2l6ZSA+PQorCQkgICAgY3VycmVudF92YWwp OworCXBfZm0tPnBfZm1fc3RhdGVfc3RydWN0LT5hY2N1bXVsYXRlZF9maWZvX3NpemUgLT0gY3Vy cmVudF92YWw7CisJcF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPmFjY3VtdWxhdGVkX2ZpZm9fc2l6 ZSArPSBzaXplX29mX2ZpZm87CisJZm1hbl9zZXRfc2l6ZV9vZl9maWZvKGJtaV9yZywgcG9ydF9p ZCwgc2l6ZV9vZl9maWZvLAorCQkJICAgICAgZXh0cmFfc2l6ZV9vZl9maWZvKTsKKworCXJldHVy biAwOworfQorCitpbnQgZm1fc2V0X251bV9vZl90YXNrcyh2b2lkICpoX2ZtLAorCQkJdWludDhf dCBwb3J0X2lkLAorCQkJdWludDhfdCAqcF9udW1fb2ZfdGFza3MsCisJCQl1aW50OF90ICpwX251 bV9vZl9leHRyYV90YXNrcywgYm9vbCBpbml0aWFsX2NvbmZpZykKK3sKKwlzdHJ1Y3QgZm1fdCAq cF9mbSA9IChzdHJ1Y3QgZm1fdCAqKWhfZm07CisJc3RydWN0IGZtYW5fYm1pX3JlZ3MgX19pb21l bSAqYm1pX3JnID0gcF9mbS0+cF9mbV9ibWlfcmVnczsKKwl1aW50OF90IGN1cnJlbnRfdmFsID0g MCwgY3VycmVudF9leHRyYV92YWwgPSAwLCBudW1fb2ZfdGFza3MgPQorCSAgICAqcF9udW1fb2Zf dGFza3MsIG51bV9vZl9leHRyYV90YXNrcyA9ICpwX251bV9vZl9leHRyYV90YXNrczsKKworCUFT U0VSVChJTl9SQU5HRSgxLCBwb3J0X2lkLCA2MykpOworCisJaWYgKCFpbml0aWFsX2NvbmZpZykg eworCQkvKiAhaW5pdGlhbF9jb25maWcgLSBydW50aW1lIGNoYW5nZSBvZiBleGlzdGluZyB2YWx1 ZS4KKwkJICogLSByZWFkIHRoZSBjdXJyZW50IG51bWJlciBvZiB0YXNrcworCQkgKi8KKwkJY3Vy cmVudF92YWwgPSBmbWFuX2dldF9udW1fb2ZfdGFza3MoYm1pX3JnLCBwb3J0X2lkKTsKKwkJY3Vy cmVudF9leHRyYV92YWwgPQorCQkgICAgZm1hbl9nZXRfbnVtX2V4dHJhX3Rhc2tzKGJtaV9yZywg cG9ydF9pZCk7CisJfQorCisJaWYgKG51bV9vZl9leHRyYV90YXNrcyA+IGN1cnJlbnRfZXh0cmFf dmFsKQorCQlwX2ZtLT5wX2ZtX3N0YXRlX3N0cnVjdC0+ZXh0cmFfdGFza3NfcG9vbF9zaXplID0K KwkJKHVpbnQ4X3QpbWF4KHBfZm0tPnBfZm1fc3RhdGVfc3RydWN0LT5leHRyYV90YXNrc19wb29s X3NpemUsCisJCQkgICAgIG51bV9vZl9leHRyYV90YXNrcyk7CisKKwkvKiBjaGVjayB0aGF0IHRo ZXJlIGFyZSBlbm91Z2ggdW5jb21taXR0ZWQgdGFza3MgKi8KKwlpZiAoKHBfZm0tPnBfZm1fc3Rh dGVfc3RydWN0LT5hY2N1bXVsYXRlZF9udW1fb2ZfdGFza3MgLSBjdXJyZW50X3ZhbCArCisJICAg ICBudW1fb2ZfdGFza3MpID4KKwkgICAgKHBfZm0tPnBfZm1fc3RhdGVfc3RydWN0LT50b3RhbF9u dW1fb2ZfdGFza3MgLQorCSAgICAgcF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPmV4dHJhX3Rhc2tz X3Bvb2xfc2l6ZSkpIHsKKwkJcHJfZXJyKCJSZXF1ZXN0ZWQgbnVtX29mX3Rhc2tzIGFuZCBleHRy YSB0YXNrcyBwb29sIGZvciBmbSVkIGV4Y2VlZCB0b3RhbCBudW1fb2ZfdGFza3MuXG4iLAorCQkg ICAgICAgcF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPmZtX2lkKTsKKwkJcmV0dXJuIC1FQUdBSU47 CisJfQorCUFTU0VSVChwX2ZtLT5wX2ZtX3N0YXRlX3N0cnVjdC0+CisJCSAgICBhY2N1bXVsYXRl ZF9udW1fb2ZfdGFza3MgPj0KKwkJICAgIGN1cnJlbnRfdmFsKTsKKwkvKiB1cGRhdGUgYWNjdW11 bGF0ZWQgKi8KKwlwX2ZtLT5wX2ZtX3N0YXRlX3N0cnVjdC0+YWNjdW11bGF0ZWRfbnVtX29mX3Rh c2tzIC09CisJY3VycmVudF92YWw7CisJcF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPmFjY3VtdWxh dGVkX251bV9vZl90YXNrcyArPQorCW51bV9vZl90YXNrczsKKwlmbWFuX3NldF9udW1fb2ZfdGFz a3MoYm1pX3JnLCBwb3J0X2lkLCBudW1fb2ZfdGFza3MsCisJCQkgICAgICBudW1fb2ZfZXh0cmFf dGFza3MpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBmbV9zZXRfbnVtX29mX29wZW5fZG1hcyh2 b2lkICpoX2ZtLAorCQkJICAgIHVpbnQ4X3QgcG9ydF9pZCwKKwkJCSAgICB1aW50OF90ICpwX251 bV9vZl9vcGVuX2RtYXMsCisJCQkgICAgdWludDhfdCAqcF9udW1fb2ZfZXh0cmFfb3Blbl9kbWFz LAorCQkJICAgIGJvb2wgaW5pdGlhbF9jb25maWcpCit7CisJc3RydWN0IGZtX3QgKnBfZm0gPSAo c3RydWN0IGZtX3QgKiloX2ZtOworCXN0cnVjdCBmbWFuX2JtaV9yZWdzIF9faW9tZW0gKmJtaV9y ZyA9IHBfZm0tPnBfZm1fYm1pX3JlZ3M7CisJdWludDhfdCBudW1fb2Zfb3Blbl9kbWFzID0gKnBf bnVtX29mX29wZW5fZG1hcywKKwludW1fb2ZfZXh0cmFfb3Blbl9kbWFzID0gKnBfbnVtX29mX2V4 dHJhX29wZW5fZG1hczsKKwl1aW50OF90IHRvdGFsX251bV9kbWFzID0gMCwgY3VycmVudF92YWwg PSAwLCBjdXJyZW50X2V4dHJhX3ZhbCA9IDA7CisKKwlBU1NFUlQoSU5fUkFOR0UoMSwgcG9ydF9p ZCwgNjMpKTsKKworCWlmICghaW5pdGlhbF9jb25maWcpIHsKKwkJLyogIWluaXRpYWxfY29uZmln IC0gcnVudGltZSBjaGFuZ2Ugb2YgZXhpc3RpbmcgdmFsdWUuCisJCSogLSByZWFkIHRoZSBjdXJy ZW50IG51bWJlciBvZiBvcGVuIERtYSdzCisJCSovCisJCWN1cnJlbnRfZXh0cmFfdmFsID0KKwkJ ICAgIGZtYW5fZ2V0X251bV9leHRyYV9kbWFzKGJtaV9yZywgcG9ydF9pZCk7CisJCWN1cnJlbnRf dmFsID0gZm1hbl9nZXRfbnVtX29mX2RtYXMoYm1pX3JnLCBwb3J0X2lkKTsKKwl9CisKKwkvKiBp dCdzIGlsbGVnYWwgdG8gYmUgaW4gYSBzdGF0ZSB3aGVyZSB0aGlzIGlzCisJICogbm90IHRoZSBm aXJzdCBzZXQgYW5kIG5vIHZhbHVlIGlzIHNwZWNpZmllZAorCSAqLworCUFTU0VSVChpbml0aWFs X2NvbmZpZyB8fCBudW1fb2Zfb3Blbl9kbWFzKTsKKwlpZiAoIW51bV9vZl9vcGVuX2RtYXMpIHsK KwkJLyogIW51bV9vZl9vcGVuX2RtYXMgLSBmaXJzdCBjb25maWd1cmF0aW9uIGFjY29yZGluZwor CQkgKiB0byB2YWx1ZXMgaW4gcmVncy4tIHJlYWQgdGhlIGN1cnJlbnQgbnVtYmVyIG9mCisJCSAq IG9wZW4gRG1hJ3MKKwkJICovCisJCWN1cnJlbnRfZXh0cmFfdmFsID0KKwkJICAgIGZtYW5fZ2V0 X251bV9leHRyYV9kbWFzKGJtaV9yZywgcG9ydF9pZCk7CisJCWN1cnJlbnRfdmFsID0gZm1hbl9n ZXRfbnVtX29mX2RtYXMoYm1pX3JnLCBwb3J0X2lkKTsKKwkJLyogVGhpcyBpcyB0aGUgZmlyc3Qg Y29uZmlndXJhdGlvbiBhbmQgdXNlciBkaWQgbm90CisJCSAqIHNwZWNpZnkgdmFsdWUgKCFudW1f b2Zfb3Blbl9kbWFzKSwgcmVzZXQgdmFsdWVzIHdpbGwgYmUgdXNlZAorCQkgKiBhbmQgd2UganVz dCBzYXZlIHRoZXNlIHZhbHVlcyBmb3IgcmVzb3VyY2UgbWFuYWdlbWVudAorCQkgKi8KKwkJcF9m bS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPmV4dHJhX29wZW5fZG1hc19wb29sX3NpemUgPQorCQkJKHVp bnQ4X3QpbWF4KHBfZm0tPnBfZm1fc3RhdGVfc3RydWN0LT4KKwkJCQkgICAgIGV4dHJhX29wZW5f ZG1hc19wb29sX3NpemUsCisJCQkJICAgICBjdXJyZW50X2V4dHJhX3ZhbCk7CisJCXBfZm0tPnBf Zm1fc3RhdGVfc3RydWN0LT5hY2N1bXVsYXRlZF9udW1fb2Zfb3Blbl9kbWFzICs9CisJCWN1cnJl bnRfdmFsOworCQkqcF9udW1fb2Zfb3Blbl9kbWFzID0gY3VycmVudF92YWw7CisJCSpwX251bV9v Zl9leHRyYV9vcGVuX2RtYXMgPSBjdXJyZW50X2V4dHJhX3ZhbDsKKwkJcmV0dXJuIDA7CisJfQor CisJaWYgKG51bV9vZl9leHRyYV9vcGVuX2RtYXMgPiBjdXJyZW50X2V4dHJhX3ZhbCkKKwkJcF9m bS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPmV4dHJhX29wZW5fZG1hc19wb29sX3NpemUgPQorCQkgICAg KHVpbnQ4X3QpbWF4KHBfZm0tPnBfZm1fc3RhdGVfc3RydWN0LT4KKwkJCQkgZXh0cmFfb3Blbl9k bWFzX3Bvb2xfc2l6ZSwKKwkJCQkgbnVtX29mX2V4dHJhX29wZW5fZG1hcyk7CisKKyNpZmRlZiBG TV9IQVNfVE9UQUxfRE1BUworCWlmICgocF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPnJldl9pbmZv Lm1ham9yX3JldiA8IDYpICYmCisJICAgIChwX2ZtLT5wX2ZtX3N0YXRlX3N0cnVjdC0+YWNjdW11 bGF0ZWRfbnVtX29mX29wZW5fZG1hcyAtCisJICAgICBjdXJyZW50X3ZhbCArIG51bV9vZl9vcGVu X2RtYXMgPgorCSAgICAgcF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPm1heF9udW1fb2Zfb3Blbl9k bWFzKSkgeworCQlwcl9lcnIoIlJlcXVlc3RlZCBudW1fb2Zfb3Blbl9kbWFzIGZvciBmbSVkIGV4 Y2VlZHMgdG90YWwgbnVtX29mX29wZW5fZG1hcy5cbiIsCisJCSAgICAgICBwX2ZtLT5wX2ZtX3N0 YXRlX3N0cnVjdC0+Zm1faWQpOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisjZWxzZQorCWlmICgo cF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPnJldl9pbmZvLm1ham9yX3JldiA+PSA2KSAmJgorCSAg ICAjaWZkZWYgRk1fSEVBVllfVFJBRkZJQ19TRVFVRU5DRVJfSEFOR19FUlJBVEFfRk1BTl9BMDA2 OTgxCisJICAgICEoKHBfZm0tPnBfZm1fc3RhdGVfc3RydWN0LT5yZXZfaW5mby5tYWpvcl9yZXYg PT0gNikgJiYKKwkgICAgICAocF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPnJldl9pbmZvLm1pbm9y X3JldiA9PSAwKSkgJiYKKyNlbmRpZiAvKiBGTV9IRUFWWV9UUkFGRklDX1NFUVVFTkNFUl9IQU5H X0VSUkFUQV9GTUFOX0EwMDY5ODEgKi8KKwkgICAgKHBfZm0tPnBfZm1fc3RhdGVfc3RydWN0LT5h Y2N1bXVsYXRlZF9udW1fb2Zfb3Blbl9kbWFzIC0KKwkgICAgIGN1cnJlbnRfdmFsICsgbnVtX29m X29wZW5fZG1hcyA+CisJICAgICBwX2ZtLT5pbnRnLT5kbWFfdGhyZXNoX21heF9jb21tcSArIDEp KSB7CisJCXByX2VycigiUmVxdWVzdGVkIG51bV9vZl9vcGVuX2RtYXMgZm9yIGZtJWQgZXhjZWVk cyBETUEgQ29tbWFuZCBxdWV1ZSAoJWQpXG4iLAorCQkgICAgICAgcF9mbS0+cF9mbV9zdGF0ZV9z dHJ1Y3QtPmZtX2lkLAorCQkgICAgICAgcF9mbS0+aW50Zy0+ZG1hX3RocmVzaF9tYXhfY29tbXEg KyAxKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorI2VuZGlmIC8qIEZNX0hBU19UT1RBTF9ETUFT ICovCisJZWxzZSB7CisJCUFTU0VSVChwX2ZtLT5wX2ZtX3N0YXRlX3N0cnVjdC0+CisJCQkgICAg YWNjdW11bGF0ZWRfbnVtX29mX29wZW5fZG1hcyA+PQorCQkJICAgIGN1cnJlbnRfdmFsKTsKKwkJ LyogdXBkYXRlIGFjdW1tdWxhdGVkICovCisJCXBfZm0tPnBfZm1fc3RhdGVfc3RydWN0LT5hY2N1 bXVsYXRlZF9udW1fb2Zfb3Blbl9kbWFzIC09CisJCWN1cnJlbnRfdmFsOworCQlwX2ZtLT5wX2Zt X3N0YXRlX3N0cnVjdC0+YWNjdW11bGF0ZWRfbnVtX29mX29wZW5fZG1hcyArPQorCQkgICAgbnVt X29mX29wZW5fZG1hczsKKworI2lmZGVmIEZNX0hBU19UT1RBTF9ETUFTCisJCWlmIChwX2ZtLT5w X2ZtX3N0YXRlX3N0cnVjdC0+cmV2X2luZm8ubWFqb3JfcmV2IDwgNikKKwkJCXRvdGFsX251bV9k bWFzID0KKwkJCSAgICAodWludDhfdCkocF9mbS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPgorCQkJCSAg ICAgICBhY2N1bXVsYXRlZF9udW1fb2Zfb3Blbl9kbWFzICsKKwkJCQkgICAgICAgcF9mbS0+cF9m bV9zdGF0ZV9zdHJ1Y3QtPgorCQkJCSAgICAgICBleHRyYV9vcGVuX2RtYXNfcG9vbF9zaXplKTsK KyNlbmRpZiAvKiBGTV9IQVNfVE9UQUxfRE1BUyAqLworCQlmbWFuX3NldF9udW1fb2Zfb3Blbl9k bWFzKGJtaV9yZywKKwkJCQkJICBwb3J0X2lkLAorCQkJCQkgIG51bV9vZl9vcGVuX2RtYXMsCisJ CQkJCSAgbnVtX29mX2V4dHJhX29wZW5fZG1hcywKKwkJCQkJICB0b3RhbF9udW1fZG1hcyk7CisJ fQorCisJcmV0dXJuIDA7Cit9CisKIGludCBmbV9yZXNldF9tYWModm9pZCAqaF9mbSwgZW51bSBm bV9tYWNfdHlwZSB0eXBlLCB1aW50OF90IG1hY19pZCkKIHsKIAlzdHJ1Y3QgZm1fdCAqcF9mbSA9 IChzdHJ1Y3QgZm1fdCAqKWhfZm07CkBAIC05MjgsNiArMTQxNCw3IEBAIHN0YXRpYyBpbnQgaW5p dF9mbV9xbWkoc3RydWN0IGZtX3QgKnBfZm0pCiB2b2lkICpmbV9jb25maWcoc3RydWN0IGZtX3Bh cmFtc190ICpwX2ZtX3BhcmFtKQogewogCXN0cnVjdCBmbV90ICpwX2ZtOworCXVpbnQ4X3QgaTsK IAl1aW50cHRyX3QgYmFzZV9hZGRyOwogCiAJaWYgKCEoKHBfZm1fcGFyYW0tPmZpcm13YXJlLnBf Y29kZSAmJiBwX2ZtX3BhcmFtLT5maXJtd2FyZS5zaXplKSB8fApAQCAtOTUyLDYgKzE0MzksOSBA QCB2b2lkICpmbV9jb25maWcoc3RydWN0IGZtX3BhcmFtc190ICpwX2ZtX3BhcmFtKQogCS8qIElu aXRpYWxpemUgRk0gcGFyYW1ldGVycyB3aGljaCB3aWxsIGJlIGtlcHQgYnkgdGhlIGRyaXZlciAq LwogCXBfZm0tPnBfZm1fc3RhdGVfc3RydWN0LT5mbV9pZCA9IHBfZm1fcGFyYW0tPmZtX2lkOwog CisJZm9yIChpID0gMDsgaSA8IEZNX01BWF9OVU1fT0ZfSFdfUE9SVF9JRFM7IGkrKykKKwkJcF9m bS0+cF9mbV9zdGF0ZV9zdHJ1Y3QtPnBvcnRzX3R5cGVzW2ldID0gRk1fUE9SVF9UWVBFX0RVTU1Z OworCiAJLyogQWxsb2NhdGUgdGhlIEZNIGRyaXZlcidzIHBhcmFtZXRlcnMgc3RydWN0dXJlICov CiAJcF9mbS0+cF9mbV9kcnZfcGFyYW0gPSBremFsbG9jKHNpemVvZigqcF9mbS0+cF9mbV9kcnZf cGFyYW0pLAogCQkJCQkJIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRo ZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1fY29tbW9uLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9m cmVlc2NhbGUvZm1hbi9mbV9jb21tb24uaAppbmRleCA0ZmUxMmM2Li4zNzRjNDNiIDEwMDY0NAot LS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbV9jb21tb24uaAorKysg Yi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbV9jb21tb24uaApAQCAtNDEs NiArNDEsMTQgQEAKIAogI2RlZmluZSBDTFNfUExBTl9OVU1fUEVSX0dSUCAgICAgICAgICAgICAg ICAgICAgICAgIDgKIAorLyogRGVmaW5lcyB1c2VkIGZvciBtYW5pcHVsYXRpb24gQ0MgYW5kIEJN SSAqLworI2RlZmluZSBVUERBVEVfTklBX1BORU4gICAgICAgICAgICAgICAgICAgICAgICAgMHg4 MDAwMDAwMAorI2RlZmluZSBVUERBVEVfTklBX1BORE4gICAgICAgICAgICAgICAgICAgICAgICAg MHgyMDAwMDAwMAorI2RlZmluZSBVUERBVEVfRk1GUF9QUkNfV0lUSF9PTkVfUklTQ19PTkxZICAg ICAgMHgxMDAwMDAwMAorI2RlZmluZSBVUERBVEVfTklBX0ZFTkUgICAgICAgICAgICAgICAgICAg ICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBVUERBVEVfTklBX0NNTkUgICAgICAgICAgICAgICAg ICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBVUERBVEVfTklBX0ZQTkUgICAgICAgICAgICAg ICAgICAgICAgICAgMHgwMTAwMDAwMAorCiAvKiBsaXN0X29iamVjdAogICogTWFjcm8gdG8gZ2V0 IHRoZSBzdHJ1Y3QgKG9iamVjdCkgZm9yIHRoaXMgZW50cnkuCiAgKiB0eXBlICAgLSBUaGUgdHlw ZSBvZiB0aGUgc3RydWN0IChvYmplY3QpIHRoaXMgbGlzdApAQCAtNTMsNiArNjEsMTIgQEAKICNk ZWZpbmUgbGlzdF9vYmplY3QocF9saXN0LCB0eXBlLCBtZW1iZXIpIFwKICgodHlwZSAqKSgoY2hh ciAqKShwX2xpc3QpIC0gbWVtYmVyX29mZnNldCh0eXBlLCBtZW1iZXIpKSkKIAorI2RlZmluZSBG TV9MSU9ETl9PRkZTRVRfTUFTSyAgICAweDNGRgorCisvKiBOSUEgRGVzY3JpcHRpb24gKi8KKy8q IFYzIG9ubHkgKi8KKyNkZWZpbmUgTklBX0ZNX0NUTF9BQ19OT19JUEFDQ19QUkVfQk1JX0VOUV9G UkFNRSAgICAgICAgMHgwMDAwMDAyOAorCiAvKiBFbnVtIGZvciBpbnRlci1tb2R1bGUgaW50ZXJy dXB0cyByZWdpc3RyYXRpb24gKi8KIGVudW0gZm1fZXZlbnRfbW9kdWxlcyB7CiAJRk1fTU9EX1BS UyA9IDAsCQkvKiBQYXJzZXIgZXZlbnQgKi8KQEAgLTE2OCw2ICsxODIsNTkgQEAgc3RhdGljIGlu bGluZSBib29sIFRSWV9MT0NLKHNwaW5sb2NrX3QgKnNwaW5sb2NrLCB2b2xhdGlsZSBib29sICpw X2ZsYWcpCiAKICNkZWZpbmUgRk1fTElPRE5fT0ZGU0VUX01BU0sgICAgMHgzRkYKIAorLyogTklB IERlc2NyaXB0aW9uICovCisjZGVmaW5lIE5JQV9FTkdfTUFTSyAgICAgICAgICAgICAgICAweDAw N0MwMDAwCisjZGVmaW5lIE5JQV9BQ19NQVNLICAgICAgICAgICAgICAgICAweDAwMDNmZmZmCisK KyNkZWZpbmUgTklBX09SREVSX1JFU1RPUiAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUg TklBX0VOR19GTV9DVEwgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgTklBX0VOR19Q UlMgICAgICAgICAgICAgICAgIDB4MDA0NDAwMDAKKyNkZWZpbmUgTklBX0VOR19CTUkgICAgICAg ICAgICAgICAgIDB4MDA1MDAwMDAKKyNkZWZpbmUgTklBX0VOR19RTUlfRU5RICAgICAgICAgICAg IDB4MDA1NDAwMDAKKyNkZWZpbmUgTklBX0VOR19RTUlfREVRICAgICAgICAgICAgIDB4MDA1ODAw MDAKKworI2RlZmluZSBOSUFfRk1fQ1RMX0FDX0hDICAgICAgICAgICAgICAgICAgICAgICAgMHgw MDAwMDAwQworI2RlZmluZSBOSUFfRk1fQ1RMX0FDX0lORF9NT0RFX1RYICAgICAgICAgICAgICAg MHgwMDAwMDAwOAorI2RlZmluZSBOSUFfRk1fQ1RMX0FDX0lORF9NT0RFX1JYICAgICAgICAgICAg ICAgMHgwMDAwMDAwQQorI2RlZmluZSBOSUFfRk1fQ1RMX0FDX1BPUF9UT19OX1NURVAgICAgICAg ICAgICAgMHgwMDAwMDAwZQorI2RlZmluZSBOSUFfRk1fQ1RMX0FDX1BSRV9CTUlfRkVUQ0hfSEVB REVSICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBOSUFfRk1fQ1RMX0FDX1BSRV9CTUlfRkVUQ0hf RlVMTF9GUkFNRSAgMHgwMDAwMDAxOAorI2RlZmluZSBOSUFfRk1fQ1RMX0FDX1BPU1RfQk1JX0ZF VENIICAgICAgICAgICAgMHgwMDAwMDAxMgorI2RlZmluZSBOSUFfRk1fQ1RMX0FDX1BSRV9CTUlf RU5RX0ZSQU1FICAgICAgICAgMHgwMDAwMDAxQQorI2RlZmluZSBOSUFfRk1fQ1RMX0FDX1BSRV9C TUlfRElTQ0FSRF9GUkFNRSAgICAgMHgwMDAwMDAxRQorI2RlZmluZSBOSUFfRk1fQ1RMX0FDX1BP U1RfQk1JX0VOUV9PUlIgICAgICAgICAgMHgwMDAwMDAxNAorI2RlZmluZSBOSUFfRk1fQ1RMX0FD X1BPU1RfQk1JX0VOUSAgICAgICAgICAgICAgMHgwMDAwMDAyMgorI2RlZmluZSBOSUFfRk1fQ1RM X0FDX1BPU1RfVFggICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorLyogVjMgb25seSAqLwor I2RlZmluZSBOSUFfRk1fQ1RMX0FDX05PX0lQQUNDX1BSRV9CTUlfRU5RX0ZSQU1FICAgICAgICAw eDAwMDAwMDI4CisjZGVmaW5lIE5JQV9GTV9DVExfQUNfTk9fSVBBQ0NfUFJFX0JNSV9ESVNDQVJE X0ZSQU1FICAgIDB4MDAwMDAwMkEKKyNkZWZpbmUgTklBX0ZNX0NUTF9BQ19OT19JUEFDQ19QT1Bf VE9fTl9TVEVQICAgICAgICAgICAgMHgwMDAwMDAyQworCisjZGVmaW5lIE5JQV9CTUlfQUNfRU5R X0ZSQU1FICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIE5JQV9CTUlfQUNfVFhfUkVMRUFTRSAg ICAgICAweDAwMDAwMkMwCisjZGVmaW5lIE5JQV9CTUlfQUNfUkVMRUFTRSAgICAgICAgICAweDAw MDAwMEMwCisjZGVmaW5lIE5JQV9CTUlfQUNfRElTQ0FSRCAgICAgICAgICAweDAwMDAwMEMxCisj ZGVmaW5lIE5JQV9CTUlfQUNfVFggICAgICAgICAgICAgICAweDAwMDAwMjc0CisjZGVmaW5lIE5J QV9CTUlfQUNfRkVUQ0ggICAgICAgICAgICAweDAwMDAwMjA4CisjZGVmaW5lIE5JQV9CTUlfQUNf TUFTSyAgICAgICAgICAgICAweDAwMDAwM0ZGCisKKyNkZWZpbmUgTklBX0JNSV9BQ19FTlFfRlJB TUVfV0lUSE9VVF9ETUEgICAgMHgwMDAwMDIwMgorCisjZGVmaW5lIEdFVF9OSUFfQk1JX0FDX0VO UV9GUkFNRShHRVRfTklBX0JNSV9BQ19FTlFfRlJBTUUsIGVycmF0YV9BMDA2Njc1KVwKKwkoZXJy YXRhX0EwMDY2NzUgPwkJCQkJCVwKKwkoKHVpbnQzMl90KShOSUFfRU5HX0ZNX0NUTCB8CQkJCQlc CisJCU5JQV9GTV9DVExfQUNfTk9fSVBBQ0NfUFJFX0JNSV9FTlFfRlJBTUUpKSA6CQlcCisJKCh1 aW50MzJfdCkoTklBX0VOR19CTUkgfCBOSUFfQk1JX0FDX0VOUV9GUkFNRSkpKQorI2RlZmluZSBH RVRfTklBX0JNSV9BQ19ESVNDQVJEX0ZSQU1FKGhfZm1fcGNkLCBlcnJhdGFfQTAwNjY3NSkJXAor CShlcnJhdGFfQTAwNjY3NSA/CQkJCQkJXAorCSgodWludDMyX3QpKE5JQV9FTkdfRk1fQ1RMIHwJ CQkJCVwKKwkJTklBX0ZNX0NUTF9BQ19OT19JUEFDQ19QUkVfQk1JX0RJU0NBUkRfRlJBTUUpKSA6 CVwKKwkoKHVpbnQzMl90KShOSUFfRU5HX0JNSSB8IE5JQV9CTUlfQUNfRElTQ0FSRCkpKQorI2Rl ZmluZSBHRVRfTk9fUENEX05JQV9CTUlfQUNfRU5RX0ZSQU1FKGVycmF0YV9BMDA2Njc1KQkJXAor CShlcnJhdGFfQTAwNjY3NSA/CQkJCQkJXAorCShOSUFfRU5HX0ZNX0NUTCB8IE5JQV9GTV9DVExf QUNfTk9fSVBBQ0NfUFJFX0JNSV9FTlFfRlJBTUUpIDpcCisJKE5JQV9FTkdfQk1JIHwgTklBX0JN SV9BQ19FTlFfRlJBTUUpKQorCiAvKiBEZXNjcmlwdGlvbiAgICAgICAgQ1RSTCBQYXJhbWV0ZXJz IFBhZ2UgZGVmaW5lcyAqLwogI2RlZmluZSBGTV9DVExfUEFSQU1TX1BBR0VfT1BfRklYX0VOICAg ICAgICAgICAgMHg4MDAwMDAwMAogI2RlZmluZSBGTV9DVExfUEFSQU1TX1BBR0VfQUxXQVlTX09O ICAgICAgICAgICAgMHgwMDAwMDEwMApAQCAtMTk4LDYgKzI2NSwyMCBAQCBkbyB7CQkJCQkJCQkJ XAogCX0JCQkJCQkJCVwKIH0gd2hpbGUgKDApCiAKKyNkZWZpbmUgSFdfUE9SVF9JRF9UT19TV19Q T1JUX0lEKG1ham9yLCBfbWFjX2lkLCBwb3J0X2lkKQkJXAorZG8gewkJCQkJCQkJCVwKKwlpZiAo cG9ydF9pZCA+PSBCQVNFX1RYX1BPUlRJRCkJCQkJCVwKKwkJX21hY19pZCA9ICh1aW50OF90KShw b3J0X2lkIC0gQkFTRV9UWF9QT1JUSUQpOwkJXAorCWVsc2UgaWYgKHBvcnRfaWQgPj0gQkFTRV9S WF9QT1JUSUQpCQkJCVwKKwkJX21hY19pZCA9ICh1aW50OF90KShwb3J0X2lkIC0gQkFTRV9SWF9Q T1JUSUQpOwkJXAorCWVsc2UgaWYgKHBvcnRfaWQgPj0gQkFTRV9PSF9QT1JUSUQobWFqb3IpKQkJ CVwKKwkJX21hY19pZCA9ICh1aW50OF90KShwb3J0X2lkIC0gQkFTRV9PSF9QT1JUSUQobWFqb3Ip KTsJXAorCWVsc2UgewkJCQkJCQkJXAorCQlfbWFjX2lkID0gKHVpbnQ4X3QpRFVNTVlfUE9SVF9J RDsJCQlcCisJCUFTU0VSVCh0cnVlKTsJCQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkK KwogI2RlZmluZSBCTUlfTUFYX0ZJRk9fU0laRSAgICAgICAgICAgICAgICAgICAoRk1fTVVSQU1f U0laRSkKICNkZWZpbmUgQk1JX0ZJRk9fVU5JVFMgICAgICAgICAgICAgICAgICAgICAgMHgxMDAK IApAQCAtMjU4LDkgKzMzOSw3IEBAIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAogfSBcCiB9IHdoaWxlICgwKQogCi0jZGVmaW5lIEZNX1BD RF9NQVhfTlVNX09GX09QVElPTlMoY2xzX3BsYW5fZW50cmllcykgICBcCi0oKGNsc19wbGFuX2Vu dHJpZXMgPT0gMjU2KSA/IDggOiAoKGNsc19wbGFuX2VudHJpZXMgPT0gMTI4KSA/IDcgOiBcCi0o KGNsc19wbGFuX2VudHJpZXMgPT0gNjQpID8gNiA6ICgoY2xzX3BsYW5fZW50cmllcyA9PSAzMikg PyA1IDogMCkpKSkKKy8qICAgICAgICAgIENvbW1vbiBBUEkgZm9yIEZNLVBvcnQgbW9kdWxlICAg ICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKIC8qIEZ1bmN0aW9uICAgICAgZm1fcmVnaXN0 ZXJfaW50cgogICogRGVzY3JpcHRpb24gICBVc2VkIHRvIHJlZ2lzdGVyCkBAIC0zMDAsNiArMzc5 LDUzIEBAIGVudW0gZm1fbWFjX3R5cGUgewogCUZNX01BQ18xRwkgICAgLyogMUcgTUFDICovCiB9 OwogCisvKiBEZXNjcmlwdGlvbiAgIFN0cnVjdHVyZSBmb3IgcG9ydC1GTSBjb21tdW5pY2F0aW9u CisgKiBkdXJpbmcgZm1fcG9ydF9pbml0LiBGaWVsZHMgY29tbWVudGVkICdJTicgYXJlIHBhc3Nl ZAorICogYnkgdGhlIHBvcnQgbW9kdWxlIHRvIGJlIHVzZWQgYnkgdGhlIEZNIG1vZHVsZS4KKyAq IEZpZWxkcyBjb21tZW50ZWQgJ09VVCcgd2lsbCBiZSBmaWxsZWQgYnkgRk0gYmVmb3JlIHJldHVy bmluZyB0byBwb3J0LgorICogU29tZSBmaWVsZHMgYXJlIG9wdGlvbmFsIChkZXBlbmRpbmcgb24g Y29uZmlndXJhdGlvbikgYW5kCisgKiB3aWxsIGJlIGFuYWxpemVkIGJ5IHRoZSBwb3J0IGFuZCBG TSBtb2R1bGVzIGFjY29yZGluZ2x5LgorICovCitzdHJ1Y3QgZm1faW50ZXJfbW9kdWxlX3BvcnRf aW5pdF9wYXJhbXNfdCB7CisJdWludDhfdCBwb3J0X2lkOworCS8qIElOLiBwb3J0IElkICovCisJ ZW51bSBmbV9wb3J0X3R5cGUgcG9ydF90eXBlOworCS8qIElOLiBQb3J0IHR5cGUgKi8KKwllbnVt IGZtX3BvcnRfc3BlZWQgcG9ydF9zcGVlZDsKKwkvKiBJTi4gUG9ydCBzcGVlZCAqLworCS8qIElO LiBQb3J0J3MgcmVxdWVzdGVkIHJlc291cmNlKi8KKwl1aW50MTZfdCBsaW9kbl9vZmZzZXQ7CisJ LyogSU4uIFBvcnQncyByZXF1ZXN0ZWQgcmVzb3VyY2UgKi8KKwl1aW50OF90IG51bV9vZl90YXNr czsKKwkvKiBJTi4gUG9ydCdzIHJlcXVlc3RlZCByZXNvdXJjZSAqLworCXVpbnQ4X3QgbnVtX29m X2V4dHJhX3Rhc2tzOworCS8qIElOLiBQb3J0J3MgcmVxdWVzdGVkIHJlc291cmNlICovCisJdWlu dDhfdCBudW1fb2Zfb3Blbl9kbWFzOworCS8qIElOLiBQb3J0J3MgcmVxdWVzdGVkIHJlc291cmNl ICovCisJdWludDhfdCBudW1fb2ZfZXh0cmFfb3Blbl9kbWFzOworCS8qIElOLiBQb3J0J3MgcmVx dWVzdGVkIHJlc291cmNlICovCisJdWludDMyX3Qgc2l6ZV9vZl9maWZvOworCS8qIElOLiBQb3J0 J3MgcmVxdWVzdGVkIHJlc291cmNlICovCisJdWludDMyX3QgZXh0cmFfc2l6ZV9vZl9maWZvOwor CS8qIElOLiBQb3J0J3MgcmVxdWVzdGVkIHJlc291cmNlICovCisJdWludDhfdCBkZXFfcGlwZWxp bmVfZGVwdGg7CisJLyogSU4uIFBvcnQncyBtYXggZnJhbWUgbGVuZ3RoLiAqLworCXVpbnQxNl90 IG1heF9mcmFtZV9sZW5ndGg7CisJLyogSU4uIElycmVsZXZhbnQgZm9yIFA0MDgwIHJldiAxLgor CSAqIExJT0ROIGJhc2UgZm9yIHRoaXMgcG9ydCwgdG8gYmUKKwkgKiB1c2VkIHRvZ2V0aGVyIHdp dGggTElPRE4gb2Zmc2V0LgorCSAqLworCXVpbnQxNl90IGxpb2RuX2Jhc2U7Cit9OworCisvKiBE ZXNjcmlwdGlvbiAgIFN0cnVjdHVyZSBmb3IgcG9ydC1GTSBjb21tdW5pY2F0aW9uIGR1cmluZyBm bV9wb3J0X2ZyZWUuKi8KK3N0cnVjdCBmbV9pbnRlcl9tb2R1bGVfcG9ydF9mcmVlX3BhcmFtc190 IHsKKwl1aW50OF90IHBvcnRfaWQ7CQkvKiBJTi4gcG9ydCBJZCAqLworCWVudW0gZm1fcG9ydF90 eXBlIHBvcnRfdHlwZTsJLyogSU4uIFBvcnQgdHlwZSAqLworCWVudW0gZm1fcG9ydF9zcGVlZCBw b3J0X3NwZWVkOwkvKiBJTi4gUG9ydCBzcGVlZCAqLworCXVpbnQ4X3QgZGVxX3BpcGVsaW5lX2Rl cHRoOwkvKiBJTi4gUG9ydCdzIHJlcXVlc3RlZCByZXNvdXJjZSAqLworfTsKKwogLyogRnVuY3Rp b24gICAgICBmbV9nZXRfbXVyYW1fcG9pbnRlcgogICogRGVzY3JpcHRpb24gICBHZXQgdGhlIHBv aW50ZXIgb2YgdGhlIE1VUkFNIGZyb20gdGhlIEZNIG1vZHVsZQogICogUGFyYW1baW5dICAgICBo X2ZtICAgICAgICAgICAgQSBoYW5kbGUgdG8gYW4gRk0gTW9kdWxlLgpAQCAtMzQyLDYgKzQ2OCwy OSBAQCB1aW50MTZfdCBmbV9nZXRfY2xvY2tfZnJlcSh2b2lkICpoX2ZtKTsKICAqLwogdWludDhf dCBmbV9nZXRfaWQodm9pZCAqaF9mbSk7CiAKKy8qIEZ1bmN0aW9uICAgICAgZm1fZ2V0X3NldF9w b3J0X3BhcmFtcworICogRGVzY3JpcHRpb24gICBVc2VkIGJ5IEZNLVBPUlQgZHJpdmVyIHRvIHBh c3MgYW5kIHJlY2VpdmUgcGFyYW1ldGVycyBiZXR3ZWVuCisgKgkJUE9SVCBhbmQgRk0gbW9kdWxl cy4KKyAqIFBhcmFtW2luXSAgICAgaF9mbSAgICAgICAgICAgIEEgaGFuZGxlIHRvIGFuIEZNIE1v ZHVsZS4KKyAqIFBhcmFtW2luLG91dF0gcF9wb3J0X3BhcmFtcyAgICBBIHN0cnVjdHVyZSBvZiBG TSBQb3J0IHBhcmFtZXRlcnMuCisgKiBSZXR1cm4gICAgICAgIDAgb24gc3VjY2VzczsgRXJyb3Ig Y29kZSBvdGhlcndpc2UuCisgKiBDYXV0aW9ucyAgICAgIEFsbG93ZWQgb25seSBmb2xsb3dpbmcg Zm1faW5pdCgpLgorICovCitpbnQgZm1fZ2V0X3NldF9wb3J0X3BhcmFtcyh2b2lkICpoX2ZtLAor CQkJICAgc3RydWN0IGZtX2ludGVyX21vZHVsZV9wb3J0X2luaXRfcGFyYW1zX3QKKwkJCSAgICpw X3BvcnRfcGFyYW1zKTsKKworLyogRnVuY3Rpb24gICAgICBmbV9mcmVlX3BvcnRfcGFyYW1zCisg KiBEZXNjcmlwdGlvbiAgIFVzZWQgYnkgRk0tUE9SVCBkcml2ZXIgdG8gZnJlZSBwb3J0J3MgcmVz b3VyY2VzIHdpdGhpbiB0aGUgRk0uCisgKiBQYXJhbVtpbl0gICAgIGhfZm0gICAgICAgICAgICBB IGhhbmRsZSB0byBhbiBGTSBNb2R1bGUuCisgKiBQYXJhbVtpbixvdXRdIHBfcG9ydF9wYXJhbXMg ICAgQSBzdHJ1Y3R1cmUgb2YgRk0gUG9ydCBwYXJhbWV0ZXJzLgorICogUmV0dXJuICAgICAgICBO b25lLgorICogQ2F1dGlvbnMgICAgICBBbGxvd2VkIG9ubHkgZm9sbG93aW5nIGZtX2luaXQoKS4K KyAqLwordm9pZCBmbV9mcmVlX3BvcnRfcGFyYW1zKHZvaWQgKmhfZm0sCisJCQkgc3RydWN0IGZt X2ludGVyX21vZHVsZV9wb3J0X2ZyZWVfcGFyYW1zX3QKKwkJCSAqcF9wb3J0X3BhcmFtcyk7CisK ICNpZmRlZiBGTV9UWF9FQ0NfRlJNU19FUlJBVEFfMTBHTUFDX0EwMDQKIGludCBmbV8xMGdfdHhf ZWNjX3dvcmthcm91bmQodm9pZCAqaF9mbSwgdWludDhfdCBtYWNfaWQpOwogI2VuZGlmIC8qIEZN X1RYX0VDQ19GUk1TX0VSUkFUQV8xMEdNQUNfQTAwNCAqLwpAQCAtMzY4LDUgKzUxNywyMiBAQCBz dHJ1Y3QgbnVtX29mX3BvcnRzX2luZm9fdCAqZm1fZ2V0X251bV9vZl9wb3J0cyh2b2lkICpoX2Zt KTsKIAogaW50IGZtX3NldF9tYWNfbWF4X2ZyYW1lKHZvaWQgKmhfZm0sIGVudW0gZm1fbWFjX3R5 cGUgdHlwZSwKIAkJCSB1aW50OF90IG1hY19pZCwgdWludDE2X3QgbXR1KTsKK2ludCBmbV9zZXRf bnVtX29mX29wZW5fZG1hcyh2b2lkICpoX2ZtLAorCQkJICAgIHVpbnQ4X3QgcG9ydF9pZCwKKwkJ CSAgICB1aW50OF90ICpwX251bV9vZl9vcGVuX2RtYXMsCisJCQkgICAgdWludDhfdCAqcF9udW1f b2ZfZXh0cmFfb3Blbl9kbWFzLAorCQkJICAgIGJvb2wgaW5pdGlhbF9jb25maWcpOworaW50IGZt X3NldF9udW1fb2ZfdGFza3Modm9pZCAqaF9mbSwKKwkJCXVpbnQ4X3QgcG9ydF9pZCwKKwkJCXVp bnQ4X3QgKnBfbnVtX29mX3Rhc2tzLAorCQkJdWludDhfdCAqcF9udW1fb2ZfZXh0cmFfdGFza3Ms CisJCQlib29sIGluaXRpYWxfY29uZmlnKTsKK2ludCBmbV9zZXRfc2l6ZV9vZl9maWZvKHZvaWQg KmhfZm0sCisJCQl1aW50OF90IHBvcnRfaWQsCisJCQl1aW50MzJfdCAqcF9zaXplX29mX2ZpZm8s CisJCQl1aW50MzJfdCAqcF9leHRyYV9zaXplX29mX2ZpZm8sCisJCQlib29sIGluaXRpYWxfY29u ZmlnKTsKKwordWludDMyX3QgZm1fZ2V0X2JtaV9tYXhfZmlmb19zaXplKHZvaWQgKmhfZm0pOwog CiAjZW5kaWYgLyogX19GTV9DT01NT05fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRo ZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1fZHJ2LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVl c2NhbGUvZm1hbi9mbV9kcnYuYwppbmRleCAyZDhkYjdmLi5jOGViM2EzIDEwMDY0NAotLS0gYS9k cml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbV9kcnYuYworKysgYi9kcml2ZXJz L25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbV9kcnYuYwpAQCAtMjE5LDYgKzIxOSw3MyBA QCBzdGF0aWMgdm9pZCBkZXN0cm95X2ZtX2RldihzdHJ1Y3QgbG54X3dycF9mbV9kZXZfdCAqcF9s bnhfd3JwX2ZtX2RldikKIAlrZnJlZShwX2xueF93cnBfZm1fZGV2KTsKIH0KIAorc3RhdGljIGlu dCBmaWxsX3Jlc3RfZm1faW5mbyhzdHJ1Y3QgbG54X3dycF9mbV9kZXZfdCAqcF9sbnhfd3JwX2Zt X2RldikKK3sKKyNkZWZpbmUgRk1fQk1JX1BQSURTX09GRlNFVCAgICAgICAgICAgICAgICAgMHgw MDA4MDMwNAorI2RlZmluZSBGTV9ETUFfUExSX09GRlNFVCAgICAgICAgICAgICAgICAgICAweDAw MGMyMDYwCisjZGVmaW5lIEZNX0ZQTV9JUF9SRVZfMV9PRkZTRVQgICAgICAgICAgICAgIDB4MDAw YzMwYzQKKyNkZWZpbmUgRE1BX0hJR0hfTElPRE5fTUFTSyAgICAgICAgICAgICAgICAgMHgwRkZG MDAwMAorI2RlZmluZSBETUFfTE9XX0xJT0ROX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDAw RkZGCisjZGVmaW5lIERNQV9MSU9ETl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDE2CisKKy8q IFRoZXNlIG5lZWQgdG8gYmUgbW92ZWQgdG8gRkxpYjogKi8KKwlzdHJ1Y3QgcGxyX3QgeworCQl1 aW50MzJfdCBwbHJbMzJdOworCX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOworCisJc3Ry dWN0IHBwaWRzX3QgeworCQl2b2xhdGlsZSB1aW50MzJfdCBmbWJtX3BwaWRbNjNdOworCX0gX19h dHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOworCisJc3RydWN0IHBscl90ICpwX3BscjsKKwlzdHJ1 Y3QgcHBpZHNfdCAqcF9wcGlkczsKKwlpbnQgaTsKKwl1aW50MzJfdCBmbV9yZXY7CisKKwlmbV9y ZXYgPSAodWludDMyX3QpKCooKHZvbGF0aWxlIHVpbnQzMl90ICopCisJCQkJVUlOVF9UT19QVFIo cF9sbnhfd3JwX2ZtX2Rldi0+Zm1fYmFzZV9hZGRyICsKKwkJCQkJICAgIEZNX0ZQTV9JUF9SRVZf MV9PRkZTRVQpKSk7CisJZm1fcmV2ICY9IDB4ZmZmZjsKKworCXBfcGxyID0KKwkgICAgKHN0cnVj dCBwbHJfdCAqKVVJTlRfVE9fUFRSKHBfbG54X3dycF9mbV9kZXYtPmZtX2Jhc2VfYWRkciArCisJ CQkJICBGTV9ETUFfUExSX09GRlNFVCk7CisjaWZkZWYgTU9EVUxFCisJZm9yIChpID0gMDsgaSA8 IEZNX01BWF9OVU1fT0ZfUEFSVElUSU9OUyAvIDI7IGkrKykKKwkJcF9wbHItPnBscltpXSA9IDA7 CisjZW5kaWYgLyogTU9EVUxFICovCisKKwlmb3IgKGkgPSAwOyBpIDwgRk1fTUFYX05VTV9PRl9Q QVJUSVRJT05TOyBpKyspIHsKKwkJdWludDE2X3QgbGlvZG5fYmFzZTsKKworCQlsaW9kbl9iYXNl ID0gKHVpbnQxNl90KSgoaSAlIDIpID8KKwkJCQkocF9wbHItPnBscltpIC8gMl0gJiBETUFfTE9X X0xJT0ROX01BU0spIDoKKwkJCQkoKHBfcGxyLT5wbHJbaSAvIDJdICYgRE1BX0hJR0hfTElPRE5f TUFTSykgPj4KKwkJCQlETUFfTElPRE5fU0hJRlQpKTsKKyNpZmRlZiBGTV9QQVJUSVRJT05fQVJS QVkKKwkJcF9sbnhfd3JwX2ZtX2Rldi0+cGFyYW1zLmxpb2RuX2Jhc2VfcGVyX3BvcnRbaV0gPSBs aW9kbl9iYXNlOworI2VuZGlmIC8qIEZNX1BBUlRJVElPTl9BUlJBWSAqLworCisJCWlmICgoKGkg Pj0gRklSU1RfUlhfUE9SVCkgJiYgKGkgPD0gTEFTVF9SWF9QT1JUKSkgfHwKKwkJICAgICgoaSA+ PSBGSVJTVF9UWF9QT1JUKSAmJiAoaSA8PSBGSVJTVF9UWF9QT1JUKSkgfHwKKwkJICAgICgoaSA+ PSBGSVJTVF9PUF9QT1JUKAorCQkJICAgIHBfbG54X3dycF9mbV9kZXYtPmZtX3Jldl9pbmZvLm1h am9yX3JldikpICYmCisJCSAgICAoaSA8PSBMQVNUX09QX1BPUlQpKSkKKwkJCXBfbG54X3dycF9m bV9kZXYtPnBvcnRzW2ldLnBvcnRfcGFyYW1zLmxpb2RuX2Jhc2UgPQorCQkJbGlvZG5fYmFzZTsK Kwl9CisKKwlwX3BwaWRzID0gKHN0cnVjdCBwcGlkc190ICopCisJCVVJTlRfVE9fUFRSKHBfbG54 X3dycF9mbV9kZXYtPmZtX2Jhc2VfYWRkciArCisJCQkgICAgRk1fQk1JX1BQSURTX09GRlNFVCk7 CisKKwlmb3IgKGkgPSBGSVJTVF9SWF9QT1JUOyBpIDw9IExBU1RfUlhfUE9SVDsgaSsrKQorCQlw X2xueF93cnBfZm1fZGV2LT5wb3J0c1tpXS5wb3J0X3BhcmFtcy5zcGVjaWZpY19wYXJhbXMuCisJ CSAgICByeF9wYXJhbXMubGlvZG5fb2Zmc2V0ID0gKHUxNikocF9wcGlkcy0+Zm1ibV9wcGlkW2kg LSAxXSk7CisKKwlyZXR1cm4gMDsKK30KKwogLyoqCiAqZmluZF9mbWFuX21pY3JvY29kZSAtIGZp bmQgdGhlIEZtYW4gbWljcm9jb2RlCiAgKgpAQCAtNTYyLDcgKzYyOSw3IEBAIHN0YXRpYyBpbnQg Y29uZmlndXJlX2ZtX2RldihzdHJ1Y3QgbG54X3dycF9mbV9kZXZfdCAqcF9sbnhfd3JwX2ZtX2Rl dikKIAlwX2xueF93cnBfZm1fZGV2LT5wYXJhbXMuZl9idXNfZXJyb3IgPSBsbnh3cnBfZm1fZGV2 X2J1c19lcnJvcl9jYjsKIAlwX2xueF93cnBfZm1fZGV2LT5wYXJhbXMuaF9hcHAgPSBwX2xueF93 cnBfZm1fZGV2OwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIGZpbGxfcmVzdF9mbV9pbmZvKHBfbG54 X3dycF9mbV9kZXYpOwogfQogCiBzdGF0aWMgaW50IGluaXRfZm1fZGV2KHN0cnVjdCBsbnhfd3Jw X2ZtX2Rldl90ICpwX2xueF93cnBfZm1fZGV2KQpAQCAtODIwLDYgKzg4Nyw1NiBAQCB2b2lkICpm bV9nZXRfaGFuZGxlKHN0cnVjdCBmbSAqZm0pCiBFWFBPUlRfU1lNQk9MKGZtX2dldF9oYW5kbGUp OwogCiAKK3N0cnVjdCBmbV9wb3J0ICpmbV9wb3J0X2JpbmQoc3RydWN0IGRldmljZSAqZm1fcG9y dF9kZXYpCit7CisJcmV0dXJuIChzdHJ1Y3QgZm1fcG9ydCAqKShkZXZfZ2V0X2RydmRhdGEoZ2V0 X2RldmljZShmbV9wb3J0X2RldikpKTsKK30KK0VYUE9SVF9TWU1CT0woZm1fcG9ydF9iaW5kKTsK Kwordm9pZCBmbV9wb3J0X3VuYmluZChzdHJ1Y3QgZm1fcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3Qg bG54X3dycF9mbV9wb3J0X2Rldl90ICpwX2xueF93cnBfZm1fcG9ydF9kZXYgPQorCQkJCQkoc3Ry dWN0IGxueF93cnBfZm1fcG9ydF9kZXZfdCAqKXBvcnQ7CisKKwlwdXRfZGV2aWNlKHBfbG54X3dy cF9mbV9wb3J0X2Rldi0+ZGV2KTsKK30KK0VYUE9SVF9TWU1CT0woZm1fcG9ydF91bmJpbmQpOwor Cit2b2lkICpmbV9wb3J0X2dldF9oYW5kbGUoY29uc3Qgc3RydWN0IGZtX3BvcnQgKnBvcnQpCit7 CisJc3RydWN0IGxueF93cnBfZm1fcG9ydF9kZXZfdCAqcF9sbnhfd3JwX2ZtX3BvcnRfZGV2ID0K KwkJCQkJKHN0cnVjdCBsbnhfd3JwX2ZtX3BvcnRfZGV2X3QgKilwb3J0OworCisJcmV0dXJuICh2 b2lkICopcF9sbnhfd3JwX2ZtX3BvcnRfZGV2LT5oX2RldjsKK30KK0VYUE9SVF9TWU1CT0woZm1f cG9ydF9nZXRfaGFuZGxlKTsKKwordm9pZCBmbV9wb3J0X2dldF9iYXNlX2FkZHIoY29uc3Qgc3Ry dWN0IGZtX3BvcnQgKnBvcnQsIHVpbnQ2NF90ICpiYXNlX2FkZHIpCit7CisJc3RydWN0IGxueF93 cnBfZm1fcG9ydF9kZXZfdCAqcF9sbnhfd3JwX2ZtX3BvcnRfZGV2ID0KKwkJCQkJKHN0cnVjdCBs bnhfd3JwX2ZtX3BvcnRfZGV2X3QgKilwb3J0OworCisJKmJhc2VfYWRkciA9IHBfbG54X3dycF9m bV9wb3J0X2Rldi0+cG9ydF9wYXJhbXMuYmFzZV9hZGRyOworfQorRVhQT1JUX1NZTUJPTChmbV9w b3J0X2dldF9iYXNlX2FkZHIpOworCit2b2lkIGZtX3BvcnRfZ2V0X2J1ZmZfbGF5b3V0X2V4dF9w YXJhbXMoc3RydWN0IGZtX3BvcnQgKnBvcnQsCisJCQkJCXN0cnVjdCBmbV9wb3J0X3BhcmFtcyAq cGFyYW1zKQoreworCS8qIFRPRE8gLSBTaG91bGQgdGhpcyBmdW5jdGlvbiBiZSByZW1vdmVkPyAq LworCXBhcmFtcy0+ZGF0YV9hbGlnbiA9IDA7Cit9CitFWFBPUlRfU1lNQk9MKGZtX3BvcnRfZ2V0 X2J1ZmZfbGF5b3V0X2V4dF9wYXJhbXMpOworCitpbnQgZm1fZ2V0X3R4X3BvcnRfY2hhbm5lbChz dHJ1Y3QgZm1fcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgbG54X3dycF9mbV9wb3J0X2Rldl90ICpw X2xueF93cnBfZm1fcG9ydF9kZXYgPQorCQkJCQkoc3RydWN0IGxueF93cnBfZm1fcG9ydF9kZXZf dCAqKXBvcnQ7CisKKwlyZXR1cm4gcF9sbnhfd3JwX2ZtX3BvcnRfZGV2LT50eF9jaDsKK30KK0VY UE9SVF9TWU1CT0woZm1fZ2V0X3R4X3BvcnRfY2hhbm5lbCk7CisKIHZvaWQgZm1fbXV0ZXhfbG9j ayh2b2lkKQogewogCW11dGV4X2xvY2soJmxueHdycF9tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2 ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbV9kcnYuaCBiL2RyaXZlcnMvbmV0L2V0 aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtX2Rydi5oCmluZGV4IGRlNjk5NjUuLmYyYTk4ODUgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtX2Rydi5oCisr KyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtX2Rydi5oCkBAIC0zNSw2 ICszNSw3IEBACiAKICNpbmNsdWRlICJzZXJ2aWNlLmgiCiAjaW5jbHVkZSAiZnNsX2ZtYW5fZHJ2 LmgiCisjaW5jbHVkZSAiZm1fcG9ydF9leHQuaCIKIAogI2lmbmRlZiBDT05GSUdfRlNMX0ZNX01B WF9GUkFNRV9TSVpFCiAjZGVmaW5lIENPTkZJR19GU0xfRk1fTUFYX0ZSQU1FX1NJWkUgMApAQCAt NjgsNiArNjksNyBAQCBzdHJ1Y3QgbG54X3dycF9mbV9wb3J0X2Rldl90IHsKIAl1aW50NjRfdCBw aHlzX2Jhc2VfYWRkcjsKIAl1aW50NjRfdCBiYXNlX2FkZHI7CS8qIFBvcnQncyAqdmlydHVhbCog YWRkcmVzcyAqLwogCXJlc291cmNlX3NpemVfdCBtZW1fc2l6ZTsKKwlzdHJ1Y3QgZm1fcG9ydF9w YXJhbXNfdCBwb3J0X3BhcmFtczsKIAlzdHJ1Y3QgZm1fYnVmZmVyX3ByZWZpeF9jb250ZW50X3Qg YnVmZl9wcmVmaXhfY29udGVudDsKIAl2b2lkICpoX2RldjsKIAl2b2lkICpoX2xueF93cnBfZm1f ZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1f cG9ydF9kcnYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtX3BvcnRf ZHJ2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEwNDAzZAotLS0gL2Rl di9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtX3BvcnRf ZHJ2LmMKQEAgLTAsMCArMSw1MzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOC0yMDE1IEZyZWVz Y2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh cmUgbWV0OgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0 YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0 CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp dGhlciB0aGUgbmFtZSBvZiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBub3IgdGhlCisgKiAgICAg ICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv bW90ZSBwcm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91 dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICoKKyAqIEFMVEVSTkFU SVZFTFksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgYXMgcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAyIG9m IHRoYXQgTGljZW5zZSBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4K KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEZyZWVzY2FsZSBTZW1pY29uZHVj dG9yIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBGcmVlc2NhbGUgU2VtaWNvbmR1 Y3RvciBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKkZpbGUgICAgICAgICAg bG54d3JwX2ZtX3BvcnQuYworICpEZXNjcmlwdGlvbiAgIEZNRCB3cmFwcGVyIC0gRk1hbiBwb3J0 IGZ1bmN0aW9ucy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUg PGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxp bnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1 ZGUgPGxpbnV4L2NkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGlu dXgvc3BpbmxvY2suaD4KKworI2luY2x1ZGUgImZtX2NvbW1vbi5oIgorI2luY2x1ZGUgImZzbF9m bWFuX2Rydi5oIgorI2luY2x1ZGUgImZtX3BvcnRfZXh0LmgiCisjaW5jbHVkZSAiZm1fZHJ2Lmgi CisKK3N0YXRpYyBzdHJ1Y3QgbG54X3dycF9mbV9wb3J0X2Rldl90CisqcmVhZF9mbV9wb3J0X2Rl dl90cmVlX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KQoreworCXN0cnVjdCBs bnhfd3JwX2ZtX2Rldl90ICpwX2xueF93cnBfZm1fZGV2OworCXN0cnVjdCBsbnhfd3JwX2ZtX3Bv cnRfZGV2X3QgKnBfbG54X3dycF9mbV9wb3J0X2RldjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmZt X25vZGUsICpwb3J0X25vZGU7CisJc3RydWN0IHJlc291cmNlIHJlczsKKwljb25zdCB1aW50MzJf dCAqdWludDMyX3Byb3A7CisJaW50IF9lcnJubyA9IDAsIGxlbnA7CisJZW51bSBmbV9wb3J0X3R5 cGUgcG9ydF90eXBlOworCWVudW0gZm1fcG9ydF9zcGVlZCBwb3J0X3NwZWVkOworCXU4IGNlbGxf aW5kZXg7CisKKwlwb3J0X25vZGUgPSBvZl9ub2RlX2dldChvZl9kZXYtPmRldi5vZl9ub2RlKTsK KworCS8qIEdldCB0aGUgRk0gbm9kZSAqLworCWZtX25vZGUgPSBvZl9nZXRfcGFyZW50KHBvcnRf bm9kZSk7CisJaWYgKHVubGlrZWx5KCFmbV9ub2RlKSkgeworCQlwcl9lcnIoIm9mX2dldF9wYXJl bnQoKSA9ICVkXG4iLCBfZXJybm8pOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlwX2xueF93cnBf Zm1fZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZvZl9maW5kX2RldmljZV9ieV9ub2RlKGZtX25vZGUp LT4KKwkJCQkJICAgZGV2KTsKKwlvZl9ub2RlX3B1dChmbV9ub2RlKTsKKworCS8qIGlmIGZtX3By b2JlKCkgZmFpbGVkLCBubyBwb2ludCBpbiBnb2luZyBmdXJ0aGVyIHdpdGggcG9ydCBwcm9iaW5n ICovCisJaWYgKCFwX2xueF93cnBfZm1fZGV2KQorCQlyZXR1cm4gTlVMTDsKKworCXVpbnQzMl9w cm9wID0KKwkgICAgKHVpbnQzMl90ICopb2ZfZ2V0X3Byb3BlcnR5KHBvcnRfbm9kZSwgImNlbGwt aW5kZXgiLCAmbGVucCk7CisJaWYgKHVubGlrZWx5KCF1aW50MzJfcHJvcCkpIHsKKwkJcHJfZXJy KCJvZl9nZXRfcHJvcGVydHkoJXMsIGNlbGwtaW5kZXgpIGZhaWxlZFxuIiwKKwkJICAgICAgIHBv cnRfbm9kZS0+ZnVsbF9uYW1lKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWlmIChXQVJOX09OKGxl bnAgIT0gc2l6ZW9mKHVpbnQzMl90KSkpCisJCXJldHVybiBOVUxMOworCWNlbGxfaW5kZXggPSAo dTgpKnVpbnQzMl9wcm9wOworCisJcF9sbnhfd3JwX2ZtX3BvcnRfZGV2ID0gJnBfbG54X3dycF9m bV9kZXYtPnBvcnRzW2NlbGxfaW5kZXhdOworCXBfbG54X3dycF9mbV9wb3J0X2Rldi0+aWQgPSBj ZWxsX2luZGV4OworCXBfbG54X3dycF9mbV9wb3J0X2Rldi0+cG9ydF9wYXJhbXMucG9ydF9pZCA9 CisJCQkJCQlwX2xueF93cnBfZm1fcG9ydF9kZXYtPmlkOworCisJaWYgKG9mX2RldmljZV9pc19j b21wYXRpYmxlKHBvcnRfbm9kZSwgImZzbCxmbWFuLXYyLXBvcnQtb2giKSB8fAorCSAgICBvZl9k ZXZpY2VfaXNfY29tcGF0aWJsZShwb3J0X25vZGUsICJmc2wsZm1hbi12My1wb3J0LW9oIikpIHsK KwkJcG9ydF90eXBlID0gRk1fUE9SVF9UWVBFX09QOworCQlwb3J0X3NwZWVkID0gRk1fUE9SVF9T UEVFRF9PUDsKKworCX0gZWxzZSBpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocG9ydF9ub2Rl LAorCQkJCQkgICAgImZzbCxmbWFuLXYzLXBvcnQtdHgiKSB8fAorCQkgICBvZl9kZXZpY2VfaXNf Y29tcGF0aWJsZShwb3J0X25vZGUsCisJCQkJCSAgICJmc2wsZm1hbi12Mi1wb3J0LXR4IikpIHsK KwkJaWYgKGNlbGxfaW5kZXggPj0gVFhfMTBHX1BPUlRfQkFTRSkKKwkJCXBvcnRfc3BlZWQgPSBG TV9QT1JUX1NQRUVEXzEwRzsKKwkJZWxzZQorCQkJcG9ydF9zcGVlZCA9IEZNX1BPUlRfU1BFRURf MUc7CisJCXBvcnRfdHlwZSA9IEZNX1BPUlRfVFlQRV9UWDsKKworCX0gZWxzZSBpZiAob2ZfZGV2 aWNlX2lzX2NvbXBhdGlibGUocG9ydF9ub2RlLAorCQkJCQkgICAgImZzbCxmbWFuLXYzLXBvcnQt cngiKSB8fAorCQkgICBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwb3J0X25vZGUsCisJCQkJCSAg ICJmc2wsZm1hbi12Mi1wb3J0LXJ4IikpIHsKKwkJaWYgKGNlbGxfaW5kZXggPj0gUlhfMTBHX1BP UlRfQkFTRSkKKwkJCXBvcnRfc3BlZWQgPSBGTV9QT1JUX1NQRUVEXzEwRzsKKwkJZWxzZQorCQkJ cG9ydF9zcGVlZCA9IEZNX1BPUlRfU1BFRURfMUc7CisJCXBvcnRfdHlwZSA9IEZNX1BPUlRfVFlQ RV9SWDsKKwl9IGVsc2UgeworCQlwcl9lcnIoIklsbGVnYWwgcG9ydCB0eXBlXG4iKTsKKwkJcmV0 dXJuIE5VTEw7CisJfQorCisJcF9sbnhfd3JwX2ZtX3BvcnRfZGV2LT5wb3J0X3BhcmFtcy5wb3J0 X3R5cGUgPSBwb3J0X3R5cGU7CisJcF9sbnhfd3JwX2ZtX3BvcnRfZGV2LT5wb3J0X3BhcmFtcy5w b3J0X3NwZWVkID0gcG9ydF9zcGVlZDsKKworCWlmIChwb3J0X3R5cGUgPT0gRk1fUE9SVF9UWVBF X09QIHx8IHBvcnRfdHlwZSA9PSBGTV9QT1JUX1RZUEVfVFgpIHsKKwkJdWludDMyX3QgcW1hbl9j aGFubmVsX2lkOworCisJCXFtYW5fY2hhbm5lbF9pZCA9IGdldF9xbWFuX2NoYW5uZWxfaWQocF9s bnhfd3JwX2ZtX2RldiwKKwkJCQkJCSAgICAgIGNlbGxfaW5kZXgsCisJCQkJCQkgICAgICBwb3J0 X3R5cGUsCisJCQkJCQkgICAgICBwb3J0X3NwZWVkKTsKKworCQlpZiAocW1hbl9jaGFubmVsX2lk ID09IDApIHsKKwkJCXByX2VycigiaW5jb3JyZWN0IHFtYW4tY2hhbm5lbC1pZFxuIik7CisJCQly ZXR1cm4gTlVMTDsKKwkJfQorCQlwX2xueF93cnBfZm1fcG9ydF9kZXYtPnR4X2NoID0gcW1hbl9j aGFubmVsX2lkOworCQlwX2xueF93cnBfZm1fcG9ydF9kZXYtPnBvcnRfcGFyYW1zLnNwZWNpZmlj X3BhcmFtcy4KKwkJCQlub25fcnhfcGFyYW1zLnFtX2NoYW5uZWwgPSBxbWFuX2NoYW5uZWxfaWQ7 CisJfQorCisJX2Vycm5vID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShwb3J0X25vZGUsIDAsICZy ZXMpOworCWlmICh1bmxpa2VseShfZXJybm8gPCAwKSkgeworCQlwcl9lcnIoIm9mX2FkZHJlc3Nf dG9fcmVzb3VyY2UoKSA9ICVkXG4iLCBfZXJybm8pOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlw X2xueF93cnBfZm1fcG9ydF9kZXYtPmRldiA9ICZvZl9kZXYtPmRldjsKKwlwX2xueF93cnBfZm1f cG9ydF9kZXYtPmJhc2VfYWRkciA9IDA7CisJcF9sbnhfd3JwX2ZtX3BvcnRfZGV2LT5waHlzX2Jh c2VfYWRkciA9IHJlcy5zdGFydDsKKwlwX2xueF93cnBfZm1fcG9ydF9kZXYtPm1lbV9zaXplID0g cmVzLmVuZCArIDEgLSByZXMuc3RhcnQ7CisJcF9sbnhfd3JwX2ZtX3BvcnRfZGV2LT5wb3J0X3Bh cmFtcy5oX2ZtID0gcF9sbnhfd3JwX2ZtX2Rldi0+aF9kZXY7CisJcF9sbnhfd3JwX2ZtX3BvcnRf ZGV2LT5oX2xueF93cnBfZm1fZGV2ID0gKHZvaWQgKilwX2xueF93cnBfZm1fZGV2OworCisJb2Zf bm9kZV9wdXQocG9ydF9ub2RlKTsKKworCXBfbG54X3dycF9mbV9wb3J0X2Rldi0+YWN0aXZlID0g dHJ1ZTsKKworCXJldHVybiBwX2xueF93cnBfZm1fcG9ydF9kZXY7Cit9CisKK3N0YXRpYyBpbnQg Y29uZmlndXJlX2ZtX3BvcnRfZGV2KHN0cnVjdCBsbnhfd3JwX2ZtX3BvcnRfZGV2X3QKKwkJCQkg ICAgICpwX2xueF93cnBfZm1fcG9ydF9kZXYpCit7CisJc3RydWN0IGxueF93cnBfZm1fZGV2X3Qg KnBfbG54X3dycF9mbV9kZXYgPQorCSAgICAoc3RydWN0IGxueF93cnBfZm1fZGV2X3QgKilwX2xu eF93cnBfZm1fcG9ydF9kZXYtPmhfbG54X3dycF9mbV9kZXY7CisJc3RydWN0IHJlc291cmNlICpk ZXZfcmVzOworCisJaWYgKCFwX2xueF93cnBfZm1fcG9ydF9kZXYtPmFjdGl2ZSkgeworCQlwcl9l cnIoIkZNIHBvcnQgbm90IGNvbmZpZ3VyZWQhISFcbiIpOworCQlyZXR1cm4gLUVOT1NZUzsKKwl9 CisKKwlkZXZfcmVzID0KKwkgICAgX19kZXZtX3JlcXVlc3RfcmVnaW9uKHBfbG54X3dycF9mbV9k ZXYtPmRldiwgcF9sbnhfd3JwX2ZtX2Rldi0+cmVzLAorCQkJCSAgcF9sbnhfd3JwX2ZtX3BvcnRf ZGV2LT5waHlzX2Jhc2VfYWRkciwKKwkJCQkgIHBfbG54X3dycF9mbV9wb3J0X2Rldi0+bWVtX3Np emUsCisJCQkJICAiZm1hbi1wb3J0LWhjIik7CisJaWYgKHVubGlrZWx5KCFkZXZfcmVzKSkgewor CQlwcl9lcnIoIl9fZGV2bV9yZXF1ZXN0X3JlZ2lvbigpIGZhaWxlZFxuIik7CisJCXJldHVybiAt RU5PU1lTOworCX0KKwlwX2xueF93cnBfZm1fcG9ydF9kZXYtPmJhc2VfYWRkciA9CisJICAgIFBU Ul9UT19VSU5UKGRldm1faW9yZW1hcAorCQkJKHBfbG54X3dycF9mbV9kZXYtPmRldiwKKwkJCSBw X2xueF93cnBfZm1fcG9ydF9kZXYtPnBoeXNfYmFzZV9hZGRyLAorCQkJIHBfbG54X3dycF9mbV9w b3J0X2Rldi0+bWVtX3NpemUpKTsKKwlpZiAodW5saWtlbHkocF9sbnhfd3JwX2ZtX3BvcnRfZGV2 LT5iYXNlX2FkZHIgPT0gMCkpCisJCXByX2VycigiZGV2bV9pb3JlbWFwKCkgZmFpbGVkXG4iKTsK KworCXBfbG54X3dycF9mbV9wb3J0X2Rldi0+cG9ydF9wYXJhbXMuYmFzZV9hZGRyID0KKwkgICAg cF9sbnhfd3JwX2ZtX3BvcnRfZGV2LT5iYXNlX2FkZHI7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGludCBpbml0X2ZtX3BvcnRfZGV2KHN0cnVjdCBsbnhfd3JwX2ZtX3BvcnRfZGV2X3QKKwkJ CQkqcF9sbnhfd3JwX2ZtX3BvcnRfZGV2KQoreworCXN0cnVjdCBsbnhfd3JwX2ZtX2Rldl90ICpw X2xueF93cnBfZm1fZGV2ID0KKwkJKHN0cnVjdCBsbnhfd3JwX2ZtX2Rldl90ICopcF9sbnhfd3Jw X2ZtX3BvcnRfZGV2LT4KKwkJaF9sbnhfd3JwX2ZtX2RldjsKKworCWlmICghcF9sbnhfd3JwX2Zt X3BvcnRfZGV2LT5hY3RpdmUgfHwgcF9sbnhfd3JwX2ZtX3BvcnRfZGV2LT5oX2RldikKKwkJcmV0 dXJuIC1FTk9TWVM7CisKKwlwX2xueF93cnBfZm1fcG9ydF9kZXYtPmhfZGV2ID0KKwkgICAgZm1f cG9ydF9jb25maWcoJnBfbG54X3dycF9mbV9wb3J0X2Rldi0+cG9ydF9wYXJhbXMpOworCWlmICgh cF9sbnhfd3JwX2ZtX3BvcnRfZGV2LT5oX2RldikgeworCQlwcl9lcnIoIkZNLXBvcnRcbiIpOwor CQlyZXR1cm4gLUVOT1NZUzsKKwl9CisKKwlpZiAoZm1fZ2V0X3JldmlzaW9uKHBfbG54X3dycF9m bV9kZXYtPmhfZGV2LAorCQkJICAgICZwX2xueF93cnBfZm1fcG9ydF9kZXYtPmZtX3Jldl9pbmZv KSAhPSAwKSB7CisJCXByX2VycigiRk0tcG9ydFxuIik7CisJCXJldHVybiAtRU5PU1lTOworCX0K KworI2lmZGVmIEZNX1FNSV9OT19ERVFfT1BUSU9OU19TVVBQT1JUCisJaWYgKChwX2xueF93cnBf Zm1fcG9ydF9kZXYtPmZtX3Jldl9pbmZvLm1ham9yX3JldiAhPSA0KSAmJgorCSAgICAocF9sbnhf d3JwX2ZtX3BvcnRfZGV2LT5wb3J0X3BhcmFtcy5wb3J0X3R5cGUgPT0KKwkgICAgRk1fUE9SVF9U WVBFX1RYKSkgeworCQlpbnQgZXJyX2NvZGUgPSAwOworCisJCWVycl9jb2RlID0KKwkJICAgIGZt X3BvcnRfY2ZnX2RlcV9oaWdoX3ByaW9yaXR5KHBfbG54X3dycF9mbV9wb3J0X2Rldi0+CisJCQkJ CQkgICAgIGhfZGV2LCB0cnVlKTsKKwkJaWYgKGVycl9jb2RlICE9IDApCisJCQlyZXR1cm4gLWVy cl9jb2RlOworCQllcnJfY29kZSA9CisJCSAgICBmbV9wb3J0X2NmZ19kZXFfcHJlZmV0Y2hfb3B0 aW9uCisJCSAgICAocF9sbnhfd3JwX2ZtX3BvcnRfZGV2LT5oX2RldiwgRk1fUE9SVF9ERVFfRlVM TF9QUkVGRVRDSCk7CisJCWlmIChlcnJfY29kZSAhPSAwKQorCQkJcmV0dXJuIC1lcnJfY29kZTsK Kwl9CisjZW5kaWYgLyogIUZNX1FNSV9OT19ERVFfT1BUSU9OU19TVVBQT1JUICovCisKKyNpZmRl ZiBGTV9CQ0JfRVJSQVRBX0JNSV9TVzAwMQorLyogQ29uZmlndXJlIEJDQiB3b3JrYXJvdW5kIG9u IFJ4IHBvcnRzLCBvbmx5IGZvciBCNDg2MCByZXYxICovCisjZGVmaW5lIFNWUl9TRUNVUklUWV9N QVNLICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgU1ZSX1BFUlNPTkFMSVRZX01BU0sgMHgwMDAwRkYw MAorI2RlZmluZSBTVlJfVkVSX0lHTk9SRV9NQVNLIChTVlJfU0VDVVJJVFlfTUFTSyB8IFNWUl9Q RVJTT05BTElUWV9NQVNLKQorI2RlZmluZSBTVlJfQjQ4NjBfUkVWMV9WQUxVRSAweDg2ODAwMDEw CisKKwlpZiAoKHBfbG54X3dycF9mbV9wb3J0X2Rldi0+Zm1fcmV2X2luZm8ubWFqb3JfcmV2ID49 IDYpICYmCisJICAgIChwX2xueF93cnBfZm1fcG9ydF9kZXYtPnBvcnRfcGFyYW1zLnBvcnRfdHlw ZSA9PQorCSAgICBGTV9QT1JUX1RZUEVfUlgpKXsKKwkJdW5zaWduZWQgaW50IHN2cjsKKworCQlz dnIgPSBtZnNwcihTUFJOX1NWUik7CisKKwkJaWYgKChzdnIgJiB+U1ZSX1ZFUl9JR05PUkVfTUFT SykgPT0gU1ZSX0I0ODYwX1JFVjFfVkFMVUUpCisJCQlmbV9wb3J0X2NmZ19iY2Jfd2EocF9sbnhf d3JwX2ZtX3BvcnRfZGV2LT5oX2Rldik7CisJfQorI2VuZGlmIC8qIEZNX0JDQl9FUlJBVEFfQk1J X1NXMDAxICovCisKKwlmbV9wb3J0X2NmZ19idWZfcHJlZml4X2NvbnRlbnQocF9sbnhfd3JwX2Zt X3BvcnRfZGV2LT5oX2RldiwKKwkJCQkgICAgICAgJnBfbG54X3dycF9mbV9wb3J0X2Rldi0+CisJ CQkJCWJ1ZmZfcHJlZml4X2NvbnRlbnQpOworCisJaWYgKGZtX3BvcnRfaW5pdChwX2xueF93cnBf Zm1fcG9ydF9kZXYtPmhfZGV2KSAhPSAwKQorCQlyZXR1cm4gLUVOT1NZUzsKKworLyoqCisgKiBG TWFuIEZpZm8gc2l6ZXMgYmVoaW5kIHRoZSBzY2VuZSI6CisgKiBVc2luZyB0aGUgZm9sbG93aW5n IGZvcm11bGFlICgqKSwgdW5kZXIgYSBzZXQgb2Ygc2ltcGxpZnlpbmcgYXNzdW1wdGlvbnMgKC4p OgorICogLiBhbGwgcG9ydHMgYXJlIGNvbmZpZ3VyZWQgaW4gTm9ybWFsIE1vZGUgKHJhdGhlciB0 aGFuIEluZGVwZW5kZW50IE1vZGUpCisgKiAuIHRoZSBEUEFBIEV0aCBkcml2ZXIgYWxsb2NhdGVz IGJ1ZmZlcnMgb2Ygc2l6ZToKKyAqICAgICAuIE1BWEZSTSArIE5FVF9JUF9BTElHTiArIERQQV9Q UklWX0RBVEFfU0laRSArIERQQV9QQVJTRV9SRVNVTFRTX1NJWkUKKyAqCQkgKyBEUEFfSEFTSF9S RVNVTFRTX1NJWkUsIGkuZS46CisgKiAgICAgICBNQVhGUk0gKyAyICsgMTYgKyBzaXplb2YoZm1f cHJzX3Jlc3VsdF90KSArIDE2LCBpLmUuOgorICogICAgICAgTUFYRlJNICsgNjYKKyAqIC4gZXhj ZXNzaXZlIGJ1ZmZlciBwb29scyBub3QgYWNjb3VudGVkIGZvcgorICoKKyAqKmZvciBSeCBwb3J0 cyBvbiBQNDA4MDoKKyAqICAgICAuIElGU1ogPSBjZWlsKG1heChGTUJNX0VCTVBJW1BCU10pIC8g MjU2KSoyNTYgKyA3KjI1NgorICogICAgIC4gbm8gaW50ZXJuYWwgZnJhbWUgb2Zmc2V0IChGTUJN X1JJTVtGT0ZdID09IDApIC0gb3RoZXJ3aXNlLAorICogICAgIGFkZCB1cCB0byAyNTYgdG8gdGhl IGFib3ZlCisgKgorICoqZm9yIFJ4IHBvcnRzIG9uIFAxMDIzOgorICogICAgIC4gSUZTWiA9IGNl aWwoc2Vjb25kX2xhcmdlc3QoRk1CTV9FQk1QSVtQQlNdIC8gMjU2KSkqMjU2ICsgNyoyNTYsCisg KiAgICAgaWYgYXQgbGVhc3QgMiBicG9vbHMgYXJlIGNvbmZpZ3VyZWQKKyAqICAgICAuIElGU1og PSA4KjI1NiwgaWYgb25seSBhIHNpbmdsZSBicG9vbCBpcyBjb25maWd1cmVkCisgKgorICoqZm9y IFR4IHBvcnRzOgorICogICAgIC4gSUZTWiA9IGNlaWwoZnJhbWVfc2l6ZSAvIDI1NikqMjU2ICsg MyoyNTYKKyAqCQkJKyBGTUJNX1RGUFtEUERFXSoyNTYsIGkuZS46CisgKiAgICAgICBJRlNaID0g Y2VpbChNQVhGUk0gLyAyNTYpKjI1NiArIDMgeCAyNTYgKyBGTUJNX1RGUFtEUERFXSoyNTYKKyAq CisgKipmb3IgT0ggcG9ydHMgb24gUDQwODA6CisgKiAgICAgLiBJRlNaID0gY2VpbChmcmFtZV9z aXplIC8gMjU2KSoyNTYgKyAxKjI1NiArIEZNQk1fUFBbTVhUXSoyNTYKKyAqKmZvciBPSCBwb3J0 cyBvbiBQMTAyMzoKKyAqICAgICAuIElGU1ogPSBjZWlsKGZyYW1lX3NpemUgLyAyNTYpKjI1NiAr IDMqMjU2ICsgRk1CTV9URlBbRFBERV0qMjU2CisgKipmb3IgYm90aCBQNDA4MCBhbmQgUDEwMjM6 CisgKiAgICAgLiAoY29uc2VydmF0aXZlIGRlY2lzaW9ucywgYXNzdW1pbmcgdGhhdCBCTUkgbXVz dCBicmluZyB0aGUgZW50aXJlCisgKiAgICAgZnJhbWUsIG5vdCBvbmx5IHRoZSBmcmFtZSBoZWFk ZXIpCisgKiAgICAgLiBubyBpbnRlcm5hbCBmcmFtZSBvZmZzZXQgKEZNQk1fT0lNW0ZPRl0gPT0g MCkgLSBvdGhlcndpc2UsCisgKiAgICAgYWRkIHVwIHRvIDI1NiB0byB0aGUgYWJvdmUKKyAqCisg KiAuIGZvciBQNDA4MC9QNTAyMC9QMzA0MS9QMjA0MCwgRFBERSBpczoKKyAqICAgICAgICAgICAg ID4gMCBvciAxLCBmb3IgMUdiIHBvcnRzLCBIVyBkZWZhdWx0OiAwCisgKiAgICAgICAgICAgICA+ IDIuLjcgKHJlY29tbWVuZGVkOiAzLi43KSBmb3IgMTBHYiBwb3J0cywgSFcgZGVmYXVsdDogMwor ICogLiBmb3IgUDEwMjMsIERQREUgc2hvdWxkIGJlIDEKKyAqCisgKiAuIGZvciBQMTAyMywgTVhU IGlzIGluIHJhbmdlICgwLi4zMSkKKyAqIC4gZm9yIFA0MDgwLCBNWFQgaXMgaW4gcmFuZ2UgKDAu LjYzKQorICoKKyAqLworCXJldHVybiAwOworfQorCit2b2lkIGZtX3NldF9yeF9wb3J0X3BhcmFt cyhzdHJ1Y3QgZm1fcG9ydCAqcG9ydCwgc3RydWN0IGZtX3BvcnRfcGFyYW1zICpwYXJhbXMpCit7 CisJc3RydWN0IGxueF93cnBfZm1fcG9ydF9kZXZfdCAqcF9sbnhfd3JwX2ZtX3BvcnRfZGV2ID0K Kwkoc3RydWN0IGxueF93cnBfZm1fcG9ydF9kZXZfdCAqKXBvcnQ7CisJaW50IGk7CisKKwlwX2xu eF93cnBfZm1fcG9ydF9kZXYtPnBvcnRfcGFyYW1zLnNwZWNpZmljX3BhcmFtcy4KKwlyeF9wYXJh bXMuZXJyX2ZxaWQgPSBwYXJhbXMtPmVycnE7CisJcF9sbnhfd3JwX2ZtX3BvcnRfZGV2LT5wb3J0 X3BhcmFtcy5zcGVjaWZpY19wYXJhbXMucnhfcGFyYW1zLgorCWRmbHRfZnFpZCA9IHBhcmFtcy0+ ZGVmcTsKKwlwX2xueF93cnBfZm1fcG9ydF9kZXYtPnBvcnRfcGFyYW1zLnNwZWNpZmljX3BhcmFt cy5yeF9wYXJhbXMuCisJICAgIGV4dF9idWZfcG9vbHMubnVtX29mX3Bvb2xzX3VzZWQgPSBwYXJh bXMtPm51bV9wb29sczsKKwlmb3IgKGkgPSAwOyBpIDwgcGFyYW1zLT5udW1fcG9vbHM7IGkrKykg eworCQlwX2xueF93cnBfZm1fcG9ydF9kZXYtPnBvcnRfcGFyYW1zLnNwZWNpZmljX3BhcmFtcy4K KwkJICAgIHJ4X3BhcmFtcy5leHRfYnVmX3Bvb2xzLmV4dF9idWZfcG9vbFtpXS5pZCA9CisJCSAg ICBwYXJhbXMtPnBvb2xfcGFyYW1baV0uaWQ7CisJCXBfbG54X3dycF9mbV9wb3J0X2Rldi0+cG9y dF9wYXJhbXMuc3BlY2lmaWNfcGFyYW1zLgorCQkgICAgcnhfcGFyYW1zLmV4dF9idWZfcG9vbHMu ZXh0X2J1Zl9wb29sW2ldLnNpemUgPQorCQkgICAgcGFyYW1zLT5wb29sX3BhcmFtW2ldLnNpemU7 CisJfQorCisJcF9sbnhfd3JwX2ZtX3BvcnRfZGV2LT5idWZmX3ByZWZpeF9jb250ZW50LnByaXZf ZGF0YV9zaXplID0KKwkgICAgcGFyYW1zLT5wcml2X2RhdGFfc2l6ZTsKKwlwX2xueF93cnBfZm1f cG9ydF9kZXYtPmJ1ZmZfcHJlZml4X2NvbnRlbnQucGFzc19wcnNfcmVzdWx0ID0KKwkgICAgcGFy YW1zLT5wYXJzZV9yZXN1bHRzOworCXBfbG54X3dycF9mbV9wb3J0X2Rldi0+YnVmZl9wcmVmaXhf Y29udGVudC5wYXNzX2hhc2hfcmVzdWx0ID0KKwkgICAgcGFyYW1zLT5oYXNoX3Jlc3VsdHM7CisJ cF9sbnhfd3JwX2ZtX3BvcnRfZGV2LT5idWZmX3ByZWZpeF9jb250ZW50LnBhc3NfdGltZV9zdGFt cCA9CisJcGFyYW1zLT50aW1lX3N0YW1wOworCXBfbG54X3dycF9mbV9wb3J0X2Rldi0+YnVmZl9w cmVmaXhfY29udGVudC5kYXRhX2FsaWduID0KKwlwYXJhbXMtPmRhdGFfYWxpZ247CisKKwlpbml0 X2ZtX3BvcnRfZGV2KHBfbG54X3dycF9mbV9wb3J0X2Rldik7Cit9CitFWFBPUlRfU1lNQk9MKGZt X3NldF9yeF9wb3J0X3BhcmFtcyk7CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20g b2hfcHJvYmUgYXMgd2VsbCwgdGh1cyBpdCBjb250YWlucyBvaCBwb3J0CisgKiBzcGVjaWZpYyBw YXJhbWV0ZXJzIChtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBjaGVja2VkKQorICoqLwordm9pZCBm bV9zZXRfdHhfcG9ydF9wYXJhbXMoc3RydWN0IGZtX3BvcnQgKnBvcnQsIHN0cnVjdCBmbV9wb3J0 X3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBsbnhfd3JwX2ZtX3BvcnRfZGV2X3QgKnBfbG54 X3dycF9mbV9wb3J0X2RldiA9CisJKHN0cnVjdCBsbnhfd3JwX2ZtX3BvcnRfZGV2X3QgKilwb3J0 OworCisJcF9sbnhfd3JwX2ZtX3BvcnRfZGV2LT5wb3J0X3BhcmFtcy5zcGVjaWZpY19wYXJhbXMu bm9uX3J4X3BhcmFtcy4KKwllcnJfZnFpZCA9IHBhcmFtcy0+ZXJycTsKKwlwX2xueF93cnBfZm1f cG9ydF9kZXYtPnBvcnRfcGFyYW1zLnNwZWNpZmljX3BhcmFtcy5ub25fcnhfcGFyYW1zLgorCWRm bHRfZnFpZCA9IHBhcmFtcy0+ZGVmcTsKKworCXBfbG54X3dycF9mbV9wb3J0X2Rldi0+YnVmZl9w cmVmaXhfY29udGVudC5wcml2X2RhdGFfc2l6ZSA9CisJICAgIHBhcmFtcy0+cHJpdl9kYXRhX3Np emU7CisJcF9sbnhfd3JwX2ZtX3BvcnRfZGV2LT5idWZmX3ByZWZpeF9jb250ZW50LnBhc3NfcHJz X3Jlc3VsdCA9CisJICAgIHBhcmFtcy0+cGFyc2VfcmVzdWx0czsKKwlwX2xueF93cnBfZm1fcG9y dF9kZXYtPmJ1ZmZfcHJlZml4X2NvbnRlbnQucGFzc19oYXNoX3Jlc3VsdCA9CisJICAgIHBhcmFt cy0+aGFzaF9yZXN1bHRzOworCXBfbG54X3dycF9mbV9wb3J0X2Rldi0+YnVmZl9wcmVmaXhfY29u dGVudC5wYXNzX3RpbWVfc3RhbXAgPQorCXBhcmFtcy0+dGltZV9zdGFtcDsKKwlwX2xueF93cnBf Zm1fcG9ydF9kZXYtPmJ1ZmZfcHJlZml4X2NvbnRlbnQuZGF0YV9hbGlnbiA9CisJcGFyYW1zLT5k YXRhX2FsaWduOworCisJaW5pdF9mbV9wb3J0X2RldihwX2xueF93cnBfZm1fcG9ydF9kZXYpOwor fQorRVhQT1JUX1NZTUJPTChmbV9zZXRfdHhfcG9ydF9wYXJhbXMpOworCitzdGF0aWMgdm9pZCBm cmVlX2ZtX3BvcnRfZGV2KHN0cnVjdCBsbnhfd3JwX2ZtX3BvcnRfZGV2X3QKKwkJCSAgICAgKnBf bG54X3dycF9mbV9wb3J0X2RldikKK3sKKwlzdHJ1Y3QgbG54X3dycF9mbV9kZXZfdCAqcF9sbnhf d3JwX2ZtX2RldiA9CisJICAgIChzdHJ1Y3QgbG54X3dycF9mbV9kZXZfdCAqKXBfbG54X3dycF9m bV9wb3J0X2Rldi0+aF9sbnhfd3JwX2ZtX2RldjsKKworCWlmICghcF9sbnhfd3JwX2ZtX3BvcnRf ZGV2LT5hY3RpdmUpCisJCXJldHVybjsKKworCWlmIChwX2xueF93cnBfZm1fcG9ydF9kZXYtPmhf ZGV2KQorCQlmbV9wb3J0X2ZyZWUoKHN0cnVjdCBmbV9wb3J0ICopcF9sbnhfd3JwX2ZtX3BvcnRf ZGV2KTsKKworCWRldm1faW91bm1hcChwX2xueF93cnBfZm1fZGV2LT5kZXYsCisJCSAgICAgVUlO VF9UT19QVFIocF9sbnhfd3JwX2ZtX3BvcnRfZGV2LT5iYXNlX2FkZHIpKTsKKwlfX2Rldm1fcmVs ZWFzZV9yZWdpb24ocF9sbnhfd3JwX2ZtX2Rldi0+ZGV2LCBwX2xueF93cnBfZm1fZGV2LT5yZXMs CisJCQkgICAgICBwX2xueF93cnBfZm1fcG9ydF9kZXYtPnBoeXNfYmFzZV9hZGRyLAorCQkJICAg ICAgcF9sbnhfd3JwX2ZtX3BvcnRfZGV2LT5tZW1fc2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQgLypf X2RldmluaXQqLyBmbV9wb3J0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldikK K3sKKwlzdHJ1Y3QgbG54X3dycF9mbV9wb3J0X2Rldl90ICpwX2xueF93cnBfZm1fcG9ydF9kZXY7 CisJc3RydWN0IGxueF93cnBfZm1fZGV2X3QgKnBfbG54X3dycF9mbV9kZXY7CisJc3RydWN0IGRl dmljZSAqZGV2OworCisJZGV2ID0gJm9mX2Rldi0+ZGV2OworCisJcF9sbnhfd3JwX2ZtX3BvcnRf ZGV2ID0gcmVhZF9mbV9wb3J0X2Rldl90cmVlX25vZGUob2ZfZGV2KTsKKwlpZiAoIXBfbG54X3dy cF9mbV9wb3J0X2RldikKKwkJcmV0dXJuIC1FSU87CisJLyogUG9ydCBjYW4gYmUgaW5hY3RpdmUs IHRodXMgd2lsbCBub3QgYmUgcHJvYmVkOgorCSAqIC0gaW4gcGVyZm9ybWFuY2UgbW9kZSwgT0gg cG9ydHMgYXJlIGRpc2FibGVkICAuLi4KKwkgKiovCisJaWYgKCFwX2xueF93cnBfZm1fcG9ydF9k ZXYtPmFjdGl2ZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoY29uZmlndXJlX2ZtX3BvcnRfZGV2KHBf bG54X3dycF9mbV9wb3J0X2RldikgIT0gMCkKKwkJcmV0dXJuIC1FSU87CisKKwlkZXZfc2V0X2Ry dmRhdGEoZGV2LCBwX2xueF93cnBfZm1fcG9ydF9kZXYpOworCisJcF9sbnhfd3JwX2ZtX2RldiA9 IChzdHJ1Y3QgbG54X3dycF9mbV9kZXZfdCAqKXBfbG54X3dycF9mbV9wb3J0X2Rldi0+CisJCQkg ICBoX2xueF93cnBfZm1fZGV2OworCisJaWYgKHBfbG54X3dycF9mbV9wb3J0X2Rldi0+cG9ydF9w YXJhbXMucG9ydF90eXBlID09CisJCUZNX1BPUlRfVFlQRV9SWCkgeworCQlzbnByaW50ZihwX2xu eF93cnBfZm1fcG9ydF9kZXYtPm5hbWUsCisJCQkgc2l6ZW9mKHBfbG54X3dycF9mbV9wb3J0X2Rl di0+bmFtZSksCisJCQkgIiVzLXBvcnQtcnglZCIsCisJCQkgcF9sbnhfd3JwX2ZtX2Rldi0+bmFt ZSwgcF9sbnhfd3JwX2ZtX3BvcnRfZGV2LT5pZCk7CisJfSBlbHNlIGlmIChwX2xueF93cnBfZm1f cG9ydF9kZXYtPnBvcnRfcGFyYW1zLnBvcnRfdHlwZSA9PQorCQlGTV9QT1JUX1RZUEVfVFgpIHsK KwkJc25wcmludGYocF9sbnhfd3JwX2ZtX3BvcnRfZGV2LT5uYW1lLAorCQkJIHNpemVvZihwX2xu eF93cnBfZm1fcG9ydF9kZXYtPm5hbWUpLAorCQkJICIlcy1wb3J0LXR4JWQiLAorCQkJIHBfbG54 X3dycF9mbV9kZXYtPm5hbWUsIHBfbG54X3dycF9mbV9wb3J0X2Rldi0+aWQpOworCX0gZWxzZSBp ZiAocF9sbnhfd3JwX2ZtX3BvcnRfZGV2LT5wb3J0X3BhcmFtcy5wb3J0X3R5cGUgPT0KKwkJRk1f UE9SVF9UWVBFX09QKSB7CisJCXNucHJpbnRmKHBfbG54X3dycF9mbV9wb3J0X2Rldi0+bmFtZSwK KwkJCSBzaXplb2YocF9sbnhfd3JwX2ZtX3BvcnRfZGV2LT5uYW1lKSwKKwkJCSAiJXMtcG9ydC1v aCVkIiwKKwkJCSBwX2xueF93cnBfZm1fZGV2LT5uYW1lLCBwX2xueF93cnBfZm1fcG9ydF9kZXYt PmlkICsgMSk7CisJfQorI2lmZGVmIEZNX1RYX0lOVkFMSURfRUNDX0VSUkFUQV8xMEdNQUNfQTAw OQorCWlmIChwX2xueF93cnBfZm1fcG9ydF9kZXYtPmZtX3Jldl9pbmZvLm1ham9yX3JldiA8IDYg JiYKKwkgICAgcF9sbnhfd3JwX2ZtX3BvcnRfZGV2LT5mbV9yZXZfaW5mby5tYWpvcl9yZXYgIT0g NCkKKwkJZm1fZGlzYWJsZV9yYW1zX2VjYyhwX2xueF93cnBfZm1fZGV2LT5oX2Rldik7CisjZW5k aWYgLyogRk1fVFhfSU5WQUxJRF9FQ0NfRVJSQVRBXzEwR01BQ19BMDA5ICovCisKKwlwcl9kZWJ1 ZygiJXMgcHJvYmVkXG4iLCBwX2xueF93cnBfZm1fcG9ydF9kZXYtPm5hbWUpOworCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgZm1fcG9ydF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqb2ZfZGV2KQoreworCXN0cnVjdCBsbnhfd3JwX2ZtX3BvcnRfZGV2X3QgKnBfbG54X3dycF9m bV9wb3J0X2RldjsKKwlzdHJ1Y3QgbG54X3dycF9mbV9kZXZfdCAqcF9sbnhfd3JwX2ZtX2RldjsK KwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisKKwlkZXYgPSAmb2ZfZGV2LT5kZXY7CisJcF9sbnhfd3Jw X2ZtX3BvcnRfZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlwX2xueF93cnBfZm1fZGV2 ID0gKHN0cnVjdCBsbnhfd3JwX2ZtX2Rldl90ICopcF9sbnhfd3JwX2ZtX3BvcnRfZGV2LT4KKwkJ CSAgIGhfbG54X3dycF9mbV9kZXY7CisKKwlmcmVlX2ZtX3BvcnRfZGV2KHBfbG54X3dycF9mbV9w b3J0X2Rldik7CisKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBmbV9wb3J0X21hdGNoW10gPSB7 CisJeworCSAuY29tcGF0aWJsZSA9ICJmc2wsZm1hbi12My1wb3J0LW9oIn0sCisJeworCSAuY29t cGF0aWJsZSA9ICJmc2wsZm1hbi12Mi1wb3J0LW9oIn0sCisJeworCSAuY29tcGF0aWJsZSA9ICJm c2wsZm1hbi12My1wb3J0LXJ4In0sCisJeworCSAuY29tcGF0aWJsZSA9ICJmc2wsZm1hbi12Mi1w b3J0LXJ4In0sCisJeworCSAuY29tcGF0aWJsZSA9ICJmc2wsZm1hbi12My1wb3J0LXR4In0sCisJ eworCSAuY29tcGF0aWJsZSA9ICJmc2wsZm1hbi12Mi1wb3J0LXR4In0sCisJe30KK307CisKKyNp Zm5kZWYgTU9EVUxFCitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBmbV9wb3J0X21hdGNoKTsKKyNl bmRpZiAvKiAhTU9EVUxFICovCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGZtX3Bv cnRfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCSAgIC5uYW1lID0gImZzbC1mbWFuLXBvcnQi LAorCQkgICAub2ZfbWF0Y2hfdGFibGUgPSBmbV9wb3J0X21hdGNoLAorCQkgICAub3duZXIgPSBU SElTX01PRFVMRSwKKwkJICAgfSwKKwkucHJvYmUgPSBmbV9wb3J0X3Byb2JlLAorCS5yZW1vdmUg PSBmbV9wb3J0X3JlbW92ZQorfTsKKworaW50IGxueHdycF9mbV9wb3J0X2luaXQodm9pZCkKK3sK KwkvKiBSZWdpc3RlciB0byB0aGUgRFRCIGZvciBiYXNpYyBGTSBwb3J0IEFQSSAqLworCWlmIChw bGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmZtX3BvcnRfZHJpdmVyKSkKKwkJcmV0dXJuIC1FTk9E RVY7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBsbnh3cnBfZm1fcG9ydF9mcmVlKHZvaWQpCit7 CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmZtX3BvcnRfZHJpdmVyKTsKK30KKworc3Rh dGljIGludCBfX2luaXQgX19jb2xkIGZtX3BvcnRfbG9hZCh2b2lkKQoreworCWlmIChsbnh3cnBf Zm1fcG9ydF9pbml0KCkgIT0gMCkgeworCQlwcl9jcml0KCJGYWlsZWQgdG8gaW5pdCBGTSBQb3J0 cyB3cmFwcGVyIVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXByX2luZm8oIkZyZWVz Y2FsZSBGTSBQb3J0cyBtb2R1bGVcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lk IF9fZXhpdCBfX2NvbGQgZm1fcG9ydF91bmxvYWQodm9pZCkKK3sKKwlsbnh3cnBfZm1fcG9ydF9m cmVlKCk7Cit9CisKK21vZHVsZV9pbml0KGZtX3BvcnRfbG9hZCk7Cittb2R1bGVfZXhpdChmbV9w b3J0X3VubG9hZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUv Zm1hbi9pbmMvZm1fZXh0LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9p bmMvZm1fZXh0LmgKaW5kZXggMzNlMzAwMC4uOTJkM2VhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9u ZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vaW5jL2ZtX2V4dC5oCisrKyBiL2RyaXZlcnMvbmV0 L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2luYy9mbV9leHQuaApAQCAtNTgsNiArNTgsNjQgQEAg ZW51bSBmbV9wb3J0X3NwZWVkIHsKICNkZWZpbmUgRk1fTUFYX05VTV9PRl9QQVJUSVRJT05TICAg IDY0CSAvKiBNYXhpbXVtIG51bWJlciBvZiBwYXJ0aXRpb25zICovCiAjZGVmaW5lIEZNX1BIWVNf QUREUkVTU19TSVpFICAgICAgICA2CSAvKiBGTSBQaHlzaWNhbCBhZGRyZXNzIHNpemUgKi8KIAor LyogRk0gRnJhbWUgZGVzY3JpcHRvciBtYWNyb3MgICovCisvKiBGcmFtZSBxdWV1ZSBDb250ZXh0 IE92ZXJyaWRlICovCisjZGVmaW5lIEZNX0ZEX0NNRF9GQ08gICAgICAgICAgICAgICAgICAgMHg4 MDAwMDAwMAorI2RlZmluZSBGTV9GRF9DTURfUlBEICAgICAgICAgICAgICAgICAgIDB4NDAwMDAw MDAgIC8qIFJlYWQgUHJlcGVuZGVkIERhdGEgKi8KKy8qIFVwZGF0ZSBQcmVwZW5kZWQgRGF0YSAq LworI2RlZmluZSBGTV9GRF9DTURfVVBEICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNk ZWZpbmUgRk1fRkRfQ01EX0RUQyAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwICAvKiBEbyBM NCBDaGVja3N1bSAqLworLyogRGlkbid0IGNhbGN1bGF0ZSBMNCBDaGVja3N1bSAqLworI2RlZmlu ZSBGTV9GRF9DTURfRENMNEMgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKy8qIENvbmZpcm1h dGlvbiBGcmFtZSBRdWV1ZSAqLworI2RlZmluZSBGTV9GRF9DTURfQ0ZRICAgICAgICAgICAgICAg ICAgIDB4MDBmZmZmZmYKKworLyogTm90IGZvciBSeC1Qb3J0ISBVbnN1cHBvcnRlZCBGb3JtYXQg Ki8KKyNkZWZpbmUgRk1fRkRfRVJSX1VOU1VQUE9SVEVEX0ZPUk1BVCAgICAweDA0MDAwMDAwCisv KiBOb3QgZm9yIFJ4LVBvcnQhIExlbmd0aCBFcnJvciAqLworI2RlZmluZSBGTV9GRF9FUlJfTEVO R1RIICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgRk1fRkRfRVJSX0RNQSAgICAg ICAgICAgICAgICAgICAweDAxMDAwMDAwICAvKiBETUEgRGF0YSBlcnJvciAqLworCisvKiBJUFIg ZnJhbWUgKG5vdCBlcnJvcikgKi8KKyNkZWZpbmUgRk1fRkRfSVBSICAgICAgICAgICAgICAgICAg ICAgICAweDAwMDAwMDAxCisvKiBJUFIgbm9uLWNvbnNpc3RlbnQtc3AgKi8KKyNkZWZpbmUgRk1f RkRfRVJSX0lQUl9OQ1NQICAgICAgICAgICAgICAoMHgwMDEwMDAwMCB8IEZNX0ZEX0lQUikKKy8q IElQUiBlcnJvciAqLworI2RlZmluZSBGTV9GRF9FUlJfSVBSICAgICAgICAgICAgICAgICAgICgw eDAwMjAwMDAwIHwgRk1fRkRfSVBSKQorLyogSVBSIHRpbWVvdXQgKi8KKyNkZWZpbmUgRk1fRkRf RVJSX0lQUl9UTyAgICAgICAgICAgICAgICAoMHgwMDMwMDAwMCB8IEZNX0ZEX0lQUikKKworLyog UnggRklGTyBvdmVyZmxvdywgRkNTIGVycm9yLCBjb2RlIGVycm9yLCBydW5uaW5nIGRpc3Bhcml0 eSBlcnJvcgorICogKFNHTUlJIGFuZCBUQkkgbW9kZXMpLCBGSUZPIHBhcml0eSBlcnJvci4gUEhZ IFNlcXVlbmNlIGVycm9yLAorICogUEhZIGVycm9yIGNvbnRyb2wgY2hhcmFjdGVyIGRldGVjdGVk LgorICovCisjZGVmaW5lIEZNX0ZEX0VSUl9QSFlTSUNBTCAgICAgICAgICAgICAgMHgwMDA4MDAw MAorLyogRnJhbWUgdG9vIGxvbmcgT1IgRnJhbWUgc2l6ZSBleGNlZWRzIG1heF9sZW5ndGhfZnJh bWUgICovCisjZGVmaW5lIEZNX0ZEX0VSUl9TSVpFICAgICAgICAgICAgICAgICAgMHgwMDA0MDAw MAorLyogY2xhc3NpZmljYXRpb24gZGlzY2FyZCAqLworI2RlZmluZSBGTV9GRF9FUlJfQ0xTX0RJ U0NBUkQgICAgICAgICAgIDB4MDAwMjAwMDAKKy8qIEV4dHJhY3QgT3V0IG9mIEZyYW1lICovCisj ZGVmaW5lIEZNX0ZEX0VSUl9FWFRSQUNUSU9OICAgICAgICAgICAgMHgwMDAwODAwMAorLyogTm8g U2NoZW1lIFNlbGVjdGVkICovCisjZGVmaW5lIEZNX0ZEX0VSUl9OT19TQ0hFTUUgICAgICAgICAg ICAgMHgwMDAwNDAwMAorLyogS2V5c2l6ZSBPdmVyZmxvdyAqLworI2RlZmluZSBGTV9GRF9FUlJf S0VZU0laRV9PVkVSRkxPVyAgICAgIDB4MDAwMDIwMDAKKy8qIEZyYW1lIGNvbG9yIGlzIHJlZCAq LworI2RlZmluZSBGTV9GRF9FUlJfQ09MT1JfUkVEICAgICAgICAgICAgIDB4MDAwMDA4MDAKKy8q IEZyYW1lIGNvbG9yIGlzIHllbGxvdyAqLworI2RlZmluZSBGTV9GRF9FUlJfQ09MT1JfWUVMTE9X ICAgICAgICAgIDB4MDAwMDA0MDAKKy8qIFBhcnNlciBUaW1lIG91dCBFeGNlZWQgKi8KKyNkZWZp bmUgRk1fRkRfRVJSX1BSU19USU1FT1VUICAgICAgICAgICAweDAwMDAwMDgwCisvKiBJbnZhbGlk IFNvZnQgUGFyc2VyIGluc3RydWN0aW9uICovCisjZGVmaW5lIEZNX0ZEX0VSUl9QUlNfSUxMX0lO U1RSVUNUICAgICAgMHgwMDAwMDA0MAorLyogSGVhZGVyIGVycm9yIHdhcyBpZGVudGlmaWVkIGR1 cmluZyBwYXJzaW5nICovCisjZGVmaW5lIEZNX0ZEX0VSUl9QUlNfSERSX0VSUiAgICAgICAgICAg MHgwMDAwMDAyMAorLyogRnJhbWUgcGFyc2VkIGJleWluZCAyNTYgZmlyc3QgYnl0ZXMgKi8KKyNk ZWZpbmUgRk1fRkRfRVJSX0JMT0NLX0xJTUlUX0VYQ0VFREVEICAweDAwMDAwMDA4CisKKy8qIG5v biBGcmFtZS1NYW5hZ2VyIGVycm9yICovCisjZGVmaW5lIEZNX0ZEX1JYX1NUQVRVU19FUlJfTk9O X0ZNICAgICAgMHgwMDQwMDAwMAorCiAvKiBGTSBwaHlzaWNhbCBBZGRyZXNzICovCiBzdHJ1Y3Qg Zm1fcGh5c19hZGRyX3QgewogCXVpbnQ4X3QgaGlnaDsJICAgICAgLyogSGlnaCBwYXJ0IG9mIHRo ZSBwaHlzaWNhbCBhZGRyZXNzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9m cmVlc2NhbGUvZm1hbi9pbmMvZm1fcG9ydF9leHQuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Zy ZWVzY2FsZS9mbWFuL2luYy9mbV9wb3J0X2V4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjEyNGYzMTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5l dC9mcmVlc2NhbGUvZm1hbi9pbmMvZm1fcG9ydF9leHQuaApAQCAtMCwwICsxLDM5NyBAQAorLyoK KyAqIENvcHlyaWdodCAyMDA4LTIwMTUgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICoK KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAgKiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog ICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo ZSBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEZyZWVzY2FsZSBT ZW1pY29uZHVjdG9yIG5vciB0aGUKKyAqICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMg bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgICBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy bWlzc2lvbi4KKyAqCisgKgorICogQUxURVJOQVRJVkVMWSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUg ZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgKCJHUEwiKSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZv dW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhhdCBMaWNlbnNlIG9yIChhdCB5b3VyIG9w dGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP VklERUQgQlkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW RU5UIFNIQUxMIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAq IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN QUdFLgorICovCisKKy8qRmlsZSAgICAgICAgICBmbV9wb3J0X2V4dC5oCisgKkZNLVBvcnQgQXBw bGljYXRpb24gUHJvZ3JhbW1pbmcgSW50ZXJmYWNlLgorICovCisjaWZuZGVmIF9fRk1fUE9SVF9F WFQKKyNkZWZpbmUgX19GTV9QT1JUX0VYVAorCisjaW5jbHVkZSAic2VydmljZS5oIgorI2luY2x1 ZGUgImZtX2V4dC5oIgorI2luY2x1ZGUgIm5ldF9leHQuaCIKKworLyogRk0gUG9ydCBBUEkKKyAq IFRoZSBGTSB1c2VzIGEgZ2VuZXJhbCBtb2R1bGUgY2FsbGVkICJwb3J0IiB0byByZXByZXNlbnQg YSBUeCBwb3J0IChNQUMpLAorICogYW4gUnggcG9ydCAoTUFDKSBvciBPZmZsaW5lIFBhcnNpbmcg cG9ydC4KKyAqIFRoZSBudW1iZXIgb2YgcG9ydHMgaW4gYW4gRk0gdmFyaWVzIGJldHdlZW4gU09D cy4KKyAqIFRoZSBTVyBkcml2ZXIgbWFuYWdlcyB0aGVzZSBwb3J0cyBhcyBzdWItbW9kdWxlcyBv ZiB0aGUgRk0saS5lLiBhZnRlciBhbgorICogRk0gaXMgaW5pdGlhbGl6ZWQsIGl0cyBwb3J0cyBt YXkgYmUgaW5pdGlhbGl6ZWQgYW5kIG9wZXJhdGVkIHVwb24uCisgKiBUaGUgcG9ydCBpcyBpbml0 aWFsaXplZCBhd2FyZSBvZiBpdHMgdHlwZSwgYnV0IG90aGVyIGZ1bmN0aW9ucyBvbiBhIHBvcnQK KyAqIG1heSBiZSBpbmRpZmZlcmVudCB0byBpdHMgdHlwZS4gV2hlbiBuZWNlc3NhcnksIHRoZSBk cml2ZXIgdmVyaWZpZXMKKyAqIGNvaGVyZW5jZSBhbmQgcmV0dXJucyBlcnJvciBpZiBhcHBsaWNh YmxlLgorICogT24gaW5pdGlhbGl6YXRpb24sIHVzZXIgc3BlY2lmaWVzIHRoZSBwb3J0IHR5cGUg YW5kIGl0J3MgaW5kZXggKHJlbGF0aXZlCisgKiB0byB0aGUgcG9ydCdzIHR5cGUpIC0gYWx3YXlz IHN0YXJ0aW5nIGF0IDAuCisgKi8KKworLyogUG9ydCBpbnRlcnJ1cHRzICovCitlbnVtIGZtX3Bv cnRfZXhjZXB0aW9ucyB7CisJRk1fUE9SVF9FWENFUFRJT05fSU1fQlVTWQkvKiBJbmRlcGVuZGVu dC1Nb2RlIFJ4LUJVU1kgKi8KK307CisKKy8qIEdlbmVyYWwgRk0gUG9ydCBkZWZpbmVzICovCisv KiBOdW1iZXIgb2YgNCBieXRlcyB3b3JkcyBpbiBwYXJzZXIgcmVzdWx0ICovCisjZGVmaW5lIEZN X1BPUlRfUFJTX1JFU1VMVF9OVU1fT0ZfV09SRFMgICAgIDgKKy8qIEB9ICovCisKKy8qIEZNIEZy YW1lIGVycm9yICovCisvKiBGcmFtZSBEZXNjcmlwdG9yIGVycm9ycyAqLworLyogTm90IGZvciBS eC1Qb3J0ISBVbnN1cHBvcnRlZCBGb3JtYXQgKi8KKyNkZWZpbmUgRk1fUE9SVF9GUk1fRVJSX1VO U1VQUE9SVEVEX0ZPUk1BVAlGTV9GRF9FUlJfVU5TVVBQT1JURURfRk9STUFUCisvKiBOb3QgZm9y IFJ4LVBvcnQhIExlbmd0aCBFcnJvciAqLworI2RlZmluZSBGTV9QT1JUX0ZSTV9FUlJfTEVOR1RI CQkJRk1fRkRfRVJSX0xFTkdUSAorLyogRE1BIERhdGEgZXJyb3IgKi8KKyNkZWZpbmUgRk1fUE9S VF9GUk1fRVJSX0RNQQkJCUZNX0ZEX0VSUl9ETUEKKy8qIG5vbiBGcmFtZS1NYW5hZ2VyIGVycm9y OyBwcm9iYWJseSBjb21lIGZyb20gU0VDIHRoYXQgd2FzIGNoYWluZWQgdG8gRk0gKi8KKyNkZWZp bmUgRk1fUE9SVF9GUk1fRVJSX05PTl9GTQkJCUZNX0ZEX1JYX1NUQVRVU19FUlJfTk9OX0ZNCisg LyogSVBSIGVycm9yICovCisjZGVmaW5lIEZNX1BPUlRfRlJNX0VSUl9JUFJFCQkJKEZNX0ZEX0VS Ul9JUFIgJiB+Rk1fRkRfSVBSKQorLyogSVBSIG5vbi1jb25zaXN0ZW50LXNwICovCisjZGVmaW5l IEZNX1BPUlRfRlJNX0VSUl9JUFJfTkNTUAkJKEZNX0ZEX0VSUl9JUFJfTkNTUCAmCVwKKwkJCQkJ CX5GTV9GRF9JUFIpCisKKy8qIE9ic29sZXRlOyB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVy ZSAqLworI2RlZmluZSBGTV9QT1JUX0ZSTV9FUlJfSVBGRQkJCTAKKworLyogUnggRklGTyBvdmVy ZmxvdywgRkNTIGVycm9yLCBjb2RlIGVycm9yLCBydW5uaW5nIGRpc3Bhcml0eQorICogZXJyb3Ig KFNHTUlJIGFuZCBUQkkgbW9kZXMpLCBGSUZPIHBhcml0eSBlcnJvci4KKyAqIFBIWSBTZXF1ZW5j ZSBlcnJvciwgUEhZIGVycm9yIGNvbnRyb2wgY2hhcmFjdGVyIGRldGVjdGVkLgorICoqLworI2Rl ZmluZSBGTV9QT1JUX0ZSTV9FUlJfUEhZU0lDQUwgICAgICAgICAgICAgICAgRk1fRkRfRVJSX1BI WVNJQ0FMCisvKiBGcmFtZSB0b28gbG9uZyBPUiBGcmFtZSBzaXplIGV4Y2VlZHMgbWF4X2xlbmd0 aF9mcmFtZSAgKi8KKyNkZWZpbmUgRk1fUE9SVF9GUk1fRVJSX1NJWkUgICAgICAgICAgICAgICAg ICAgIEZNX0ZEX0VSUl9TSVpFCisvKiBpbmRpY2F0ZXMgYSBjbGFzc2lmaWVyICJkcm9wIiBvcGVy YXRpb24gKi8KKyNkZWZpbmUgRk1fUE9SVF9GUk1fRVJSX0NMU19ESVNDQVJEICAgICAgICAgICAg IEZNX0ZEX0VSUl9DTFNfRElTQ0FSRAorLyogRXh0cmFjdCBPdXQgb2YgRnJhbWUgKi8KKyNkZWZp bmUgRk1fUE9SVF9GUk1fRVJSX0VYVFJBQ1RJT04gICAgICAgICAgICAgIEZNX0ZEX0VSUl9FWFRS QUNUSU9OCisvKiBObyBTY2hlbWUgU2VsZWN0ZWQgKi8KKyNkZWZpbmUgRk1fUE9SVF9GUk1fRVJS X05PX1NDSEVNRSAgICAgICAgICAgICAgIEZNX0ZEX0VSUl9OT19TQ0hFTUUKKy8qIEtleXNpemUg T3ZlcmZsb3cgKi8KKyNkZWZpbmUgRk1fUE9SVF9GUk1fRVJSX0tFWVNJWkVfT1ZFUkZMT1cgICAg ICAgIEZNX0ZEX0VSUl9LRVlTSVpFX09WRVJGTE9XCisvKiBGcmFtZSBjb2xvciBpcyByZWQgKi8K KyNkZWZpbmUgRk1fUE9SVF9GUk1fRVJSX0NPTE9SX1JFRCAgICAgICAgICAgICAgIEZNX0ZEX0VS Ul9DT0xPUl9SRUQKKy8qIEZyYW1lIGNvbG9yIGlzIHllbGxvdyAqLworI2RlZmluZSBGTV9QT1JU X0ZSTV9FUlJfQ09MT1JfWUVMTE9XICAgICAgICAgICAgRk1fRkRfRVJSX0NPTE9SX1lFTExPVwor LyogUGFyc2VyIFRpbWUgb3V0IEV4Y2VlZCAqLworI2RlZmluZSBGTV9QT1JUX0ZSTV9FUlJfUFJT X1RJTUVPVVQgICAgICAgICAgICAgRk1fRkRfRVJSX1BSU19USU1FT1VUCisvKiBJbnZhbGlkIFNv ZnQgUGFyc2VyIGluc3RydWN0aW9uICovCisjZGVmaW5lIEZNX1BPUlRfRlJNX0VSUl9QUlNfSUxM X0lOU1RSVUNUICAgICAgICBGTV9GRF9FUlJfUFJTX0lMTF9JTlNUUlVDVAorLyogSGVhZGVyIGVy cm9yIHdhcyBpZGVudGlmaWVkIGR1cmluZyBwYXJzaW5nICovCisjZGVmaW5lIEZNX1BPUlRfRlJN X0VSUl9QUlNfSERSX0VSUiAgICAgICAgICAgICBGTV9GRF9FUlJfUFJTX0hEUl9FUlIKKy8qIEZy YW1lIHBhcnNlZCBiZXlpbmQgMjU2IGZpcnN0IGJ5dGVzICovCisjZGVmaW5lIEZNX1BPUlRfRlJN X0VSUl9CTE9DS19MSU1JVF9FWENFRURFRCAgICBGTV9GRF9FUlJfQkxPQ0tfTElNSVRfRVhDRUVE RUQKKy8qIEZQTSBGcmFtZSBQcm9jZXNzaW5nIFRpbWVvdXQgRXhjZWVkZWQgKi8KKyNkZWZpbmUg Rk1fUE9SVF9GUk1fRVJSX1BST0NFU1NfVElNRU9VVCAgICAgICAgIDB4MDAwMDAwMDEKKworLyog Rk0gUG9ydCBJbml0aWFsaXphdGlvbiBVbml0ICovCisKKy8qRGVzY3JpcHRpb24gICBFeGNlcHRp b25zIHVzZXIgY2FsbGJhY2sgcm91dGluZSwgd2lsbCBiZSBjYWxsZWQgdXBvbiBhbgorICoJCWV4 Y2VwdGlvbiBwYXNzaW5nIHRoZSBleGNlcHRpb24gaWRlbnRpZmljYXRpb24uCisgKiAgUGFyYW1b aW5dICAgICBoX2FwcCAgICAgIC0gVXNlcidzIGFwcGxpY2F0aW9uIGRlc2NyaXB0b3IuCisgKiAg UGFyYW1baW5dICAgICBleGNlcHRpb24gIC0gVGhlIGV4Y2VwdGlvbi4KKyAqLwordHlwZWRlZiB2 b2lkIChmbV9wb3J0X2V4Y2VwdGlvbl9jYikgKHZvaWQgKmhfYXBwLAorCQkJCQkgIGVudW0gZm1f cG9ydF9leGNlcHRpb25zIGV4Y2VwdGlvbik7CisKKy8qIEEgc3RydWN0dXJlIGZvciBhZGRpdGlv bmFsIFJ4IHBvcnQgcGFyYW1ldGVycyAqLworc3RydWN0IGZtX3BvcnRfcnhfcGFyYW1zX3Qgewor CXVpbnQzMl90IGVycl9mcWlkOwkJCS8qIEVycm9yIFF1ZXVlIElkLiAqLworCXVpbnQzMl90IGRm bHRfZnFpZDsJCQkvKiBEZWZhdWx0IFF1ZXVlIElkLiAgKi8KKwl1aW50MTZfdCBsaW9kbl9vZmZz ZXQ7CQkJLyogUG9ydCdzIExJT0ROIG9mZnNldC4gKi8KKwkvKiBXaGljaCBleHRlcm5hbCBidWZm ZXIgcG9vbHMgYXJlIHVzZWQKKwkgKiAodXAgdG8gRk1fUE9SVF9NQVhfTlVNX09GX0VYVF9QT09M UyksIGFuZCB0aGVpciBzaXplcy4KKwkgKi8KKwlzdHJ1Y3QgZm1fZXh0X3Bvb2xzX3QgZXh0X2J1 Zl9wb29sczsKK307CisKKy8qIEEgc3RydWN0dXJlIGZvciBhZGRpdGlvbmFsIG5vbi1SeCBwb3J0 IHBhcmFtZXRlcnMqLworc3RydWN0IGZtX3BvcnRfbm9uX3J4X3BhcmFtc190IHsKKwkvKiBFcnJv ciBRdWV1ZSBJZC4gKi8KKwl1aW50MzJfdCBlcnJfZnFpZDsKKwkvKiBGb3IgVHggLSBEZWZhdWx0 IENvbmZpcm1hdGlvbiBxdWV1ZSwgMCBtZWFucyBubyBUeCBjb25maXJtYXRpb24KKwkgKiBmb3Ig cHJvY2Vzc2VkIGZyYW1lcy4gRm9yIE9QIHBvcnQgLSBkZWZhdWx0IFJ4IHF1ZXVlLgorCSAqLwor CXVpbnQzMl90IGRmbHRfZnFpZDsKKwkvKiBRTS1jaGFubmVsIGRlZGljYXRlZCB0byB0aGlzIHBv cnQ7IHdpbGwgYmUgdXNlZAorCSAqIGJ5IHRoZSBGTSBmb3IgZGVxdWV1ZS4KKwkgKi8KKwl1aW50 MzJfdCBxbV9jaGFubmVsOworfTsKKworLyogQSB1bmlvbiBmb3IgYWRkaXRpb25hbCBwYXJhbWV0 ZXJzIGRlcGVuZGluZyBvbiBwb3J0IHR5cGUqLwordW5pb24gZm1fcG9ydF9zcGVjaWZpY19wYXJh bXNfdSB7CisJLyogUnggcG9ydCBwYXJhbWV0ZXJzIHN0cnVjdHVyZSAqLworCXN0cnVjdCBmbV9w b3J0X3J4X3BhcmFtc190IHJ4X3BhcmFtczsKKwkvKiBOb24tUnggcG9ydCBwYXJhbWV0ZXJzIHN0 cnVjdHVyZSAqLworCXN0cnVjdCBmbV9wb3J0X25vbl9yeF9wYXJhbXNfdCBub25fcnhfcGFyYW1z OworfTsKKworLyogQSBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIEZNIGluaXRpYWxpemF0aW9uIHBh cmFtZXRlcnMqLworc3RydWN0IGZtX3BvcnRfcGFyYW1zX3QgeworCXVpbnRwdHJfdCBiYXNlX2Fk ZHI7CisJLyogVmlydHVhbCBBZGRyZXNzIG9mIG1lbW9yeSBtYXBwZWQgRk0gUG9ydCByZWdpc3Rl cnMuKi8KKwl2b2lkICpoX2ZtOworCS8qIEEgaGFuZGxlIHRvIHRoZSBGTSBvYmplY3QgdGhpcyBw b3J0IHJlbGF0ZWQgdG8gKi8KKwllbnVtIGZtX3BvcnRfdHlwZSBwb3J0X3R5cGU7CisJLyogUG9y dCB0eXBlICovCisJZW51bSBmbV9wb3J0X3NwZWVkIHBvcnRfc3BlZWQ7CisJLyogUG9ydCBzcGVl ZCAqLworCXVpbnQ4X3QgcG9ydF9pZDsKKwkvKiBQb3J0IElkIC0gcmVsYXRpdmUgdG8gdHlwZTsK KwkgKiBOT1RFOiBXaGVuIGNvbmZpZ3VyaW5nIE9mZmxpbmUgUGFyc2luZyBwb3J0IGZvciBGTUFO djMgZGV2aWNlcywKKwkgKiBpdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgTk9UIHRvIHVzZSBwb3J0 X2lkPTAgZHVlIHRvIGxhY2sgb2YgSFcKKwkgKiByZXNvdXJjZXMgb24gcG9ydF9pZD0wLgorCSAq LworCXVpbnQxNl90IGxpb2RuX2Jhc2U7CisJLyogSXJyZWxldmFudCBmb3IgUDQwODAgcmV2IDEu IExJT0ROIGJhc2UgZm9yIHRoaXMgcG9ydCwgdG8gYmUKKwkgKiB1c2VkIHRvZ2V0aGVyIHdpdGgg TElPRE4gb2Zmc2V0LgorCSAqLworCXVuaW9uIGZtX3BvcnRfc3BlY2lmaWNfcGFyYW1zX3Ugc3Bl Y2lmaWNfcGFyYW1zOworCS8qIEFkZGl0aW9uYWwgcGFyYW1ldGVycyBkZXBlbmRpbmcgb24gcG9y dCB0eXBlLiAqLworCWZtX3BvcnRfZXhjZXB0aW9uX2NiICpmX2V4Y2VwdGlvbjsKKwkvKiBSZWxl dmFudCBmb3IgSU0gb25seSBDYWxsYmFjayByb3V0aW5lIHRvIGJlIGNhbGxlZCBvbgorCSAqIEJV U1kgZXhjZXB0aW9uLgorCSAqLworCXZvaWQgKmhfYXBwOworCS8qIEEgaGFuZGxlIHRvIGFuIGFw cGxpY2F0aW9uIGxheWVyIG9iamVjdDsgVGhpcyBoYW5kbGUgd2lsbCBiZQorCSAqIHBhc3NlZCBi eSB0aGUgZHJpdmVyIHVwb24gY2FsbGluZyB0aGUgYWJvdmUgY2FsbGJhY2tzCisJICovCit9Owor CitzdHJ1Y3QgZm1fcG9ydDsKKworLypGdW5jdGlvbiAgICAgIGZtX3BvcnRfY29uZmlnCisgKkRl c2NyaXB0aW9uICAgQ3JlYXRlcyBhIGRlc2NyaXB0b3IgZm9yIHRoZSBGTSBQT1JUIG1vZHVsZS4K KyAqCQlUaGUgcm91dGluZSByZXR1cm5zIGEgaGFuZGxlIChkZXNjcmlwdG9yKSB0byB0aGUgRk0g UE9SVCBvYmplY3QuCisgKgkJVGhpcyBkZXNjcmlwdG9yIG11c3QgYmUgcGFzc2VkIGFzIGZpcnN0 IHBhcmFtZXRlciB0byBhbGwgb3RoZXIKKyAqCQlGTSBQT1JUIGZ1bmN0aW9uIGNhbGxzLgorICoJ CU5vIGFjdHVhbCBpbml0aWFsaXphdGlvbiBvciBjb25maWd1cmF0aW9uIG9mIEZNIGhhcmR3YXJl IGlzCisgKgkJZG9uZSBieSB0aGlzIHJvdXRpbmUuCisgKiAgUGFyYW1baW5dICAgICBwX2ZtX3Bv cnRfcGFyYW1zICAgLSBQb2ludGVyIHRvIGRhdGEgc3RydWN0dXJlIG9mIHBhcmFtZXRlcnMKKyAq ICBSZXR2YWwgICAgICAgIEhhbmRsZSB0byBGTSBvYmplY3QsIG9yIE5VTEwgZm9yIEZhaWx1cmUu CisgKi8KK3ZvaWQgKmZtX3BvcnRfY29uZmlnKHN0cnVjdCBmbV9wb3J0X3BhcmFtc190ICpwX2Zt X3BvcnRfcGFyYW1zKTsKKworLypGdW5jdGlvbiAgICAgIGZtX3BvcnRfaW5pdAorICpEZXNjcmlw dGlvbiAgIEluaXRpYWxpemVzIHRoZSBGTSBQT1JUIG1vZHVsZSBieSBkZWZpbmluZyB0aGUKKyAq CQlzb2Z0d2FyZSBzdHJ1Y3R1cmUKKyAqCQlhbmQgY29uZmlndXJpbmcgdGhlIGhhcmR3YXJlIHJl Z2lzdGVycy4KKyAqICBQYXJhbVtpbl0gICAgIGhfZm1fcG9ydCAtIEZNIFBPUlQgbW9kdWxlIGRl c2NyaXB0b3IKKyAqUmV0dXJuICAgICAgICAwIG9uIHN1Y2Nlc3M7IEVycm9yIGNvZGUgb3RoZXJ3 aXNlLgorICovCitpbnQgZm1fcG9ydF9pbml0KHZvaWQgKmhfZm1fcG9ydCk7CisKKy8qRnVuY3Rp b24gICAgICBmbV9wb3J0X2ZyZWUKKyAqRGVzY3JpcHRpb24gICBGcmVlcyBhbGwgcmVzb3VyY2Vz IHRoYXQgd2VyZSBhc3NpZ25lZCB0byBGTSBQT1JUIG1vZHVsZS4KKyAqCQlDYWxsaW5nIHRoaXMg cm91dGluZSBpbnZhbGlkYXRlcyB0aGUgZGVzY3JpcHRvci4KKyAqICBQYXJhbVtpbl0gICAgIGhf Zm1fcG9ydCAtIEZNIFBPUlQgbW9kdWxlIGRlc2NyaXB0b3IKKyAqUmV0dXJuICAgICAgICAwIG9u IHN1Y2Nlc3M7IEVycm9yIGNvZGUgb3RoZXJ3aXNlLgorICovCitpbnQgZm1fcG9ydF9mcmVlKHN0 cnVjdCBmbV9wb3J0ICpwb3J0KTsKKworLyogQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMgdXNlZCB0 byBjaGFuZ2UgZGVmYXVsdCB2YWx1ZXMuICovCisKKy8qIGVudW0gZm9yIGRlZmluaW5nIFFNIGZy YW1lIGRlcXVldWUqLworZW51bSBmbV9wb3J0X2RlcV90eXBlIHsKKwkvKiBEZXF1ZXVlIGZyb20g dGhlIFNQIGNoYW5uZWwgLSB3aXRoIHByaW9yaXR5IHByZWNlZGVuY2UsCisJICogYW5kIEludHJh LUNsYXNzIFNjaGVkdWxpbmcgcmVzcGVjdGVkLgorCSAqLworCUZNX1BPUlRfREVRX1RZUEUxLAor CS8qIERlcXVldWUgZnJvbSB0aGUgU1AgY2hhbm5lbCAtIHdpdGggYWN0aXZlIEZRIHByZWNlZGVu Y2UsCisJICogYW5kIEludHJhLUNsYXNzIFNjaGVkdWxpbmcgcmVzcGVjdGVkLgorCSAqLworCUZN X1BPUlRfREVRX1RZUEUyLAorCS8qIERlcXVldWUgZnJvbSB0aGUgU1AgY2hhbm5lbCAtIHdpdGgg YWN0aXZlIEZRIHByZWNlZGVuY2UsCisJICogYW5kIG92ZXJyaWRlIEludHJhLUNsYXNzIFNjaGVk dWxpbmcKKwkgKi8KKwlGTV9QT1JUX0RFUV9UWVBFMworfTsKKworLyogZW51bSBmb3IgZGVmaW5p bmcgUU0gZnJhbWUgZGVxdWV1ZSovCitlbnVtIGZtX3BvcnRfZGVxX3ByZWZldGNoX29wdGlvbiB7 CisJLyogUU1JIHByZWZvcm1zIGEgZGVxdWV1ZSBhY3Rpb24gZm9yIGEgc2luZ2xlIGZyYW1lIG9u bHkKKwkgKiB3aGVuIGEgZGVkaWNhdGVkIHBvcnRJRCBUbnVtIGlzIHdhaXRpbmcuCisJICovCisJ Rk1fUE9SVF9ERVFfTk9fUFJFRkVUQ0gsCisJLyogUU1JIHByZWZvcm1zIGEgZGVxdWV1ZSBhY3Rp b24gZm9yIDMgZnJhbWVzIHdoZW4gb25lCisJICogZGVkaWNhdGVkIHBvcnRfaWQgdG51bSBpcyB3 YWl0aW5nLgorCSAqLworCUZNX1BPUlRfREVRX1BBUlRJQUxfUFJFRkVUQ0gsCisJLyogUU1JIHBy ZWZvcm1zIGEgZGVxdWV1ZSBhY3Rpb24gZm9yIDMgZnJhbWVzIHdoZW4KKwkgKiBubyBkZWRpY2F0 ZWQgcG9ydF9pZCB0bnVtcyBhcmUgd2FpdGluZy4KKwkgKi8KKwlGTV9QT1JUX0RFUV9GVUxMX1BS RUZFVENICit9OworCisvKiBlbnVtIGZvciBkZWZpbmluZyBwb3J0IGRlZmF1bHQgY29sb3IqLwor ZW51bSBmbV9wb3J0X2NvbG9yIHsKKwlGTV9QT1JUX0NPTE9SX0dSRUVOLAkgICAgLyogRGVmYXVs dCBwb3J0IGNvbG9yIGlzIGdyZWVuICovCisJRk1fUE9SVF9DT0xPUl9ZRUxMT1csCSAgICAvKiBE ZWZhdWx0IHBvcnQgY29sb3IgaXMgeWVsbG93ICovCisJRk1fUE9SVF9DT0xPUl9SRUQsCSAgICAv KiBEZWZhdWx0IHBvcnQgY29sb3IgaXMgcmVkICovCisJRk1fUE9SVF9DT0xPUl9PVkVSUklERSAg ICAvKiBJZ25vcmUgY29sb3IgKi8KK307CisKKy8qIEEgc3RydWN0dXJlIGZvciBkZWZpbmluZyBG TSBwb3J0IHJlc291cmNlcyovCitzdHJ1Y3QgZm1fcG9ydF9yc3JjX3QgeworCXVpbnQzMl90IG51 bTsgLyogQ29tbWl0dGVkIHJlcXVpcmVkIHJlc291cmNlICovCisJdWludDMyX3QgZXh0cmE7IC8q IEV4dHJhIChub3QgY29tbWl0dGVkKSByZXF1aXJlZCByZXNvdXJjZSAqLworfTsKKworLypGdW5j dGlvbiAgICAgIGZtX3BvcnRfY2ZnX2RlcV9oaWdoX3ByaW9yaXR5CisgKkRlc2NyaXB0aW9uICAg Q2FsbGluZyB0aGlzIHJvdXRpbmUgY2hhbmdlcyB0aGUgZGVxdWV1ZSBwcmlvcml0eSBpbiB0aGUK KyAqCQlpbnRlcm5hbCBkcml2ZXIgZGF0YSBiYXNlIGZyb20gaXRzIGRlZmF1bHQgY29uZmlndXJh dGlvbgorICoJCTFHOiBbREVGQVVMVF9QT1JUX2RlcV9oaWdoX3ByaW9yaXR5XzFHXQorICoJCTEw RzogW0RFRkFVTFRfUE9SVF9kZXFfaGlnaF9wcmlvcml0eV8xMEddCisgKgkJTWF5IGJlIHVzZWQg Zm9yIE5vbi1SeCBwb3J0cyBvbmx5CisgKiAgUGFyYW1baW5dICAgICBoX2ZtX3BvcnQgICAgQSBo YW5kbGUgdG8gYSBGTSBQb3J0IG1vZHVsZS4KKyAqICBQYXJhbVtpbl0gICAgIGhpZ2hfcHJpICAg ICB0cnVlIHRvIHNlbGVjdCBoaWdoIHByaW9yaXR5LCBmYWxzZSBmb3IKKyAqICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbm9ybWFsIG9wZXJhdGlvbi4KKyAqUmV0dXJuICAgICAgICAwIG9u IHN1Y2Nlc3M7IEVycm9yIGNvZGUgb3RoZXJ3aXNlLgorICogIENhdXRpb25zICAgICAgQWxsb3dl ZCBvbmx5IGZvbGxvd2luZyBmbV9wb3J0X2NvbmZpZygpIGFuZCBiZWZvcmUKKyAqCQlmbV9wb3J0 X2luaXQoKS4KKyAqLworaW50IGZtX3BvcnRfY2ZnX2RlcV9oaWdoX3ByaW9yaXR5KHZvaWQgKmhf Zm1fcG9ydCwgYm9vbCBoaWdoX3ByaSk7CisKKy8qRnVuY3Rpb24gICAgICBmbV9wb3J0X2NmZ19k ZXFfcHJlZmV0Y2hfb3B0aW9uCisgKkRlc2NyaXB0aW9uICAgQ2FsbGluZyB0aGlzIHJvdXRpbmUg Y2hhbmdlcyB0aGUgZGVxdWV1ZSBwcmVmZXRjaCBvcHRpb24KKwkJcGFyYW1ldGVyIGluIHRoZQor ICoJCWludGVybmFsIGRyaXZlciBkYXRhIGJhc2UgZnJvbSBpdHMgZGVmYXVsdCBjb25maWd1cmF0 aW9uCisgKgkJW0RFRkFVTFRfUE9SVF9kZXFfcHJlZmV0Y2hfb3B0aW9uXQorICoJCU5vdGU6IEF2 YWlsYWJsZSBmb3Igc29tZSBjaGlwcyBvbmx5CisgKgkJTWF5IGJlIHVzZWQgZm9yIE5vbi1SeCBw b3J0cyBvbmx5CisgKiAgUGFyYW1baW5dICAgICBoX2ZtX3BvcnQgICAgICAgICAgICBBIGhhbmRs ZSB0byBhIEZNIFBvcnQgbW9kdWxlLgorICogIFBhcmFtW2luXSAgICAgZGVxX3ByZWZldGNoX29w dGlvbiAgIE5ldyBvcHRpb24KKyAqUmV0dXJuICAgICAgICAwIG9uIHN1Y2Nlc3M7IEVycm9yIGNv ZGUgb3RoZXJ3aXNlLgorICogIENhdXRpb25zICAgICAgQWxsb3dlZCBvbmx5IGZvbGxvd2luZyBm bV9wb3J0X2NvbmZpZygpIGFuZCBiZWZvcmUKKyAqCQlmbV9wb3J0X2luaXQoKS4KKyAqLworaW50 IGZtX3BvcnRfY2ZnX2RlcV9wcmVmZXRjaF9vcHRpb24odm9pZCAqaF9mbV9wb3J0LAorCQkJCSAg ICBlbnVtIGZtX3BvcnRfZGVxX3ByZWZldGNoX29wdGlvbgorCQkJCSAgICBkZXFfcHJlZmV0Y2hf b3B0aW9uKTsKKworLypGdW5jdGlvbiAgICAgIGZtX3BvcnRfY2ZnX2J1Zl9wcmVmaXhfY29udGVu dAorICpEZXNjcmlwdGlvbiAgIERlZmluZXMgdGhlIHN0cnVjdHVyZSwgc2l6ZSBhbmQgY29udGVu dCBvZiB0aGUKKyAqICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiBidWZmZXIuCisgKgkJVGhl IHByZWZpeCB3aWxsCisgKgkJSW4gVHggcG9ydHMsIGlmICdwYXNzX3Byc19yZXN1bHQnLCB0aGUg YXBwbGljYXRpb24KKyAqCQlzaG91bGQgc2V0IGEgdmFsdWUgdG8gdGhlaXIgb2Zmc2V0cyBpbiB0 aGUgcHJlZml4IG9mCisgKgkJdGhlIEZNIHdpbGwgc2F2ZSB0aGUgZmlyc3QgJ3ByaXZfZGF0YV9z aXplJywgdGhhbiwKKyAqCQlkZXBlbmRpbmcgb24gJ3Bhc3NfcHJzX3Jlc3VsdCcgYW5kICdwYXNz X3RpbWVfc3RhbXAnLAorICoJCWNvcHkgcGFyc2UgcmVzdWx0IGFuZCB0aW1lU3RhbXAsIGFuZCB0 aGUgcGFja2V0IGl0c2VsZgorICoJCShpbiB0aGlzIG9yZGVyKSwgdG8gdGhlIGFwcGxpY2F0aW9u IGJ1ZmZlciwgYW5kIHRvIG9mZnNldC4KKyAqCQlDYWxsaW5nIHRoaXMgcm91dGluZSBjaGFuZ2Vz IHRoZSBidWZmZXIgbWFyZ2lucyBkZWZpbml0aW9ucworICoJCWluIHRoZSBpbnRlcm5hbCBkcml2 ZXIgZGF0YSBiYXNlIGZyb20gaXRzIGRlZmF1bHQKKyAqCQljb25maWd1cmF0aW9uOgorICoJCURh dGEgc2l6ZTogIFtERUZBVUxUX1BPUlRfQlVGRkVSX1BSRUZJWF9DT05URU5UX1BSSVZfREFUQV9T SVpFXQorICoJCVBhc3MgUGFyc2VyIHJlc3VsdDogW0RFRkFVTFRfUE9SVF9CVUZGRVJfUFJFRklY X0NPTlRFTlRfCisgKgkJUEFTU19QUlNfUkVTVUxUXS4KKyAqCQlQYXNzIHRpbWVzdGFtcDogW0RF RkFVTFRfUE9SVF9CVUZGRVJfUFJFRklYX0NPTlRFTlRfUEFTU18KKyAqCQlUSU1FX1NUQU1QXS4K KyAqCQlNYXkgYmUgdXNlZCBmb3IgYWxsIHBvcnRzCisgKiAgUGFyYW1baW5dICAgICBoX2ZtX3Bv cnQgICAgICAgICAgICAgICAgICAgICAgQSBoYW5kbGUgdG8gYSBGTSBQb3J0IG1vZHVsZS4KKyAq ICBQYXJhbVtpbixvdXRdIHBfZm1fYnVmZmVyX3ByZWZpeF9jb250ZW50ICAgQSBzdHJ1Y3R1cmUg b2YgcGFyYW1ldGVycworICoJCQkJCQlkZXNjcmliaW5nIHRoZQorICoJCQkJCQlzdHJ1Y3R1cmUg b2YgdGhlIGJ1ZmZlci4KKyAqCQkJCQkJT3V0IHBhcmFtZXRlcjogU3RhcnQgbWFyZ2luIC0KKyAq CQkJCQkJb2Zmc2V0CisgKgkJCQkJCW9mIGRhdGEgZnJvbSBzdGFydCBvZgorICoJCQkJCQlleHRl cm5hbCBidWZmZXIuCisgKlJldHVybiAgICAgICAgMCBvbiBzdWNjZXNzOyBFcnJvciBjb2RlIG90 aGVyd2lzZS4KKyAqICBDYXV0aW9ucyAgICAgIEFsbG93ZWQgb25seSBmb2xsb3dpbmcgZm1fcG9y dF9jb25maWcoKSBhbmQgYmVmb3JlCisgKiAgICAgICAgICAgICAgICAgZm1fcG9ydF9pbml0KCku CisgKi8KK2ludCBmbV9wb3J0X2NmZ19idWZfcHJlZml4X2NvbnRlbnQodm9pZCAqaF9mbV9wb3J0 LAorCQkJCSAgIHN0cnVjdCBmbV9idWZmZXJfcHJlZml4X2NvbnRlbnRfdCAqCisJCQkJICAgIHBf Zm1fYnVmZmVyX3ByZWZpeF9jb250ZW50KTsKKworI2lmZGVmIEZNX0hFQVZZX1RSQUZGSUNfSEFO R19FUlJBVEFfRk1BTl9BMDA1NjY5CisvKkZ1bmN0aW9uICAgICAgZm1fcG9ydF9jZmdfYmNiX3dh CisgKkRlc2NyaXB0aW9uICAgQ29uZmlndXJlcyBCQ0IgZXJyYXRhIHdvcmthcm91bmQuCisgKgkJ V2hlbiBCQ0IgZXJyYXRhIGlzIGFwcGxpY2FibGUsIHRoZSB3b3JrYXJvdW5kIGlzIGFsd2F5cwor ICoJCXBlcmZvcm1lZCBieSBGTSBDb250cm9sbGVyLiBUaHVzLCB0aGlzIGZ1bmN0aW9ucyBkb2Vz bid0CisgKgkJYWN0dWFsbHkgZW5hYmxlIGVycmF0YSB3b3JrYXJvdW5kIGJ1dCByYXRoZXIgYWxs b3dzIGRyaXZlcgorICoJCXRvIHBlcmZvcm0gYWRqdXN0bWVudHMgcmVxdWlyZWQgZHVlIHRvIGVy cmF0YSB3b3JrYXJvdW5kCisgKgkJZXhlY3V0aW9uIGluIEZNIGNvbnRyb2xsZXIuCisgKgkJQXBw bHlpbmcgQkNCIHdvcmthcm91bmQgYWxzbyBjb25maWd1cmVzIEZNX1BPUlRfRlJNX0VSUl9QSFlT SUNBTAorICoJCWVycm9ycyB0byBiZSBkaXNjYXJkZWQuIFRodXMgRk1fUE9SVF9GUk1fRVJSX1BI WVNJQ0FMIGNhbid0IGJlCisgKgkJc2V0IGJ5IEZNX1BPUlRfU2V0RXJyb3JzUm91dGUoKSBmdW5j dGlvbi4KKyAqICBQYXJhbVtpbl0gICAgIGhfZm1fcG9ydCAgICAgICAgICAgIEEgaGFuZGxlIHRv IGEgRk0gUG9ydCBtb2R1bGUuCisgKlJldHVybiAgICAgICAgMCBvbiBzdWNjZXNzOyBFcnJvciBj b2RlIG90aGVyd2lzZS4KKyAqICBDYXV0aW9ucyAgICAgIEFsbG93ZWQgb25seSBmb2xsb3dpbmcg Zm1fcG9ydF9jb25maWcoKSBhbmQgYmVmb3JlCisgKgkJICAgZm1fcG9ydF9pbml0KCkuCisgKi8K K2ludCBmbV9wb3J0X2NmZ19iY2Jfd2Eodm9pZCAqaF9mbV9wb3J0KTsKKyNlbmRpZiAvKiBGTV9I RUFWWV9UUkFGRklDX0hBTkdfRVJSQVRBX0ZNQU5fQTAwNTY2OSAqLworCisvKiBGTSBQb3J0IFJ1 bnRpbWUgY29udHJvbCB1bml0IEFQSSBmdW5jdGlvbnMsIGRlZmluaXRpb25zIGFuZCBlbnVtcy4g Ki8KKworLypGdW5jdGlvbiAgICAgIGZtX3BvcnRfZ2V0X2J1ZmZlcl90aW1lX3N0YW1wCisgKkRl c2NyaXB0aW9uICAgUmV0dXJucyB0aGUgdGltZSBzdGFtcCBpbiB0aGUgZGF0YSBidWZmZXIuCisg KgkJUmVsZXZhbnQgZm9yIFJ4IHBvcnRzIGZvciBnZXR0aW5nIHRoZSBidWZmZXIgdGltZSBzdGFt cC4KKyAqCQlTZWUgZm1fcG9ydF9jZmdfYnVmX3ByZWZpeF9jb250ZW50IGZvciBkYXRhIGJ1ZmZl ciBwcmVmaXgKKyAqCQljb25maWd1cmF0aW9uLgorICogIFBhcmFtW2luXSAgICAgcG9ydCAgICAg ICAgLSBGTSBQT1JUIG1vZHVsZSBkZXNjcmlwdG9yCisgKiAgUGFyYW1baW5dICAgICBwX2RhdGEg ICAgICAtIEEgcG9pbnRlciB0byB0aGUgZGF0YSBidWZmZXIuCisgKlJldHVybiAgICAgICAgQSBw b2ludGVyIHRvIHRoZSBoYXNoIHJlc3VsdCBvbiBzdWNjZXNzLCBOVUxMIG90aGVyd2lzZS4KKyAq ICBDYXV0aW9ucyAgICAgIEFsbG93ZWQgb25seSBmb2xsb3dpbmcgZm1fcG9ydF9pbml0KCkuCisg Ki8KK3U2NCAqZm1fcG9ydF9nZXRfYnVmZmVyX3RpbWVfc3RhbXAoY29uc3Qgc3RydWN0IGZtX3Bv cnQgKnBvcnQsIGNoYXIgKnBfZGF0YSk7CisKKy8qRnVuY3Rpb24gICAgICBmbV9wb3J0X2Rpc2Fi bGUKKyAqRGVzY3JpcHRpb24gICBHcmFjZWZ1bGx5IGRpc2FibGUgYW4gRk0gcG9ydC4gVGhlIHBv cnQgd2lsbCBub3Qgc3RhcnQgbmV3CisgKiAgICAgICAgICAgICAgICAgdGFza3MgYWZ0ZXIgYWxs CisgKgkJdGFza3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBwb3J0IGFyZSB0ZXJtaW5hdGVkLgorICog IFBhcmFtW2luXSAgICAgaF9mbV9wb3J0ICAgIEEgaGFuZGxlIHRvIGEgRk0gUG9ydCBtb2R1bGUu CisgKlJldHVybiAgICAgICAgMCBvbiBzdWNjZXNzOyBFcnJvciBjb2RlIG90aGVyd2lzZS4KKyAq ICBDYXV0aW9ucyAgICAgIEFsbG93ZWQgb25seSBmb2xsb3dpbmcgZm1fcG9ydF9pbml0KCkuCisg KgkJVGhpcyBpcyBhIGJsb2NraW5nIHJvdXRpbmUsIGl0IHJldHVybnMgYWZ0ZXIgcG9ydCBpcwor ICoJCWdyYWNlZnVsbHkgc3RvcHBlZCwgaS5lLiB0aGUgcG9ydCB3aWxsIG5vdCBleGNlcHQgbmV3 IGZyYW1lcywKKyAqCQlidXQgaXQgd2lsbCBmaW5pc2ggYWxsIGZyYW1lcyBvciB0YXNrcyB3aGlj aCB3ZXJlIGFscmVhZHkgYmVnYW4KKyAqLworaW50IGZtX3BvcnRfZGlzYWJsZShzdHJ1Y3QgZm1f cG9ydCAqcG9ydCk7CisKK2ludCBmbV9wb3J0X3N1c3BlbmQoc3RydWN0IGZtX3BvcnQgKnBvcnQp OworLypGdW5jdGlvbiAgICAgIGZtX3BvcnRfZW5hYmxlCisgKkRlc2NyaXB0aW9uICAgQSBydW50 aW1lIHJvdXRpbmUgcHJvdmlkZWQgdG8gYWxsb3cgZGlzYWJsZS9lbmFibGUgb2YgcG9ydC4KKyAq ICBQYXJhbVtpbl0gICAgIGhfZm1fcG9ydCAgICBBIGhhbmRsZSB0byBhIEZNIFBvcnQgbW9kdWxl LgorICpSZXR1cm4gICAgICAgIDAgb24gc3VjY2VzczsgRXJyb3IgY29kZSBvdGhlcndpc2UuCisg KiAgQ2F1dGlvbnMgICAgICBBbGxvd2VkIG9ubHkgZm9sbG93aW5nIGZtX3BvcnRfaW5pdCgpLgor ICovCitpbnQgZm1fcG9ydF9lbmFibGUoc3RydWN0IGZtX3BvcnQgKnBvcnQpOworCitpbnQgZm1f cG9ydF9yZXN1bWUoc3RydWN0IGZtX3BvcnQgKnBvcnQpOworI2lmZGVmIE5DU1dfQkFDS1dBUkRf Q09NUEFUSUJMRV9BUEkKKyNkZWZpbmUgZm1fcG9ydF9jZmdfdHhfZmlmb19kZXFfcGlwZWxpbmVf ZGVwdGggXAorZm1fcG9ydF9jZmdfZmlmb19kZXFfcGlwZWxpbmVfZGVwdGgKKyNlbmRpZiAvKiBO Q1NXX0JBQ0tXQVJEX0NPTVBBVElCTEVfQVBJICovCisKKyNlbmRpZiAvKiBfX0ZNX1BPUlRfRVhU ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9pbmMv ZnNsX2ZtYW5fZHJ2LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9pbmMv ZnNsX2ZtYW5fZHJ2LmgKaW5kZXggY2ZiZjQ2Mi4uMDZiYzhlOSAxMDA2NDQKLS0tIGEvZHJpdmVy cy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vaW5jL2ZzbF9mbWFuX2Rydi5oCisrKyBiL2Ry aXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2luYy9mc2xfZm1hbl9kcnYuaApAQCAt MzcsMTAgKzM3LDQ0IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxp bnV4L2RldmljZS5oPgkvKiBzdHJ1Y3QgZGV2aWNlICovCisjaW5jbHVkZSAiZm1fbWFjX2V4dC5o IgogCiAvKiBGTSBkZXZpY2Ugb3BhcXVlIHN0cnVjdHVyZSB1c2VkIGZvciB0eXBlIGNoZWNraW5n ICovCiBzdHJ1Y3QgZm07CiAKKy8qIEEgc3RydWN0dXJlIC4uLCAqLworc3RydWN0IGZtX3BvcnQ7 CisKKy8qIEEgc3RydWN0dXJlIG9mIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggb2YgdGhlIGV4dGVy bmFsCisgKiBidWZmZXIgcG9vbHMgdXNlZCBieSB0aGUgcG9ydCwKKyAqLworc3RydWN0IGZtX3Bv cnRfcG9vbF9wYXJhbSB7CisJdWludDhfdCBpZDsJCQkvKiBFeHRlcm5hbCBidWZmZXIgcG9vbCBp ZCAqLworCXVpbnQxNl90IHNpemU7CQkJLyogRXh0ZXJuYWwgYnVmZmVyIHBvb2wgYnVmZmVyIHNp emUqLworfTsKKworLyogc3RydWN0dXJlIGZvciBhZGRpdGlvbmFsIHBvcnQgcGFyYW1ldGVycyAq Lworc3RydWN0IGZtX3BvcnRfcGFyYW1zIHsKKwl1aW50MzJfdCBlcnJxOwkgICAgLyogRXJyb3Ig UXVldWUgSWQuICovCisJdWludDMyX3QgZGVmcTsJICAgIC8qIEZvciBUeCBhbmQgSEMgLSBEZWZh dWx0IENvbmZpcm1hdGlvbiBxdWV1ZSwKKwkJCSAgICAgKiAwIG1lYW5zIG5vIFR4IGNvbmYgZm9y IHByb2Nlc3NlZCBmcmFtZXMuCisJCQkgICAgICogIEZvciBSeCBhbmQgT1AgLSBkZWZhdWx0IFJ4 IHF1ZXVlLgorCQkJICAgICAqLworCXVpbnQ4X3QgbnVtX3Bvb2xzOyAgLyogTnVtYmVyIG9mIHBv b2xzIHVzZSBieSB0aGlzIHBvcnQgKi8KKwlzdHJ1Y3QgZm1fcG9ydF9wb29sX3BhcmFtIHBvb2xf cGFyYW1bRk1fUE9SVF9NQVhfTlVNX09GX0VYVF9QT09MU107CisJCQkgICAgLyogUGFyYW1ldGVy cyBmb3IgZWFjaCBwb29sICovCisJdWludDE2X3QgcHJpdl9kYXRhX3NpemU7ICAvKiBBcmVhIHRo YXQgdXNlciBtYXkgc2F2ZSBmb3IgaGlzIG93bgorCQkJCSAgICogbmVlZCAoRS5nLiBzYXZlIHRo ZSBTS0IpCisJCQkJICAgKi8KKwlib29sIHBhcnNlX3Jlc3VsdHM7IC8qIFB1dCB0aGUgcGFyc2Vy LXJlc3VsdHMgaW4gdGhlIFJ4L1R4IGJ1ZmZlciAqLworCWJvb2wgaGFzaF9yZXN1bHRzOyAgLyog UHV0IHRoZSBoYXNoLXJlc3VsdHMgaW4gdGhlIFJ4L1R4IGJ1ZmZlciAqLworCWJvb2wgdGltZV9z dGFtcDsgICAgLyogUHV0IHRoZSB0aW1lLXN0YW1wIGluIHRoZSBSeC9UeCBidWZmZXIgKi8KKwl1 aW50MTZfdCBkYXRhX2FsaWduOyAgLyogdmFsdWUgZm9yIHNlbGVjdGluZyBhIGRhdGEgYWxpZ25t ZW50CisJCQkgICAgICAgKiAobXVzdCBiZSBhIHBvd2VyIG9mIDIpOworCQkJICAgICAgICogaWYg d3JpdGUgb3B0aW1pemF0aW9uIGlzIHVzZWQsIG11c3QgYmUgPj0gMTYuCisJCQkgICAgICAgKi8K K307CisKIC8qIGZtX2JpbmQKICAqCUJpbmQgdG8gYSBzcGVjaWZpYyBGTSBkZXZpY2UuCiAgKgpA QCAtNjAsNiArOTQsNzAgQEAgdm9pZCBmbV91bmJpbmQoc3RydWN0IGZtICpmbSk7CiB2b2lkICpm bV9nZXRfaGFuZGxlKHN0cnVjdCBmbSAqZm0pOwogc3RydWN0IHJlc291cmNlICpmbV9nZXRfbWVt X3JlZ2lvbihzdHJ1Y3QgZm0gKmZtKTsKIAorLyoJZm1fcG9ydF9iaW5kCisgKglCaW5kIHRvIGEg c3BlY2lmaWMgRk0tcG9ydCBkZXZpY2UgKG1heSBiZSBSeCBvciBUeCBwb3J0KS4KKyAqICBmbV9w b3J0X2RldiAtIHRoZSBPRiBoYW5kbGUgb2YgdGhlIEZNIHBvcnQgZGV2aWNlLgorICogIFJldHVy bglBIGhhbmRsZSBvZiB0aGUgRk0gcG9ydCBkZXZpY2UuCisgKiAgQWxsb3dlZCBvbmx5IGFmdGVy IHRoZSBwb3J0IHdhcyBjcmVhdGVkLgorICovCitzdHJ1Y3QgZm1fcG9ydCAqZm1fcG9ydF9iaW5k KHN0cnVjdCBkZXZpY2UgKmZtX3BvcnRfZGV2KTsKKworLyoJZm1fcG9ydF91bmJpbmQKKyAqCVVu LWJpbmQgZnJvbSBhIHNwZWNpZmljIEZNLXBvcnQgZGV2aWNlIChtYXkgYmUgUnggb3IgVHggcG9y dCkuCisgKiAgcG9ydAktIEEgaGFuZGxlIG9mIHRoZSBGTSBwb3J0IGRldmljZS4KKyAqICBBbGxv d2VkIG9ubHkgYWZ0ZXIgdGhlIHBvcnQgd2FzIGNyZWF0ZWQuCisgKi8KK3ZvaWQgZm1fcG9ydF91 bmJpbmQoc3RydWN0IGZtX3BvcnQgKnBvcnQpOworCisvKiBmbV9zZXRfcnhfcG9ydF9wYXJhbXMK KyAqCUNvbmZpZ3VyZSBwYXJhbWV0ZXJzIGZvciBhIHNwZWNpZmljIFJ4IEZNLXBvcnQgZGV2aWNl LgorICogIHBvcnQJLSBBIGhhbmRsZSBvZiB0aGUgRk0gcG9ydCBkZXZpY2UuCisgKiAgcGFyYW1z CS0gUnggcG9ydCBwYXJhbWV0ZXJzCisgKiAgQWxsb3dlZCBvbmx5IGFmdGVyIHRoZSBwb3J0IGlz IGJpbmRlZC4KKyAqLwordm9pZCBmbV9zZXRfcnhfcG9ydF9wYXJhbXMoc3RydWN0IGZtX3BvcnQg KnBvcnQsIHN0cnVjdCBmbV9wb3J0X3BhcmFtcyAqcGFyYW1zKTsKKworLyoJZm1fcG9ydF9nZXRf YnVmZl9sYXlvdXRfZXh0X3BhcmFtcworICoJR2V0IGRhdGFfYWxpZ24gZnJvbSB0aGUgZGV2aWNl IHRyZWUgY2hvc2VuIG5vZGUgaWYgYXBwbGllZC4KKyAqCQlUaGlzIGZ1bmN0aW9uIHdpbGwgb25s eSB1cGRhdGUgdGhlc2UgdHdvIHBhcmFtZXRlcnMuCisgKgkJV2hlbiB0aGlzIHBvcnQgaGFzIG5v IHN1Y2ggcGFyYW1ldGVycyBpbiB0aGUgZGV2aWNlIHRyZWUKKyAqCQl2YWx1ZXMgd2lsbCBiZSBz ZXQgdG8gMC4KKyAqCXBvcnQJLSBBIGhhbmRsZSBvZiB0aGUgRk0gcG9ydCBkZXZpY2UuCisgKglw YXJhbXMJLSBQQ0QgcG9ydCBwYXJhbWV0ZXJzCisgKglBbGxvd2VkIG9ubHkgYWZ0ZXIgdGhlIHBv cnQgaXMgYmluZGVkLgorICovCit2b2lkIGZtX3BvcnRfZ2V0X2J1ZmZfbGF5b3V0X2V4dF9wYXJh bXMoc3RydWN0IGZtX3BvcnQgKnBvcnQsCisJCQkJCXN0cnVjdCBmbV9wb3J0X3BhcmFtcyAqcGFy YW1zKTsKKworLyoJZm1fZ2V0X3R4X3BvcnRfY2hhbm5lbAorICoJR2V0IHFtYW4tY2hhbm5lbCBu dW1iZXIgZm9yIHRoaXMgVHggcG9ydC4KKyAqCXBvcnQJLSBBIGhhbmRsZSBvZiB0aGUgRk0gcG9y dCBkZXZpY2UuCisgKiAgUmV0dXJuCXFtYW4tY2hhbm5lbCBudW1iZXIgZm9yIHRoaXMgVHggcG9y dC4KKyAqCUFsbG93ZWQgb25seSBhZnRlciB0aGUgcG9ydCBpcyBiaW5kZWQuCisgKi8KK2ludCBm bV9nZXRfdHhfcG9ydF9jaGFubmVsKHN0cnVjdCBmbV9wb3J0ICpwb3J0KTsKKworLyoJZm1fc2V0 X3R4X3BvcnRfcGFyYW1zCisgKglDb25maWd1cmUgcGFyYW1ldGVycyBmb3IgYSBzcGVjaWZpYyBU eCBGTS1wb3J0IGRldmljZQorICoJcG9ydAktIEEgaGFuZGxlIG9mIHRoZSBGTSBwb3J0IGRldmlj ZS4KKyAqCXBhcmFtcwktIFR4IHBvcnQgcGFyYW1ldGVycworICoJQWxsb3dlZCBvbmx5IGFmdGVy IHRoZSBwb3J0IGlzIGJpbmRlZC4KKyAqLwordm9pZCBmbV9zZXRfdHhfcG9ydF9wYXJhbXMoc3Ry dWN0IGZtX3BvcnQgKnBvcnQsIHN0cnVjdCBmbV9wb3J0X3BhcmFtcyAqcGFyYW1zKTsKKwordm9p ZCAqZm1fcG9ydF9nZXRfaGFuZGxlKGNvbnN0IHN0cnVjdCBmbV9wb3J0ICpwb3J0KTsKKworLyoJ Zm1fcG9ydF9nZXRfYmFzZV9hZGRyZXNzCisgKgorICoJR2V0IGJhc2UgYWRkcmVzcyBvZiB0aGlz IHBvcnQuIFVzZWZ1bCBmb3IgYWNjZXNzaW5nCisgKgkJcG9ydC1zcGVjaWZpYyByZWdpc3RlcnMg KGkuZS4sIG5vdCBjb21tb24gb25lcykuCisgKgorICoJcG9ydAkJLSBBIGhhbmRsZSBvZiB0aGUg Rk0gcG9ydCBkZXZpY2UuCisgKgorICoJYmFzZV9hZGRyCS0gVGhlIHBvcnQncyBiYXNlIGFkZHIg KHZpcnR1YWwgYWRkcmVzcykuCisgKi8KK3ZvaWQgZm1fcG9ydF9nZXRfYmFzZV9hZGRyKGNvbnN0 IHN0cnVjdCBmbV9wb3J0ICpwb3J0LCB1aW50NjRfdCAqYmFzZV9hZGRyKTsKKwogLyoJZm1fbXV0 ZXhfbG9jawogICoKICAqICAgTG9jayBmdW5jdGlvbiByZXF1aXJlZCBiZWZvcmUgYW55IEZNRC9M TEQgY2FsbC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFu L3BvcnQvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9wb3J0 L01ha2VmaWxlCmluZGV4IDU0YjFmYTQuLjU1ODI1ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0 L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL3BvcnQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQv ZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vcG9ydC9NYWtlZmlsZQpAQCAtMSwzICsxLDMgQEAKIG9i ai15CSs9IGZzbF9mbWFuX3BvcnQubwogCi1mc2xfZm1hbl9wb3J0LW9ianMJCTo9IGZtYW5fcG9y dC5vCitmc2xfZm1hbl9wb3J0LW9ianMJCTo9IGZtYW5fcG9ydC5vIGZtX3BvcnQubwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vcG9ydC9mbV9wb3J0LmMg Yi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9wb3J0L2ZtX3BvcnQuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGRiN2ZiCi0tLSAvZGV2L251bGwKKysr IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vcG9ydC9mbV9wb3J0LmMKQEAg LTAsMCArMSwxNDg0IEBACisvKgorICogQ29weXJpZ2h0IDIwMDggLSAyMDE1IEZyZWVzY2FsZSBT ZW1pY29uZHVjdG9yIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0 OgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0 aGUgbmFtZSBvZiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBub3IgdGhlCisgKiAgICAgICBuYW1l cyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw cm9kdWN0cworICogICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICoKKyAqIEFMVEVSTkFUSVZFTFks IHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUK KyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoYXQg TGljZW5zZSBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisg KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIGBg QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBC RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKiBGaWxlICAgICAgICAgIGZtX3Bv cnQuYworICogRGVzY3JpcHRpb24gICBGTSBkcml2ZXIgcm91dGluZXMgaW1wbGVtZW50YXRpb24u CisgKi8KKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKworI2lu Y2x1ZGUgInNlcnZpY2UuaCIKKyNpbmNsdWRlICJmbV9tdXJhbV9leHQuaCIKKworI2luY2x1ZGUg ImZtYW5fY29tbW9uLmgiCisjaW5jbHVkZSAiZm1fcG9ydC5oIgorI2luY2x1ZGUgImRwYWFfaW50 ZWdyYXRpb25fZXh0LmgiCisKKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxs aW51eC9zbGFiLmg+CisKKy8qICAgICAgIHN0YXRpYyBmdW5jdGlvbnMgICAgICAgICAgICAgICAq LworCitzdGF0aWMgaW50IGNoZWNrX2luaXRfcGFyYW1ldGVycyhzdHJ1Y3QgZm1fcG9ydF90ICpw X2ZtX3BvcnQpCit7CisJc3RydWN0IGZtX3BvcnRfZHJ2X3BhcmFtX3QgKnBfcGFyYW1zID0gcF9m bV9wb3J0LT4KKwlwX2ZtX3BvcnRfZHJ2X3BhcmFtOworCXN0cnVjdCBmbWFuX3BvcnRfY2ZnICpw X2RmbHRfY29uZmlnID0gJnBfcGFyYW1zLT5kZmx0X2NmZzsKKwl1aW50MzJfdCB1bnVzZWRfbWFz azsKKworCS8qIFJ4IG9ubHkgKi8KKwlpZiAocF9mbV9wb3J0LT5wb3J0X3R5cGUgPT0gRk1fUE9S VF9UWVBFX1JYKSB7CisJCS8qIGV4dGVybmFsIGJ1ZmZlciBwb29scyAqLworCQlpZiAoIXBfcGFy YW1zLT5leHRfYnVmX3Bvb2xzLm51bV9vZl9wb29sc191c2VkKSB7CisJCQlwcl9lcnIoImV4dF9i dWZfcG9vbHMubnVtX29mX3Bvb2xzX3VzZWQ9MC4gQXQgbGVhc3Qgb25lIGJ1ZmZlciBwb29sIG11 c3QgYmUgZGVmaW5lZFxuIik7CisJCQlyZXR1cm4gLUVET007CisJCX0KKworCQlpZiAoZm1fc3Bf Y2hlY2tfYnVmX3Bvb2xzX3BhcmFtcygmcF9wYXJhbXMtPmV4dF9idWZfcG9vbHMsCisJCQkJCQkg cF9wYXJhbXMtPnBfYmFja3VwX2JtX3Bvb2xzLAorCQkJJnBfcGFyYW1zLT5idWZfcG9vbF9kZXBs ZXRpb24sCisJCQlwX2ZtX3BvcnQtPnBvcnRfaW50Zy0+bWF4X251bV9vZl9leHRfcG9vbHMsCisJ CQlwX2ZtX3BvcnQtPnBvcnRfaW50Zy0+Ym1fbWF4X251bV9vZl9wb29scykgIT0gMCkKKwkJCXJl dHVybiAtRURPTTsKKwkJLyogQ2hlY2sgdGhhdCBwYXJ0IG9mIElDIHRoYXQgbmVlZHMgY29weWlu ZyBpcyBzbWFsbCBlbm91Z2gKKwkJICogdG8gZW50ZXIgc3RhcnQgbWFyZ2luCisJCSAqLworCQlp ZiAocF9wYXJhbXMtPmludF9jb250ZXh0LnNpemUgJiYKKwkJICAgIChwX3BhcmFtcy0+aW50X2Nv bnRleHQuc2l6ZSArCisJCSAgICAgcF9wYXJhbXMtPmludF9jb250ZXh0LmV4dF9idWZfb2Zmc2V0 ID4KKwkJICAgICBwX3BhcmFtcy0+YnVmX21hcmdpbnMuc3RhcnRfbWFyZ2lucykpIHsKKwkJCXBy X2VycigiaW50X2NvbnRleHQuc2l6ZSBpcyBsYXJnZXIgdGhhbiBzdGFydCBtYXJnaW5zXG4iKTsK KwkJCXJldHVybiAtRURPTTsKKwkJfQorCisJCWlmICgocF9wYXJhbXMtPmxpb2RuX29mZnNldCAh PSBEUEFBX0xJT0ROX0RPTlRfT1ZFUlJJREUpICYmCisJCSAgICAocF9wYXJhbXMtPmxpb2RuX29m ZnNldCAmIH5GTV9MSU9ETl9PRkZTRVRfTUFTSykpIHsKKwkJCXByX2VycigibGlvZG5fb2Zmc2V0 IGlzIGxhcmdlciB0aGFuICVkXG4iLAorCQkJICAgICAgIEZNX0xJT0ROX09GRlNFVF9NQVNLICsg MSk7CisJCX0KKyNpZmRlZiBGTV9OT19CQUNLVVBfUE9PTFMKKwkJaWYgKChwX2ZtX3BvcnQtPmZt X3Jldl9pbmZvLm1ham9yX3JldiAhPSA0KSAmJgorCQkgICAgKHBfZm1fcG9ydC0+Zm1fcmV2X2lu Zm8ubWFqb3JfcmV2IDwgNikpCisJCQlpZiAocF9mbV9wb3J0LT5wX2ZtX3BvcnRfZHJ2X3BhcmFt LT4KKwkJCSAgICBwX2JhY2t1cF9ibV9wb29scykgeworCQkJCXByX2VycigiQmFja3VwQm1Qb29s c1xuIik7CisJCQkJcmV0dXJuIC1FTk9TWVM7CisJCQl9CisjZW5kaWYgLyogRk1fTk9fQkFDS1VQ X1BPT0xTICovCisJfQorCisJLyogICBOb24gUnggcG9ydHMgICAgICAgICAgICAgICAgICAgICAg ICovCisJZWxzZSB7CisJCWlmIChwX3BhcmFtcy0+ZGVxX3N1Yl9wb3J0YWwgPj0KKwkJICAgIHBf Zm1fcG9ydC0+cG9ydF9pbnRnLT5mbV9tYXhfbnVtX29mX3N1Yl9wb3J0YWxzKSB7CisJCQlwcl9l cnIoImRlcV9zdWJfcG9ydGFsIGhhcyB0byBiZSBpbiB0aGUgcmFuZ2Ugb2YgMCAtICVkXG4iLAor CQkJICAgICAgIHBfZm1fcG9ydC0+cG9ydF9pbnRnLT5mbV9tYXhfbnVtX29mX3N1Yl9wb3J0YWxz KTsKKwkJCXJldHVybiAtRURPTTsKKwkJfQorCisJCS8qIHRvIHByb3RlY3QgSFcgaW50ZXJuYWwt Y29udGV4dCBmcm9tIG92ZXJ3cml0ZSAqLworCQlpZiAoKHBfcGFyYW1zLT5pbnRfY29udGV4dC5z aXplKSAmJgorCQkgICAgKHBfcGFyYW1zLT5pbnRfY29udGV4dC5pbnRfY29udGV4dF9vZmZzZXQg PAorCQkgICAgIE1JTl9UWF9JTlRfT0ZGU0VUKSkgeworCQkJcHJfZXJyKCJub24tUnggaW50X2Nv bnRleHQuaW50X2NvbnRleHRfb2Zmc2V0IGNhbid0IGJlIHNtYWxsZXIgdGhhbiAlZFxuIiwKKwkJ CSAgICAgICBNSU5fVFhfSU5UX09GRlNFVCk7CisJCQlyZXR1cm4gLUVET007CisJCX0KKworCQlp ZiAoKHBfZm1fcG9ydC0+cG9ydF90eXBlID09IEZNX1BPUlRfVFlQRV9UWCkgfHwKKwkJICAgIC8q IGluIE8vSCBERUZBVUxUX05PVF9TVVBQT1JURUQgaW5kaWNhdGVzIHRoYXQKKwkJICAgICAqIGl0 IGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHNob3VsZCBub3QgYmUgY2hlY2tlZAorCQkgICAgICovCisJ CSAgICAocF9mbV9wb3J0LT5wX2ZtX3BvcnRfZHJ2X3BhcmFtLT5kZmx0X2NmZy4KKwkJICAgICB0 eF9maWZvX2RlcV9waXBlbGluZV9kZXB0aCAhPSBERUZBVUxUX05PVF9TVVBQT1JURUQpKSB7CisJ CQkvKiBDaGVjayB0aGF0IG5vdCBsYXJnZXIgdGhhbiA4ICovCisJCQlpZiAoKCFwX2ZtX3BvcnQt PnBfZm1fcG9ydF9kcnZfcGFyYW0tPmRmbHRfY2ZnLgorCQkJICAgICB0eF9maWZvX2RlcV9waXBl bGluZV9kZXB0aCkgfHwKKwkJCQkocF9mbV9wb3J0LT5wX2ZtX3BvcnRfZHJ2X3BhcmFtLT5kZmx0 X2NmZy4KKwkJCQl0eF9maWZvX2RlcV9waXBlbGluZV9kZXB0aCA+CisJCQkJTUFYX0ZJRk9fUElQ RUxJTkVfREVQVEgpKSB7CisJCQkJcHJfZXJyKCJmaWZvRGVxUGlwZWxpbmVEZXB0aCBjYW4ndCBi ZSBsYXJnZXIgdGhhbiAlZFxuIiwKKwkJCQkgICAgICAgTUFYX0ZJRk9fUElQRUxJTkVfREVQVEgp OworCQkJCXJldHVybiAtRURPTTsKKwkJCX0KKwkJfQorCX0KKworCS8qIFJ4IE9yIE9mZmxpbmUg UGFyc2luZyAqLworCWlmICgocF9mbV9wb3J0LT5wb3J0X3R5cGUgPT0gRk1fUE9SVF9UWVBFX1JY KSB8fAorCSAgICAocF9mbV9wb3J0LT5wb3J0X3R5cGUgPT0gRk1fUE9SVF9UWVBFX09QKSkgewor CQlpZiAoIXBfcGFyYW1zLT5kZmx0X2ZxaWQpIHsKKwkJCXByX2VycigiZGZsdF9mcWlkIG11c3Qg YmUgYmV0d2VlbiAxIGFuZCAyXjI0LTFcbiIpOworCQkJcmV0dXJuIC1FRE9NOworCQl9CisJfQor CisJLyogICBBbGwgcG9ydHMgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJLyogY29tbW9u IEJNSSByZWdpc3RlcnMgdmFsdWVzICovCisJLyogQ2hlY2sgdGhhdCBRdWV1ZSBJZCBpcyBub3Qg bGFyZ2VyIHRoYW4gMl4yNCwgYW5kIGlzIG5vdCAwICovCisJaWYgKChwX3BhcmFtcy0+ZXJyX2Zx aWQgJiB+MHgwMEZGRkZGRikgfHwgIXBfcGFyYW1zLT5lcnJfZnFpZCkgeworCQlwcl9lcnIoImVy cl9mcWlkIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAyXjI0LTFcbiIpOworCQlyZXR1cm4gLUVET007 CisJfQorCWlmIChwX3BhcmFtcy0+ZGZsdF9mcWlkICYgfjB4MDBGRkZGRkYpIHsKKwkJcHJfZXJy KCJkZmx0X2ZxaWQgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDJeMjQtMVxuIik7CisJCXJldHVybiAt RURPTTsKKwl9CisKKwkvKiBSeCBvbmx5ICovCisJaWYgKHBfZm1fcG9ydC0+cG9ydF90eXBlID09 IEZNX1BPUlRfVFlQRV9SWCkgeworCQlpZiAocF9kZmx0X2NvbmZpZy0+cnhfcHJpX2VsZXZhdGlv biAlIEJNSV9GSUZPX1VOSVRTKSB7CisJCQlwcl9lcnIoInJ4X2ZpZm9fcHJpX2VsZXZhdGlvbl9s ZXZlbCBoYXMgdG8gYmUgZGl2aXNpYmxlIGJ5ICVkXG4iLAorCQkJICAgICAgIEJNSV9GSUZPX1VO SVRTKTsKKwkJCXJldHVybiAtRURPTTsKKwkJfQorCQlpZiAoKHBfZGZsdF9jb25maWctPnJ4X3By aV9lbGV2YXRpb24gPCBCTUlfRklGT19VTklUUykgfHwKKwkJICAgIChwX2RmbHRfY29uZmlnLT5y eF9wcmlfZWxldmF0aW9uID4KKwkJICAgICBwX2ZtX3BvcnQtPnBvcnRfaW50Zy0+bWF4X3BvcnRf Zmlmb19zaXplKSkgeworCQkJcHJfZXJyKCJyeF9maWZvX3ByaV9lbGV2YXRpb25fbGV2ZWwgbm90 IGluIHJhbmdlIG9mIDI1NiAtICVkXG4iLAorCQkJICAgICAgIHBfZm1fcG9ydC0+cG9ydF9pbnRn LT5tYXhfcG9ydF9maWZvX3NpemUpOworCQkJcmV0dXJuIC1FRE9NOworCQl9CisJCWlmIChwX2Rm bHRfY29uZmlnLT5yeF9maWZvX3RociAlIEJNSV9GSUZPX1VOSVRTKSB7CisJCQlwcl9lcnIoInJ4 X2ZpZm9fdGhyZXNob2xkIG11c3QgYmUgZGl2IGJ5ICVkXG4iLAorCQkJICAgICAgIEJNSV9GSUZP X1VOSVRTKTsKKwkJCXJldHVybiAtRURPTTsKKwkJfQorCQlpZiAoKHBfZGZsdF9jb25maWctPnJ4 X2ZpZm9fdGhyIDwgQk1JX0ZJRk9fVU5JVFMpIHx8CisJCSAgICAocF9kZmx0X2NvbmZpZy0+cnhf Zmlmb190aHIgPgorCQkgICAgIHBfZm1fcG9ydC0+cG9ydF9pbnRnLT5tYXhfcG9ydF9maWZvX3Np emUpKSB7CisJCQlwcl9lcnIoInJ4X2ZpZm9fdGhyZXNob2xkIGhhcyB0byBiZSBpbiB0aGUgcmFu Z2Ugb2YgMjU2IC0gJWRcbiIsCisJCQkgICAgICAgcF9mbV9wb3J0LT5wb3J0X2ludGctPm1heF9w b3J0X2ZpZm9fc2l6ZSk7CisJCQlyZXR1cm4gLUVET007CisJCX0KKworCQkvKiBDaGVjayB0aGF0 IG5vdCBsYXJnZXIgdGhhbiAxNiAqLworCQlpZiAocF9kZmx0X2NvbmZpZy0+cnhfY3V0X2VuZF9i eXRlcyA+IEZSQU1FX0VORF9EQVRBX1NJWkUpIHsKKwkJCXByX2VycigiY3V0X2J5dGVzX2Zyb21f ZW5kIGNhbid0IGJlIGxhcmdlciB0aGFuICVkXG4iLAorCQkJICAgICAgIEZSQU1FX0VORF9EQVRB X1NJWkUpOworCQkJcmV0dXJuIC1FRE9NOworCQl9CisKKwkJaWYgKGZtX3NwX2NoZWNrX2J1Zl9t YXJnaW5zKCZwX3BhcmFtcy0+YnVmX21hcmdpbnMpICE9IDApCisJCQlyZXR1cm4gLUVET007CisK KwkJLyogZXh0cmEgRklGTyBzaXplIChhbGxvd2VkIG9ubHkgdG8gUnggcG9ydHMpICovCisJCWlm IChwX3BhcmFtcy0+c2V0X3NpemVfb2ZfZmlmbyAmJgorCQkgICAgKHBfZm1fcG9ydC0+Zmlmb19i dWZzLmV4dHJhICUgQk1JX0ZJRk9fVU5JVFMpKSB7CisJCQlwcl9lcnIoImZpZm9fYnVmcy5leHRy YSBoYXMgdG8gYmUgZGl2aXNpYmxlIGJ5ICVkXG4iLAorCQkJICAgICAgIEJNSV9GSUZPX1VOSVRT KTsKKwkJCXJldHVybiAtRURPTTsKKwkJfQorCisJCWlmIChwX3BhcmFtcy0+YnVmX3Bvb2xfZGVw bGV0aW9uLnBvb2xzX2dycF9tb2RlX2VuYWJsZSAmJgorCQkgICAgIXBfcGFyYW1zLT5idWZfcG9v bF9kZXBsZXRpb24ubnVtX29mX3Bvb2xzKSB7CisJCQlwcl9lcnIoImJ1Zl9wb29sX2RlcGxldGlv bi5udW1fb2ZfcG9vbHMgY2FuIG5vdCBiZSAwIHdoZW4gcG9vbHNfZ3JwX21vZGVfZW5hYmxlPXRy dWVcbiIpOworCQkJcmV0dXJuIC1FRE9NOworCQl9CisjaWZkZWYgRk1fQ1NJX0NGRURfTElNSVQK KwkJaWYgKHBfZm1fcG9ydC0+Zm1fcmV2X2luZm8ubWFqb3JfcmV2ID09IDQpIHsKKwkJCS8qIENo ZWNrIHRoYXQgbm90IGxhcmdlciB0aGFuIDE2ICovCisJCQlpZiAocF9kZmx0X2NvbmZpZy0+cnhf Y3V0X2VuZF9ieXRlcyArCisJCQkgICAgcF9kZmx0X2NvbmZpZy0+Y2hlY2tzdW1fYnl0ZXNfaWdu b3JlID4KKwkJCSAgICBGUkFNRV9FTkRfREFUQV9TSVpFKSB7CisJCQkJcHJfZXJyKCJjaGVrc3Vt X2xhc3RfYnl0ZXNfaWdub3JlICsgY3V0X2J5dGVzX2Zyb21fZW5kIGNhbid0IGJlIGxhcmdlciB0 aGFuICVkXG4iLAorCQkJCSAgICAgICBGUkFNRV9FTkRfREFUQV9TSVpFKTsKKwkJCQlyZXR1cm4g LUVET007CisJCQl9CisJCX0KKyNlbmRpZiAvKiBGTV9DU0lfQ0ZFRF9MSU1JVCAqLworCX0KKwor CS8qIE5vbiBSeCBwb3J0cyAqLworCS8qIGV4dHJhIEZJRk8gc2l6ZSAoYWxsb3dlZCBvbmx5IHRv IFJ4IHBvcnRzKSAqLworCWVsc2UgaWYgKHBfZm1fcG9ydC0+Zmlmb19idWZzLmV4dHJhKSB7CisJ CXByX2VycigiIE5vIGZpZm9fYnVmcy5leHRyYSBmb3Igbm9uIFJ4IHBvcnRzXG4iKTsKKwkJcmV0 dXJuIC1FRE9NOworCX0KKworCS8qIFR4IG9ubHkgKi8KKwlpZiAocF9mbV9wb3J0LT5wb3J0X3R5 cGUgPT0gRk1fUE9SVF9UWVBFX1RYKSB7CisJCWlmIChwX2RmbHRfY29uZmlnLT50eF9maWZvX21p bl9sZXZlbCAlIEJNSV9GSUZPX1VOSVRTKSB7CisJCQlwcl9lcnIoInR4X2ZpZm9fbWluX2ZpbGxf bGV2ZWwgaGFzIHRvIGJlIGRpdmlzaWJsZSBieSAlZFxuIiwKKwkJCSAgICAgICBCTUlfRklGT19V TklUUyk7CisJCQlyZXR1cm4gLUVET007CisJCX0KKwkJaWYgKHBfZGZsdF9jb25maWctPnR4X2Zp Zm9fbWluX2xldmVsID4KKwkJICAgIChwX2ZtX3BvcnQtPnBvcnRfaW50Zy0+bWF4X3BvcnRfZmlm b19zaXplIC0gMjU2KSkgeworCQkJcHJfZXJyKCJ0eF9maWZvX21pbl9maWxsX2xldmVsIGhhcyB0 byBiZSBpbiB0aGUgcmFuZ2Ugb2YgMCAtICVkXG4iLAorCQkJICAgICAgIChwX2ZtX3BvcnQtPnBv cnRfaW50Zy0+bWF4X3BvcnRfZmlmb19zaXplIC0KKwkJCQkyNTYpKTsKKwkJCXJldHVybiAtRURP TTsKKwkJfQorCQlpZiAocF9kZmx0X2NvbmZpZy0+dHhfZmlmb19sb3dfY29tZl9sZXZlbCAlIEJN SV9GSUZPX1VOSVRTKSB7CisJCQlwcl9lcnIoInR4X2ZpZm9fbG93X2NvbWZfbGV2ZWwgaGFzIHRv IGJlIGRpdmlzaWJsZSBieSAlZFxuIiwKKwkJCSAgICAgICBCTUlfRklGT19VTklUUyk7CisJCQly ZXR1cm4gLUVET007CisJCX0KKwkJaWYgKChwX2RmbHRfY29uZmlnLT50eF9maWZvX2xvd19jb21m X2xldmVsIDwgQk1JX0ZJRk9fVU5JVFMpIHx8CisJCSAgICAocF9kZmx0X2NvbmZpZy0+dHhfZmlm b19sb3dfY29tZl9sZXZlbCA+CisJCSAgICAgcF9mbV9wb3J0LT5wb3J0X2ludGctPm1heF9wb3J0 X2ZpZm9fc2l6ZSkpIHsKKwkJCXByX2VycigidHhfZmlmb19sb3dfY29tZl9sZXZlbCBoYXMgdG8g YmUgaW4gdGhlIHJhbmdlIG9mIDI1NiAtICVkXG4iLAorCQkJICAgICAgIHBfZm1fcG9ydC0+cG9y dF9pbnRnLT5tYXhfcG9ydF9maWZvX3NpemUpOworCQkJcmV0dXJuIC1FRE9NOworCQl9CisJCWlm IChwX2ZtX3BvcnQtPnBvcnRfc3BlZWQgPT0gRk1fUE9SVF9TUEVFRF8xRykKKwkJCWlmIChwX2Zt X3BvcnQtPnBfZm1fcG9ydF9kcnZfcGFyYW0tPmRmbHRfY2ZnLgorCQkJICAgIHR4X2ZpZm9fZGVx X3BpcGVsaW5lX2RlcHRoID4gMikgeworCQkJCXByX2VycigiZmlmb0RlcVBpcGVsaW5lRGVwdGgg Zm9yIDFHIGNhbid0IGJlIGxhcmdlciB0aGFuIDJcbiIpOworCQkJCXJldHVybiAtRURPTTsKKwkJ CX0KKwl9CisKKwkvKiAgIE5vbiBUeCBQb3J0cyAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkv KiBJZiBkaXNjYXJkIG92ZXJyaWRlIHdhcyBzZWxlY3RlZCAsIG5vIGZyYW1lcyBtYXkgYmUgZGlz Y2FyZGVkLiAqLworCWVsc2UgaWYgKHBfZGZsdF9jb25maWctPmRpc2NhcmRfb3ZlcnJpZGUgJiYg cF9wYXJhbXMtPgorCQkgZXJyb3JzX3RvX2Rpc2NhcmQpIHsKKwkJcHJfZXJyKCJlcnJvcnNfdG9f ZGlzY2FyZCBpcyBub3QgZW1wdHksIGJ1dCBmcm1fZGlzY2FyZF9vdmVycmlkZSBzZWxlY3RlZCAo YWxsIGRpc2NhcmRlZCBmcmFtZXMgdG8gYmUgZW5xdWV1ZWQgdG8gZXJyb3IgcXVldWUpLlxuIik7 CisJCXJldHVybiAtRU5PU1lTOworCX0KKworCS8qIFJ4IGFuZCBPZmZsaW5lIHBhcnNpbmcgKi8K KwlpZiAoKHBfZm1fcG9ydC0+cG9ydF90eXBlID09IEZNX1BPUlRfVFlQRV9SWCkgfHwKKwkgICAg KHBfZm1fcG9ydC0+cG9ydF90eXBlID09IEZNX1BPUlRfVFlQRV9PUCkpIHsKKwkJaWYgKHBfZm1f cG9ydC0+cG9ydF90eXBlID09IEZNX1BPUlRfVFlQRV9PUCkKKwkJCXVudXNlZF9tYXNrID0gQk1J X1NUQVRVU19PUF9NQVNLX1VOVVNFRDsKKwkJZWxzZQorCQkJdW51c2VkX21hc2sgPSBCTUlfU1RB VFVTX1JYX01BU0tfVU5VU0VEOworCisJCS8qIENoZWNrIHRoYXQgbm8gY29tbW9uIGJpdHMgd2l0 aCBCTUlfU1RBVFVTX01BU0tfVU5VU0VEICovCisJCWlmIChwX3BhcmFtcy0+ZXJyb3JzX3RvX2Rp c2NhcmQgJiB1bnVzZWRfbWFzaykgeworCQkJcHJfZXJyKCJlcnJvcnNfdG9fZGlzY2FyZCBjb250 YWlucyB1bmRlZmluZWQgYml0c1xuIik7CisJCQlyZXR1cm4gLUVOT1NZUzsKKwkJfQorCX0KKwor CS8qIE9mZmxpbmUgUG9ydHMgKi8KKyNpZmRlZiBGTV9PUF9PUEVOX0RNQV9NSU5fTElNSVQKKwlp ZiAoKHBfZm1fcG9ydC0+Zm1fcmV2X2luZm8ubWFqb3JfcmV2ID49IDYpICYmCisJICAgIChwX2Zt X3BvcnQtPnBvcnRfdHlwZSA9PSBGTV9QT1JUX1RZUEVfT1ApICYmCisJICAgIHBfcGFyYW1zLT5z ZXRfbnVtX29mX29wZW5fZG1hcyAmJgorCSAgICAocF9mbV9wb3J0LT5vcGVuX2RtYXMubnVtIDwg TUlOX05VTV9PRl9PUF9ETUFTKSkgeworCQlwcl9lcnIoIkZvciBPZmZsaW5lIHBvcnQsIG9wZW5f ZG1hcy5udW0gY2FuJ3QgYmUgc21hbGxlciB0aGFuICVkXG4iLAorCQkgICAgICAgTUlOX05VTV9P Rl9PUF9ETUFTKTsKKwkJcmV0dXJuIC1FRE9NOworCX0KKyNlbmRpZiAvKiBGTV9PUF9PUEVOX0RN QV9NSU5fTElNSVQgKi8KKworCS8qIE9mZmxpbmUgUG9ydHMgKi8KKwlpZiAocF9mbV9wb3J0LT5w b3J0X3R5cGUgPT0gRk1fUE9SVF9UWVBFX09QKSB7CisjaWZuZGVmIEZNX0ZSQU1FX0VORF9QQVJB TVNfRk9SX09QCisJCWlmICgocF9mbV9wb3J0LT5mbV9yZXZfaW5mby5tYWpvcl9yZXYgPCA2KSAm JgorCQkgICAgKHBfZm1fcG9ydC0+cF9mbV9wb3J0X2Rydl9wYXJhbS0+CisJCSAgICAgY2hla3N1 bV9sYXN0X2J5dGVzX2lnbm9yZSAhPQorCQkgICAgIERFRkFVTFRfTk9UX1NVUFBPUlRFRCkpIHsK KwkJCS8qIHRoaXMgaXMgYW4gaW5kaWNhdGlvbiB0aGF0IHVzZXIgY2FsbGVkIGNvbmZpZworCQkJ ICogZm9yIHRoaXMgbW9kZSB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMKKwkJCSAqIGlu dGVncmF0aW9uCisJCQkgKi8KKwkJCXByX2VycigiY2hla3N1bV9sYXN0X2J5dGVzX2lnbm9yZSBp cyBhdmFpbGFibGUgZm9yIFJ4JlR4IHBvcnRzIG9ubHlcbiIpOworCQkJcmV0dXJuIC1FRE9NOwor CQl9CisjZW5kaWYgLyogIUZNX0ZSQU1FX0VORF9QQVJBTVNfRk9SX09QICovCisKKyNpZm5kZWYg Rk1fREVRX1BJUEVMSU5FX1BBUkFNU19GT1JfT1AKKwkJaWYgKCghKChwX2ZtX3BvcnQtPmZtX3Jl dl9pbmZvLm1ham9yX3JldiA9PSA0KSB8fAorCQkgICAgICAgKHBfZm1fcG9ydC0+Zm1fcmV2X2lu Zm8ubWFqb3JfcmV2ID49IDYpKSkgJiYKKwkJICAgIChwX2ZtX3BvcnQtPnBfZm1fcG9ydF9kcnZf cGFyYW0tPmRmbHRfY2ZnLgorCQkgICAgIHR4X2ZpZm9fZGVxX3BpcGVsaW5lX2RlcHRoICE9IERF RkFVTFRfTk9UX1NVUFBPUlRFRCkpIHsKKwkJCS8qIHRoaXMgaXMgYW4gaW5kaWNhdGlvbiB0aGF0 IHVzZXIgY2FsbGVkIGNvbmZpZyBmb3IKKwkJCSAqIHRoaXMgbW9kZSB3aGljaCBpcyBub3Qgc3Vw cG9ydGVkIGluIHRoaXMgaW50ZWdyYXRpb24KKwkJCSAqKi8KKwkJCXByX2VycigiZmlmb0RlcVBp cGVsaW5lRGVwdGggaXMgYXZhaWxhYmxlIGZvciBUeCBwb3J0cyBvbmx5XG4iKTsKKwkJCXJldHVy biAtRU5PU1lTOworCQl9CisjZW5kaWYgLyogIUZNX0RFUV9QSVBFTElORV9QQVJBTVNfRk9SX09Q ICovCisJfQorCisJLyogICBBbGwgcG9ydHMgICAgICAgICAgICAgICAgICAgICAgICAgICovCisK KwkvKiBDaGVjayB0aGF0IG5vdCBsYXJnZXIgdGhhbiAxNiAqLworCWlmICgocF9wYXJhbXMtPmNo ZWtzdW1fbGFzdF9ieXRlc19pZ25vcmUgPiBGUkFNRV9FTkRfREFUQV9TSVpFKSAmJgorCSAgICAo KHBfcGFyYW1zLT5jaGVrc3VtX2xhc3RfYnl0ZXNfaWdub3JlICE9IERFRkFVTFRfTk9UX1NVUFBP UlRFRCkpKSB7CisJCXByX2VycigiY2hla3N1bV9sYXN0X2J5dGVzX2lnbm9yZSBjYW4ndCBiZSBs YXJnZXIgdGhhbiAlZFxuIiwKKwkJICAgICAgIEZSQU1FX0VORF9EQVRBX1NJWkUpOworCQlyZXR1 cm4gLUVET007CisJfQorCisJaWYgKGZtX3NwX2NoZWNrX2ludF9jb250ZXh0X3BhcmFtcygmcF9w YXJhbXMtPmludF9jb250ZXh0KSAhPSAwKQorCQlyZXR1cm4gLUVET007CisKKwkvKiBjb21tb24g Qk1JIHJlZ2lzdGVycyB2YWx1ZXMgKi8KKwlpZiAocF9wYXJhbXMtPnNldF9udW1fb2ZfdGFza3Mg JiYKKwkgICAgKCghcF9mbV9wb3J0LT50YXNrcy5udW0pIHx8CisJICAgICAocF9mbV9wb3J0LT50 YXNrcy5udW0gPiBNQVhfTlVNX09GX1RBU0tTKSkpIHsKKwkJcHJfZXJyKCJ0YXNrcy5udW0gY2Fu J3QgYmUgbGFyZ2VyIHRoYW4gJWRcbiIsCisJCSAgICAgICBNQVhfTlVNX09GX1RBU0tTKTsKKwkJ cmV0dXJuIC1FRE9NOworCX0KKwlpZiAocF9wYXJhbXMtPnNldF9udW1fb2ZfdGFza3MgJiYKKwkg ICAgKHBfZm1fcG9ydC0+dGFza3MuZXh0cmEgPiBNQVhfTlVNX09GX0VYVFJBX1RBU0tTKSkgewor CQlwcl9lcnIoInRhc2tzLmV4dHJhIGNhbid0IGJlIGxhcmdlciB0aGFuICVkXG4iLAorCQkgICAg ICAgTUFYX05VTV9PRl9FWFRSQV9UQVNLUyk7CisJCXJldHVybiAtRURPTTsKKwl9CisJaWYgKHBf cGFyYW1zLT5zZXRfbnVtX29mX29wZW5fZG1hcyAmJgorCSAgICAoKCFwX2ZtX3BvcnQtPm9wZW5f ZG1hcy5udW0pIHx8CisJICAgICAocF9mbV9wb3J0LT5vcGVuX2RtYXMubnVtID4gTUFYX05VTV9P Rl9ETUFTKSkpIHsKKwkJcHJfZXJyKCJvcGVuX2RtYXMubnVtIGNhbid0IGJlIGxhcmdlciB0aGFu ICVkXG4iLAorCQkgICAgICAgTUFYX05VTV9PRl9ETUFTKTsKKwkJcmV0dXJuIC1FRE9NOworCX0K KwlpZiAocF9wYXJhbXMtPnNldF9udW1fb2Zfb3Blbl9kbWFzICYmCisJICAgIChwX2ZtX3BvcnQt Pm9wZW5fZG1hcy5leHRyYSA+IE1BWF9OVU1fT0ZfRVhUUkFfRE1BUykpIHsKKwkJcHJfZXJyKCJv cGVuX2RtYXMuZXh0cmEgY2FuJ3QgYmUgbGFyZ2VyIHRoYW4gJWRcbiIsCisJCSAgICAgICBNQVhf TlVNX09GX0VYVFJBX0RNQVMpOworCQlyZXR1cm4gLUVET007CisJfQorCWlmIChwX3BhcmFtcy0+ c2V0X3NpemVfb2ZfZmlmbyAmJgorCSAgICAoIXBfZm1fcG9ydC0+Zmlmb19idWZzLm51bSB8fCAo cF9mbV9wb3J0LT5maWZvX2J1ZnMubnVtID4KKwkgICAgIHBfZm1fcG9ydC0+cG9ydF9pbnRnLT5t YXhfcG9ydF9maWZvX3NpemUpKSkgeworCQlwcl9lcnIoImZpZm9fYnVmcy5udW0gaGFzIHRvIGJl IGluIHRoZSByYW5nZSBvZiAyNTYgLSAlZFxuIiwKKwkJICAgICAgIHBfZm1fcG9ydC0+cG9ydF9p bnRnLT5tYXhfcG9ydF9maWZvX3NpemUpOworCQlyZXR1cm4gLUVET007CisJfQorCWlmIChwX3Bh cmFtcy0+c2V0X3NpemVfb2ZfZmlmbyAmJgorCSAgICAocF9mbV9wb3J0LT5maWZvX2J1ZnMubnVt ICUgQk1JX0ZJRk9fVU5JVFMpKSB7CisJCXByX2VycigiZmlmb19idWZzLm51bSBoYXMgdG8gYmUg ZGl2aXNpYmxlIGJ5ICVkXG4iLAorCQkgICAgICAgQk1JX0ZJRk9fVU5JVFMpOworCQlyZXR1cm4g LUVET007CisJfQorCisjaWZkZWYgRk1fUU1JX05PX0RFUV9PUFRJT05TX1NVUFBPUlQKKwlpZiAo cF9mbV9wb3J0LT5mbV9yZXZfaW5mby5tYWpvcl9yZXYgPT0gNCkKKwkJaWYgKHBfZm1fcG9ydC0+ cF9mbV9wb3J0X2Rydl9wYXJhbS0+ZGVxX3ByZWZldGNoX29wdGlvbiAhPQorCQkgICAgREVGQVVM VF9OT1RfU1VQUE9SVEVEKSB7CisJCQkvKiB0aGlzIGlzIGFuIGluZGljYXRpb24gdGhhdCB1c2Vy IGNhbGxlZCBjb25maWcKKwkJCSAqIGZvciB0aGlzIG1vZGUgd2hpY2ggaXMgbm90IHN1cHBvcnRl ZCBpbiB0aGlzCisJCQkgKiBpbnRlZ3JhdGlvbgorCQkJICoqLworCQkJcHJfZXJyKCJkZXFfcHJl ZmV0Y2hfb3B0aW9uXG4iKTsKKwkJCXJldHVybiAtRU5PU1lTOworCQl9CisjZW5kaWYgLyogRk1f UU1JX05PX0RFUV9PUFRJT05TX1NVUFBPUlQgKi8KKworCXJldHVybiAwOworfQorCisvKiBDaGVj a3MgaWYgcF9mbV9wb3J0IGRyaXZlciBwYXJhbWV0ZXJzIHdlcmUgaW5pdGlhbGl6ZWQKKyAqIHJl dHVybnMgMCBpZiBzdWNjZXNzIGVsc2UgcmV0dXJucyBlcnJvciBjb2RlCisgKi8KK3N0YXRpYyBp bnQgaXNfaW5pdF9kb25lKHN0cnVjdCBmbV9wb3J0X2Rydl9wYXJhbV90ICpwX2ZtX3BvcnRfZHJ2 X3BhcmFtZXRlcnMpCit7CisJaWYgKCFwX2ZtX3BvcnRfZHJ2X3BhcmFtZXRlcnMpCisJCXJldHVy biAwOworCXJldHVybiAtRU5PU1lTOworfQorCitzdGF0aWMgaW50IHZlcmlmeV9zaXplX29mX2Zp Zm8oc3RydWN0IGZtX3BvcnRfdCAqcF9mbV9wb3J0KQoreworCXVpbnQzMl90IG1pbl9maWZvX3Np emVfcmVxdWlyZWQgPSAwLCBvcHRfZmlmb19zaXplX2Zvcl9iMmIgPSAwOworCisJLyogVFggUE9S VFMgKi8KKwlpZiAocF9mbV9wb3J0LT5wb3J0X3R5cGUgPT0gRk1fUE9SVF9UWVBFX1RYKSB7CisJ CW1pbl9maWZvX3NpemVfcmVxdWlyZWQgPSAodWludDMyX3QpCisJCSAgICAoUk9VTkRfVVAocF9m bV9wb3J0LT5tYXhfZnJhbWVfbGVuZ3RoLAorCQkJICAgICAgQk1JX0ZJRk9fVU5JVFMpICsgKDMg KiBCTUlfRklGT19VTklUUykpOworCisJCW1pbl9maWZvX3NpemVfcmVxdWlyZWQgKz0KKwkJICAg IHBfZm1fcG9ydC0+cF9mbV9wb3J0X2Rydl9wYXJhbS0+CisJCSAgICBkZmx0X2NmZy50eF9maWZv X2RlcV9waXBlbGluZV9kZXB0aCAqIEJNSV9GSUZPX1VOSVRTOworCisJCW9wdF9maWZvX3NpemVf Zm9yX2IyYiA9IG1pbl9maWZvX3NpemVfcmVxdWlyZWQ7CisKKwkJLyogQWRkIHNvbWUgbWFyZ2lu IGZvciBiYWNrLXRvLWJhY2sgY2FwYWJpbGl0eSB0byBpbXByb3ZlCisJCSAqIHBlcmZvcm1hbmNl LCBhbGxvd3MgdGhlIGhhcmR3YXJlIHRvIHBpcGVsaW5lIG5ldyBmcmFtZSBkbWEKKwkJICogd2hp bGUgdGhlIHByZXZpb3VzIGZyYW1lIG5vdCB5ZXQgdHJhbnNtaXR0ZWQuCisJCSAqLworCQlpZiAo cF9mbV9wb3J0LT5wb3J0X3NwZWVkID09IEZNX1BPUlRfU1BFRURfMTBHKQorCQkJb3B0X2ZpZm9f c2l6ZV9mb3JfYjJiICs9IDMgKiBCTUlfRklGT19VTklUUzsKKwkJZWxzZQorCQkJb3B0X2ZpZm9f c2l6ZV9mb3JfYjJiICs9IDIgKiBCTUlfRklGT19VTklUUzsKKwl9CisKKwkvKiBSWCBQT1JUUyAq LworCWVsc2UgaWYgKHBfZm1fcG9ydC0+cG9ydF90eXBlID09IEZNX1BPUlRfVFlQRV9SWCkgewor CQlpZiAocF9mbV9wb3J0LT5mbV9yZXZfaW5mby5tYWpvcl9yZXYgPT0gNCkgeworCQkJaWYgKHBf Zm1fcG9ydC0+cnhfcG9vbHNfcGFyYW1zLm51bV9vZl9wb29scyA9PSAxKQorCQkJCW1pbl9maWZv X3NpemVfcmVxdWlyZWQgPSA4ICogQk1JX0ZJRk9fVU5JVFM7CisJCQllbHNlCisJCQkJbWluX2Zp Zm9fc2l6ZV9yZXF1aXJlZCA9ICh1aW50MzJfdCkKKwkJCQkgICAgKFJPVU5EX1VQCisJCQkJICAg ICAocF9mbV9wb3J0LT4KKwkJCQkgICAgICByeF9wb29sc19wYXJhbXMuc2Vjb25kX2xhcmdlc3Rf YnVmX3NpemUsCisJCQkJICAgICAgQk1JX0ZJRk9fVU5JVFMpICsgKDcgKiBCTUlfRklGT19VTklU UykpOworCQl9IGVsc2UgeworCQkJaWYgKHBfZm1fcG9ydC0+Zm1fcmV2X2luZm8ubWFqb3JfcmV2 ID49IDYpCisJCQkJbWluX2ZpZm9fc2l6ZV9yZXF1aXJlZCA9ICh1aW50MzJfdCkKKwkJCQkoUk9V TkRfVVAocF9mbV9wb3J0LT5tYXhfZnJhbWVfbGVuZ3RoLAorCQkJCQlCTUlfRklGT19VTklUUykg KyAoNSAqIEJNSV9GSUZPX1VOSVRTKSk7CisJCQkJLyogNCBhY2NvcmRpbmcgdG8gc3BlYyArIDEg Zm9yIEZPRj4wICovCisJCQllbHNlCisJCQkJbWluX2ZpZm9fc2l6ZV9yZXF1aXJlZCA9ICh1aW50 MzJfdCkKKwkJCQkoUk9VTkRfVVAobWluKHBfZm1fcG9ydC0+bWF4X2ZyYW1lX2xlbmd0aCwKKwkJ CQkJCXBfZm1fcG9ydC0+cnhfcG9vbHNfcGFyYW1zLgorCQkJCQkJbGFyZ2VzdF9idWZfc2l6ZSks CisJCQkJCUJNSV9GSUZPX1VOSVRTKSArICg3ICogQk1JX0ZJRk9fVU5JVFMpKTsKKwkJfQorCisJ CW9wdF9maWZvX3NpemVfZm9yX2IyYiA9IG1pbl9maWZvX3NpemVfcmVxdWlyZWQ7CisKKwkJLyog QWRkIHNvbWUgbWFyZ2luIGZvciBiYWNrLXRvLWJhY2sgY2FwYWJpbGl0eSB0byBpbXByb3ZlCisJ CSAqIHBlcmZvcm1hbmNlLGFsbG93cyB0aGUgaGFyZHdhcmUgdG8gcGlwZWxpbmUgbmV3IGZyYW1l IGRtYQorCQkgKiB3aGlsZSB0aGUgcHJldmlvdXMgZnJhbWUgbm90IHlldCB0cmFuc21pdHRlZC4K KwkJICovCisJCWlmIChwX2ZtX3BvcnQtPnBvcnRfc3BlZWQgPT0gRk1fUE9SVF9TUEVFRF8xMEcp CisJCQlvcHRfZmlmb19zaXplX2Zvcl9iMmIgKz0gOCAqIEJNSV9GSUZPX1VOSVRTOworCQllbHNl CisJCQlvcHRfZmlmb19zaXplX2Zvcl9iMmIgKz0gMyAqIEJNSV9GSUZPX1VOSVRTOworCX0KKwor CS8qIEZvciBPL0ggcG9ydHMsIGNoZWNrIGZpZm8gc2l6ZSBhbmQgdXBkYXRlIGlmIG5lY2Vzc2Fy eSAqLworCWVsc2UgaWYgKHBfZm1fcG9ydC0+cG9ydF90eXBlID09IEZNX1BPUlRfVFlQRV9PUCkg eworCQlpZiAocF9mbV9wb3J0LT5mbV9yZXZfaW5mby5tYWpvcl9yZXYgPj0gNikgeworCQkJb3B0 X2ZpZm9fc2l6ZV9mb3JfYjJiID0gICh1aW50MzJfdCkoUk9VTkRfVVAoCisJCQkJcF9mbV9wb3J0 LT5tYXhfZnJhbWVfbGVuZ3RoLAorCQkJCUJNSV9GSUZPX1VOSVRTKSArCisJCQkJKChwX2ZtX3Bv cnQtPnBfZm1fcG9ydF9kcnZfcGFyYW0tPmRmbHRfY2ZnLgorCQkJCXR4X2ZpZm9fZGVxX3BpcGVs aW5lX2RlcHRoICsgNSkgKgorCQkJCUJNSV9GSUZPX1VOSVRTKSk7CisJCQltaW5fZmlmb19zaXpl X3JlcXVpcmVkID0gb3B0X2ZpZm9fc2l6ZV9mb3JfYjJiOworCQkvKiA0IGFjY29yZGluZyB0byBz cGVjICsgMSBmb3IgRk9GPjAgKi8KKwkJfSBlbHNlIHsKKwkJCW9wdF9maWZvX3NpemVfZm9yX2Iy YiA9CisJCQkodWludDMyX3QpKChwX2ZtX3BvcnQtPnRhc2tzLm51bSArIDIpICogQk1JX0ZJRk9f VU5JVFMpOworCQkJbWluX2ZpZm9fc2l6ZV9yZXF1aXJlZCA9IG9wdF9maWZvX3NpemVfZm9yX2Iy YjsKKwkJfQorCX0KKworCUFTU0VSVChtaW5fZmlmb19zaXplX3JlcXVpcmVkID4gMCk7CisJQVNT RVJUKG9wdF9maWZvX3NpemVfZm9yX2IyYiA+PSBtaW5fZmlmb19zaXplX3JlcXVpcmVkKTsKKwor CS8qIFZlcmlmeSB0aGUgc2l6ZSAgKi8KKwlpZiAocF9mbV9wb3J0LT5maWZvX2J1ZnMubnVtIDwg bWluX2ZpZm9fc2l6ZV9yZXF1aXJlZCkKKwkJcHJfZGVidWcoIkZJRk8gc2l6ZSBzaG91bGQgYmUg ZW5sYXJnZWQgdG8gJWQgYnl0ZXNcbiIsCisJCQkgbWluX2ZpZm9fc2l6ZV9yZXF1aXJlZCk7CisJ ZWxzZSBpZiAocF9mbV9wb3J0LT5maWZvX2J1ZnMubnVtIDwgb3B0X2ZpZm9fc2l6ZV9mb3JfYjJi KQorCQlwcl9kZWJ1ZygiRm9yIGIyYiBwcm9jZXNzaW5nLEZJRk8gbWF5IGJlIGVubGFyZ2VkIHRv ICVkIGJ5dGVzXG4iLAorCQkJIG9wdF9maWZvX3NpemVfZm9yX2IyYik7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIHZvaWQgZm1fcG9ydF9kcnZfcGFyYW1fZnJlZShzdHJ1Y3QgZm1fcG9ydF90 ICpwX2ZtX3BvcnQpCit7CisJa2ZyZWUocF9mbV9wb3J0LT5wX2ZtX3BvcnRfZHJ2X3BhcmFtKTsK KwlwX2ZtX3BvcnQtPnBfZm1fcG9ydF9kcnZfcGFyYW0gPSBOVUxMOworfQorCitzdGF0aWMgaW50 IHNldF9leHRfYnVmZmVyX3Bvb2xzKHN0cnVjdCBmbV9wb3J0X3QgKnBfZm1fcG9ydCkKK3sKKwlz dHJ1Y3QgZm1fZXh0X3Bvb2xzX3QgKnBfZXh0X2J1Zl9wb29scyA9CisJICAgICZwX2ZtX3BvcnQt PnBfZm1fcG9ydF9kcnZfcGFyYW0tPmV4dF9idWZfcG9vbHM7CisJc3RydWN0IGZtX2J1Zl9wb29s X2RlcGxldGlvbl90ICpwX2J1Zl9wb29sX2RlcGxldGlvbiA9CisJICAgICZwX2ZtX3BvcnQtPnBf Zm1fcG9ydF9kcnZfcGFyYW0tPmJ1Zl9wb29sX2RlcGxldGlvbjsKKwl1aW50OF90IG9yZGVyZWRf YXJyYXlbRk1fUE9SVF9NQVhfTlVNX09GX0VYVF9QT09MU107CisJdWludDE2X3Qgc2l6ZXNfYXJy YXlbQk1fTUFYX05VTV9PRl9QT09MU107CisJaW50IGkgPSAwLCBqID0gMCwgZXJyOworCXN0cnVj dCBmbWFuX3BvcnRfYnBvb2xzIGJwb29sczsKKworCW1lbXNldCgmb3JkZXJlZF9hcnJheSwgMCwK KwkgICAgICAgc2l6ZW9mKHVpbnQ4X3QpICogRk1fUE9SVF9NQVhfTlVNX09GX0VYVF9QT09MUyk7 CisJbWVtc2V0KCZzaXplc19hcnJheSwgMCwgc2l6ZW9mKHVpbnQxNl90KSAqIEJNX01BWF9OVU1f T0ZfUE9PTFMpOworCW1lbWNweSgmcF9mbV9wb3J0LT5leHRfYnVmX3Bvb2xzLCBwX2V4dF9idWZf cG9vbHMsCisJICAgICAgIHNpemVvZihzdHJ1Y3QgZm1fZXh0X3Bvb2xzX3QpKTsKKworCWZtX3Nw X3NldF9idWZfcG9vbHNfaW5fYXNjX29yZGVyX29mX2J1Zl9zaXplcyhwX2V4dF9idWZfcG9vbHMs CisJCQkJCQkgICAgICBvcmRlcmVkX2FycmF5LAorCQkJCQkJICAgICAgc2l6ZXNfYXJyYXkpOwor CisJLyogUHJlcGFyZSBmbGlicyBicG9vbHMgc3RydWN0dXJlICovCisJbWVtc2V0KCZicG9vbHMs IDAsIHNpemVvZihzdHJ1Y3QgZm1hbl9wb3J0X2Jwb29scykpOworCWJwb29scy5jb3VudCA9IHBf ZXh0X2J1Zl9wb29scy0+bnVtX29mX3Bvb2xzX3VzZWQ7CisJYnBvb2xzLmNvdW50ZXJzX2VuYWJs ZSA9IHRydWU7CisJZm9yIChpID0gMDsgaSA8IHBfZXh0X2J1Zl9wb29scy0+bnVtX29mX3Bvb2xz X3VzZWQ7IGkrKykgeworCQlicG9vbHMuYnBvb2xbaV0uYnBpZCA9IG9yZGVyZWRfYXJyYXlbaV07 CisJCWJwb29scy5icG9vbFtpXS5zaXplID0gc2l6ZXNfYXJyYXlbb3JkZXJlZF9hcnJheVtpXV07 CisJCS8qIGZ1bmN0aW9uYWxpdHkgYXZhaWxhYmxlIG9ubHkgZm9yIHNvbWUgZGVyaXZhdGl2ZXMK KwkJICogKGxpbWl0ZWQgYnkgY29uZmlnKQorCQkgKi8KKwkJaWYgKHBfZm1fcG9ydC0+cF9mbV9w b3J0X2Rydl9wYXJhbS0+cF9iYWNrdXBfYm1fcG9vbHMpCisJCQlmb3IgKGogPSAwOyBqIDwgcF9m bV9wb3J0LT5wX2ZtX3BvcnRfZHJ2X3BhcmFtLT4KKwkJCSAgICAgcF9iYWNrdXBfYm1fcG9vbHMt Pm51bV9vZl9iYWNrdXBfcG9vbHM7IGorKykKKwkJCQlpZiAob3JkZXJlZF9hcnJheVtpXSA9PQor CQkJCSAgICBwX2ZtX3BvcnQtPnBfZm1fcG9ydF9kcnZfcGFyYW0tPgorCQkJCSAgICBwX2JhY2t1 cF9ibV9wb29scy0+cG9vbF9pZHNbal0pIHsKKwkJCQkJYnBvb2xzLmJwb29sW2ldLmlzX2JhY2t1 cCA9IHRydWU7CisJCQkJCWJyZWFrOworCQkJCX0KKwl9CisKKwkvKiBzYXZlIHBvb2xzIHBhcmFt ZXRlcnMgZm9yIGxhdGVyIHVzZSAqLworCXBfZm1fcG9ydC0+cnhfcG9vbHNfcGFyYW1zLm51bV9v Zl9wb29scyA9CisJcF9leHRfYnVmX3Bvb2xzLT5udW1fb2ZfcG9vbHNfdXNlZDsKKwlwX2ZtX3Bv cnQtPnJ4X3Bvb2xzX3BhcmFtcy5sYXJnZXN0X2J1Zl9zaXplID0KKwkgICAgc2l6ZXNfYXJyYXlb b3JkZXJlZF9hcnJheVtwX2V4dF9idWZfcG9vbHMtPgorCQludW1fb2ZfcG9vbHNfdXNlZCAtIDFd XTsKKwlwX2ZtX3BvcnQtPnJ4X3Bvb2xzX3BhcmFtcy5zZWNvbmRfbGFyZ2VzdF9idWZfc2l6ZSA9 CisJICAgIHNpemVzX2FycmF5W29yZGVyZWRfYXJyYXlbcF9leHRfYnVmX3Bvb2xzLT4KKwkJbnVt X29mX3Bvb2xzX3VzZWQgLSAyXV07CisKKwkvKiBGTUJNX1JNUEQgcmVnLiAtIHBvb2wgZGVwbGV0 aW9uICovCisJaWYgKHBfYnVmX3Bvb2xfZGVwbGV0aW9uLT5wb29sc19ncnBfbW9kZV9lbmFibGUp IHsKKwkJYnBvb2xzLmdycF9icF9kZXBsZXRlZF9udW0gPSBwX2J1Zl9wb29sX2RlcGxldGlvbi0+ CitudW1fb2ZfcG9vbHM7CisJCWZvciAoaSA9IDA7IGkgPCBwX2ZtX3BvcnQtPnBvcnRfaW50Zy0+ Ym1fbWF4X251bV9vZl9wb29sczsKKwkJICAgICBpKyspIHsKKwkJCWlmIChwX2J1Zl9wb29sX2Rl cGxldGlvbi0+cG9vbHNfdG9fY29uc2lkZXJbaV0pIHsKKwkJCQlmb3IgKGogPSAwOyBqIDwgcF9l eHRfYnVmX3Bvb2xzLT4KKwkJCQkgICAgIG51bV9vZl9wb29sc191c2VkOyBqKyspIHsKKwkJCQkJ aWYgKGkgPT0gb3JkZXJlZF9hcnJheVtqXSkgeworCQkJCQkJYnBvb2xzLmJwb29sW2pdLgorCQkJ CQkJICAgIGdycF9icF9kZXBsZXRlZCA9IHRydWU7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJ CX0KKwkJCX0KKwkJfQorCX0KKworCWlmIChwX2J1Zl9wb29sX2RlcGxldGlvbi0+c2luZ2xlX3Bv b2xfbW9kZV9lbmFibGUpIHsKKwkJZm9yIChpID0gMDsgaSA8IHBfZm1fcG9ydC0+cG9ydF9pbnRn LT5ibV9tYXhfbnVtX29mX3Bvb2xzOworCQkgICAgIGkrKykgeworCQkJaWYgKHBfYnVmX3Bvb2xf ZGVwbGV0aW9uLT4KKwkJCSAgICBwb29sc190b19jb25zaWRlcl9mb3Jfc2luZ2xlX21vZGVbaV0p IHsKKwkJCQlmb3IgKGogPSAwOyBqIDwgcF9leHRfYnVmX3Bvb2xzLT4KKwkJCQkgICAgIG51bV9v Zl9wb29sc191c2VkOyBqKyspIHsKKwkJCQkJaWYgKGkgPT0gb3JkZXJlZF9hcnJheVtqXSkgewor CQkJCQkJYnBvb2xzLmJwb29sW2pdLgorCQkJCQkJICAgIHNpbmdsZV9icF9kZXBsZXRlZCA9IHRy dWU7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qIElz c3VlIGZsaWJzIGZ1bmN0aW9uICovCisJZXJyID0gZm1hbl9wb3J0X3NldF9icG9vbHMoJnBfZm1f cG9ydC0+cG9ydCwgJmJwb29scyk7CisJaWYgKGVyciAhPSAwKSB7CisJCXByX2VycigiZm1hbl9w b3J0X3NldF9icG9vbHNcbiIpOworCQlyZXR1cm4gLUVET007CisJfQorCisJa2ZyZWUocF9mbV9w b3J0LT5wX2ZtX3BvcnRfZHJ2X3BhcmFtLT5wX2JhY2t1cF9ibV9wb29scyk7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCBpbml0X2xvd19sZXZlbF9kcml2ZXIoc3RydWN0IGZtX3BvcnRf dCAqcF9mbV9wb3J0KQoreworCXN0cnVjdCBmbV9wb3J0X2Rydl9wYXJhbV90ICpwX2Rydl9wYXJh bXMgPSBwX2ZtX3BvcnQtPgorCXBfZm1fcG9ydF9kcnZfcGFyYW07CisJc3RydWN0IGZtYW5fcG9y dF9wYXJhbXMgcG9ydF9wYXJhbXM7CisJdWludDMyX3QgdG1wX3ZhbDsKKworCS8qIFNldCB1cCBm bGlicyBwYXJhbWV0ZXJzIGFuZCBpc3N1ZSBpbml0IGZ1bmN0aW9uICovCisKKwltZW1zZXQoJnBv cnRfcGFyYW1zLCAwLCBzaXplb2Yoc3RydWN0IGZtYW5fcG9ydF9wYXJhbXMpKTsKKwlwb3J0X3Bh cmFtcy5kaXNjYXJkX21hc2sgPSBwX2Rydl9wYXJhbXMtPmVycm9yc190b19kaXNjYXJkOworCXBv cnRfcGFyYW1zLmRmbHRfZnFpZCA9IHBfZHJ2X3BhcmFtcy0+ZGZsdF9mcWlkOworCXBvcnRfcGFy YW1zLmVycl9mcWlkID0gcF9kcnZfcGFyYW1zLT5lcnJfZnFpZDsKKwlwb3J0X3BhcmFtcy5kZXFf c3AgPSBwX2Rydl9wYXJhbXMtPmRlcV9zdWJfcG9ydGFsOworCXBvcnRfcGFyYW1zLmRvbnRfcmVs ZWFzZV9idWYgPSBwX2Rydl9wYXJhbXMtPmRvbnRfcmVsZWFzZV9idWY7CisJc3dpdGNoIChwX2Zt X3BvcnQtPnBvcnRfdHlwZSkgeworCWNhc2UgKEZNX1BPUlRfVFlQRV9SWCk6CisJCXBvcnRfcGFy YW1zLmVycl9tYXNrID0KKwkJCShSWF9FUlJTX1RPX0VOUSAmIH5wb3J0X3BhcmFtcy5kaXNjYXJk X21hc2spOworCQlpZiAocF9kcnZfcGFyYW1zLT5mb3J3YXJkX3JldXNlX2ludF9jb250ZXh0KQor CQkJcF9kcnZfcGFyYW1zLT5kZmx0X2NmZy5yeF9mZF9iaXRzID0KKwkJCSAgICAodWludDhfdCko Qk1JX1BPUlRfUkZORV9GUldEX1JQRCA+PiAyNCk7CisJCWJyZWFrOworCisJY2FzZSAoRk1fUE9S VF9UWVBFX09QKToKKwkJcG9ydF9wYXJhbXMuZXJyX21hc2sgPQorCQkJKE9QX0VSUlNfVE9fRU5R ICYgfnBvcnRfcGFyYW1zLmRpc2NhcmRfbWFzayk7CisJCWJyZWFrOworCQlicmVhazsKKworCWRl ZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXRtcF92YWwgPSAodWludDMyX3QpKChwX2ZtX3BvcnQt PmludGVybmFsX2J1Zl9vZmZzZXQgJQorCQkJICAgICBPRkZTRVRfVU5JVFMpID8gKHBfZm1fcG9y dC0+CisJCQkgICAgIGludGVybmFsX2J1Zl9vZmZzZXQgLyBPRkZTRVRfVU5JVFMgKworCQkJICAg ICAgMSkgOiAocF9mbV9wb3J0LT5pbnRlcm5hbF9idWZfb2Zmc2V0IC8KKwkJCQkgICAgT0ZGU0VU X1VOSVRTKSk7CisJcF9mbV9wb3J0LT5pbnRlcm5hbF9idWZfb2Zmc2V0ID0gKHVpbnQ4X3QpKHRt cF92YWwgKiBPRkZTRVRfVU5JVFMpOworCXBfZHJ2X3BhcmFtcy0+ZGZsdF9jZmcuaW50X2J1Zl9z dGFydF9tYXJnaW4gPQorCSAgICBwX2ZtX3BvcnQtPmludGVybmFsX2J1Zl9vZmZzZXQ7CisKKwlw X2Rydl9wYXJhbXMtPmRmbHRfY2ZnLmV4dF9idWZfc3RhcnRfbWFyZ2luID0KKwkgICAgcF9kcnZf cGFyYW1zLT5idWZfbWFyZ2lucy5zdGFydF9tYXJnaW5zOworCXBfZHJ2X3BhcmFtcy0+ZGZsdF9j ZmcuZXh0X2J1Zl9lbmRfbWFyZ2luID0KKwkgICAgcF9kcnZfcGFyYW1zLT5idWZfbWFyZ2lucy5l bmRfbWFyZ2luczsKKworCXBfZHJ2X3BhcmFtcy0+ZGZsdF9jZmcuaWNfZXh0X29mZnNldCA9CisJ ICAgIHBfZHJ2X3BhcmFtcy0+aW50X2NvbnRleHQuZXh0X2J1Zl9vZmZzZXQ7CisJcF9kcnZfcGFy YW1zLT5kZmx0X2NmZy5pY19pbnRfb2Zmc2V0ID0KKwkgICAgcF9kcnZfcGFyYW1zLT5pbnRfY29u dGV4dC5pbnRfY29udGV4dF9vZmZzZXQ7CisJcF9kcnZfcGFyYW1zLT5kZmx0X2NmZy5pY19zaXpl ID0gcF9kcnZfcGFyYW1zLT5pbnRfY29udGV4dC5zaXplOworCisJcF9kcnZfcGFyYW1zLT5kZmx0 X2NmZy5zdGF0c19jb3VudGVyc19lbmFibGUgPSB0cnVlOworCXBfZHJ2X3BhcmFtcy0+ZGZsdF9j ZmcucGVyZl9jb3VudGVyc19lbmFibGUgPSB0cnVlOworCXBfZHJ2X3BhcmFtcy0+ZGZsdF9jZmcu cXVldWVfY291bnRlcnNfZW5hYmxlID0gdHJ1ZTsKKworCXBfZHJ2X3BhcmFtcy0+ZGZsdF9jZmcu cGVyZl9jbnRfcGFyYW1zLnRhc2tfdmFsID0KKwkgICAgKHVpbnQ4X3QpcF9mbV9wb3J0LT50YXNr cy5udW07CisJaWYgKHBfZm1fcG9ydC0+cG9ydF90eXBlID09IEZNX1BPUlRfVFlQRV9PUCkKKwkJ cF9kcnZfcGFyYW1zLT5kZmx0X2NmZy5wZXJmX2NudF9wYXJhbXMucXVldWVfdmFsID0gMDsKKwll bHNlCisJCXBfZHJ2X3BhcmFtcy0+ZGZsdF9jZmcucGVyZl9jbnRfcGFyYW1zLnF1ZXVlX3ZhbCA9 IDE7CisJcF9kcnZfcGFyYW1zLT5kZmx0X2NmZy5wZXJmX2NudF9wYXJhbXMuZG1hX3ZhbCA9CisJ ICAgICh1aW50OF90KXBfZm1fcG9ydC0+b3Blbl9kbWFzLm51bTsKKwlwX2Rydl9wYXJhbXMtPmRm bHRfY2ZnLnBlcmZfY250X3BhcmFtcy5maWZvX3ZhbCA9CisJICAgIHBfZm1fcG9ydC0+Zmlmb19i dWZzLm51bTsKKworCWlmICgwICE9CisJICAgIGZtYW5fcG9ydF9pbml0KCZwX2ZtX3BvcnQtPnBv cnQsICZwX2Rydl9wYXJhbXMtPmRmbHRfY2ZnLAorCQkJICAgJnBvcnRfcGFyYW1zKSkgeworCQlw cl9lcnIoImZtYW5fcG9ydF9pbml0XG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyog VGhlIGNvZGUgYmVsbG93IGlzIGEgdHJpY2sgc28gdGhlIEZNIHdpbGwgbm90IHJlbGVhc2UgdGhl IGJ1ZmZlcgorCSAqIHRvIEJNIG5vciB3aWxsIHRyeSB0byBlbnF1ZXVlIHRoZSBmcmFtZSB0byBR TQorCSAqLworCWlmIChwX2ZtX3BvcnQtPnBvcnRfdHlwZSA9PSBGTV9QT1JUX1RZUEVfVFgpIHsK KwkJaWYgKCFwX2Rydl9wYXJhbXMtPmRmbHRfZnFpZCAmJiBwX2Rydl9wYXJhbXMtPgorCQkgICAg ZG9udF9yZWxlYXNlX2J1ZikgeworCQkJLyogb3ZlcnJpZGUgZm1ibV90Y2ZxaWQgMCB3aXRoIGEg ZmFsc2Ugbm9uLTAgdmFsdWUuCisJCQkgKiBUaGlzIHdpbGwgZm9yY2UgRk0gdG8gYWN0IGFjY29y ZGluZyB0byB0ZmVuZS4KKwkJCSAqIE90aGVyd2lzZSwgaWYgZm1ibV90Y2ZxaWQgaXMgMCB0aGUg Rk0gd2lsbCByZWxlYXNlCisJCQkgKiBidWZmZXJzIHRvIEJNIHJlZ2FyZGxlc3Mgb2YgZm1ibV90 ZmVuZQorCQkJICovCisJCQlXUklURV9VSU5UMzIocF9mbV9wb3J0LT5wb3J0LmJtaV9yZWdzLT50 eC5mbWJtX3RjZnFpZCwKKwkJCQkgICAgIDB4RkZGRkZGKTsKKwkJCVdSSVRFX1VJTlQzMihwX2Zt X3BvcnQtPnBvcnQuYm1pX3JlZ3MtPnR4LmZtYm1fdGZlbmUsCisJCQkJICAgICBOSUFfRU5HX0JN SSB8IE5JQV9CTUlfQUNfVFhfUkVMRUFTRSk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIHN0cnVjdCBmbV9wb3J0X2ludGdfdCAqc2V0X3BvcnRfaW50Z19wYXJhbXMoc3RydWN0 IGZtX3BvcnRfdCAqcF9mbV9wb3J0KQoreworCXN0cnVjdCBmbV9wb3J0X2ludGdfdCAqaW50ZzsK Kwl1aW50MzJfdCBibWlfbWF4X2ZpZm9fc2l6ZTsKKworCWludGcgPSBremFsbG9jKHNpemVvZigq aW50ZyksIEdGUF9LRVJORUwpOworCWlmICghaW50ZykKKwkJcmV0dXJuIE5VTEw7CisKKwlibWlf bWF4X2ZpZm9fc2l6ZSA9IGZtX2dldF9ibWlfbWF4X2ZpZm9fc2l6ZShwX2ZtX3BvcnQtPmhfZm0p OworCisJaW50Zy0+bWF4X3BvcnRfZmlmb19zaXplID0KKwkJCQlNQVhfUE9SVF9GSUZPX1NJWkUo Ym1pX21heF9maWZvX3NpemUpOworCisJc3dpdGNoIChwX2ZtX3BvcnQtPmZtX3Jldl9pbmZvLm1h am9yX3JldikgeworCWNhc2UgRk1fSVBfQkxPQ0tfUDJfUDNfUDU6CisJY2FzZSBGTV9JUF9CTE9D S19QNDoKKwkJaW50Zy0+bWF4X251bV9vZl9leHRfcG9vbHMJCT0gNDsKKwkJaW50Zy0+Zm1fbWF4 X251bV9vZl9zdWJfcG9ydGFscwkJPSAxMjsKKwkJaW50Zy0+Ym1fbWF4X251bV9vZl9wb29scwkJ PSA2NDsKKwkJYnJlYWs7CisKKwljYXNlIEZNX0lQX0JMT0NLX1AxOgorCQlpbnRnLT5tYXhfbnVt X29mX2V4dF9wb29scwkJPSA0OworCQlpbnRnLT5mbV9tYXhfbnVtX29mX3N1Yl9wb3J0YWxzCQk9 IDc7CisJCWludGctPmJtX21heF9udW1fb2ZfcG9vbHMJCT0gODsKKwkJYnJlYWs7CisKKwljYXNl IEZNX0lQX0JMT0NLX0JfVDoKKwkJaW50Zy0+bWF4X251bV9vZl9leHRfcG9vbHMJCT0gODsKKwkJ aW50Zy0+Zm1fbWF4X251bV9vZl9zdWJfcG9ydGFscwkJPSAxNjsKKwkJaW50Zy0+Ym1fbWF4X251 bV9vZl9wb29scwkJPSA2NDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcl9lcnIoIlVuc3Vw cG9ydGVkIEZNYW4gdmVyc2lvblxuIik7CisJCWtmcmVlKGludGcpOworCQlyZXR1cm4gTlVMTDsK Kwl9CisKKwlyZXR1cm4gaW50ZzsKK30KKworLyogICAgICAgQVBJIEluaXQgdW5pdCBmdW5jdGlv bnMgICAgICAgICovCisKK3ZvaWQgKmZtX3BvcnRfY29uZmlnKHN0cnVjdCBmbV9wb3J0X3BhcmFt c190ICpwX2ZtX3BvcnRfcGFyYW1zKQoreworCXN0cnVjdCBmbV9wb3J0X3QgKnBfZm1fcG9ydDsK Kwl1aW50cHRyX3QgYmFzZV9hZGRyID0gcF9mbV9wb3J0X3BhcmFtcy0+YmFzZV9hZGRyOworI2lm ZGVmIEZNX1dST05HX1JFU0VUX1ZBTFVFU19FUlJBVEFfRk1BTl9BMDA1MTI3CisJdWludDMyX3Qg dG1wX3JlZzsKKyNlbmRpZiAvKiBGTV9XUk9OR19SRVNFVF9WQUxVRVNfRVJSQVRBX0ZNQU5fQTAw NTEyNyAqLworCWVudW0gZm1hbl9wb3J0X3R5cGUgZm1hbl9wb3J0X3R5cGUgPSBFX0ZNQU5fUE9S VF9UWVBFX0RVTU1ZOworCisJLyogQWxsb2NhdGUgRk0gc3RydWN0dXJlICovCisJcF9mbV9wb3J0 ID0ga3phbGxvYyhzaXplb2YoKnBfZm1fcG9ydCksIEdGUF9LRVJORUwpOworCWlmICghcF9mbV9w b3J0KQorCQlyZXR1cm4gTlVMTDsKKworCS8qIEFsbG9jYXRlIHRoZSBGTSBkcml2ZXIncyBwYXJh bWV0ZXJzIHN0cnVjdHVyZSAqLworCXBfZm1fcG9ydC0+cF9mbV9wb3J0X2Rydl9wYXJhbSA9CisJ a3phbGxvYyhzaXplb2YoKnBfZm1fcG9ydC0+cF9mbV9wb3J0X2Rydl9wYXJhbSksCisJCUdGUF9L RVJORUwpOworCWlmICghcF9mbV9wb3J0LT5wX2ZtX3BvcnRfZHJ2X3BhcmFtKSB7CisJCWtmcmVl KHBfZm1fcG9ydCk7CisJCXByX2VycigiRk0gUG9ydCBkcml2ZXIgcGFyYW1ldGVyc1xuIik7CisJ CXJldHVybiBOVUxMOworCX0KKworCS8qIEluaXRpYWxpemUgRk0gcG9ydCBwYXJhbWV0ZXJzIHdo aWNoIHdpbGwgYmUga2VwdCBieSB0aGUgZHJpdmVyICovCisJcF9mbV9wb3J0LT5wb3J0X3R5cGUg PSBwX2ZtX3BvcnRfcGFyYW1zLT5wb3J0X3R5cGU7CisJcF9mbV9wb3J0LT5wb3J0X3NwZWVkID0g cF9mbV9wb3J0X3BhcmFtcy0+cG9ydF9zcGVlZDsKKwlwX2ZtX3BvcnQtPnBvcnRfaWQgPSBwX2Zt X3BvcnRfcGFyYW1zLT5wb3J0X2lkOworCXBfZm1fcG9ydC0+Zl9leGNlcHRpb24gPSBwX2ZtX3Bv cnRfcGFyYW1zLT5mX2V4Y2VwdGlvbjsKKwlwX2ZtX3BvcnQtPmhfYXBwID0gcF9mbV9wb3J0X3Bh cmFtcy0+aF9hcHA7CisJcF9mbV9wb3J0LT5oX2ZtID0gcF9mbV9wb3J0X3BhcmFtcy0+aF9mbTsK KworCS8qIGdldCBGTSByZXZpc2lvbiAqLworCWZtX2dldF9yZXZpc2lvbihwX2ZtX3BvcnQtPmhf Zm0sICZwX2ZtX3BvcnQtPmZtX3Jldl9pbmZvKTsKKworCXBfZm1fcG9ydC0+cG9ydF9pbnRnID0g c2V0X3BvcnRfaW50Z19wYXJhbXMocF9mbV9wb3J0KTsKKwlpZiAoIXBfZm1fcG9ydC0+cG9ydF9p bnRnKSB7CisJCQlrZnJlZShwX2ZtX3BvcnQtPnBfZm1fcG9ydF9kcnZfcGFyYW0pOworCQkJa2Zy ZWUocF9mbV9wb3J0KTsKKwkJCXJldHVybiBOVUxMOworCX0KKworCWlmIChwX2ZtX3BvcnQtPmZt X3Jldl9pbmZvLm1ham9yX3JldiA+PSA2KSB7CisJCWlmICgocF9mbV9wb3J0LT5wb3J0X3R5cGUg PT0gRk1fUE9SVF9UWVBFX09QKSAmJgorCQkgICAgKHBfZm1fcG9ydF9wYXJhbXMtPnBvcnRfaWQg PT0gRk1fT0hfUE9SVF9JRCkpCisJCQlwcl9kZWJ1ZygiVXNlIG5vbnplcm8gcG9ydGlkIGZvciBP UCBwb3J0XG4iKTsKKwl9CisKKwkvKiBTZXQgdXAgRk0gcG9ydCBwYXJhbWV0ZXJzIGZvciBpbml0 aWFsaXphdGlvbiBwaGFzZSBvbmx5ICovCisKKwkvKiBGaXJzdCwgZmlsbCBpbiBmbGlicyBzdHJ1 Y3QgKi8KKwkvKiBJbiBvcmRlciB0byBiZSBhbGlnbmVkIHdpdGggZmxpYiBwb3J0IHR5cGVzLCB3 ZSBuZWVkIHRvIHRyYW5zbGF0ZQorCSAqIHRoZSBwb3J0IHR5cGUgYW5kIHNwZWVkIHRvIGZtYW5f cG9ydF90eXBlCisJICovCisJaWYgKHBfZm1fcG9ydC0+cG9ydF90eXBlID09IEZNX1BPUlRfVFlQ RV9PUCkgeworCQlmbWFuX3BvcnRfdHlwZSA9IEVfRk1BTl9QT1JUX1RZUEVfT1A7CisJfSBlbHNl IGlmIChwX2ZtX3BvcnQtPnBvcnRfdHlwZSA9PSBGTV9QT1JUX1RZUEVfVFgpIHsKKwkJaWYgKHBf Zm1fcG9ydC0+cG9ydF9zcGVlZCA9PSBGTV9QT1JUX1NQRUVEXzEwRykKKwkJCWZtYW5fcG9ydF90 eXBlID0gRV9GTUFOX1BPUlRfVFlQRV9UWF8xMEc7CisJCWVsc2UKKwkJCWZtYW5fcG9ydF90eXBl ID0gRV9GTUFOX1BPUlRfVFlQRV9UWDsKKwl9IGVsc2UgaWYgKHBfZm1fcG9ydC0+cG9ydF90eXBl ID09IEZNX1BPUlRfVFlQRV9SWCkgeworCQlpZiAocF9mbV9wb3J0LT5wb3J0X3NwZWVkID09IEZN X1BPUlRfU1BFRURfMTBHKQorCQkJZm1hbl9wb3J0X3R5cGUgPSBFX0ZNQU5fUE9SVF9UWVBFX1JY XzEwRzsKKwkJZWxzZQorCQkJZm1hbl9wb3J0X3R5cGUgPSBFX0ZNQU5fUE9SVF9UWVBFX1JYOwor CX0KKwlmbWFuX3BvcnRfZGVmY29uZmlnKCZwX2ZtX3BvcnQtPnBfZm1fcG9ydF9kcnZfcGFyYW0t PmRmbHRfY2ZnLAorCQkJICAgIGZtYW5fcG9ydF90eXBlKTsKKwkvKiBPdmVyd3JpdGUgc29tZSBp bnRlZ3JhdGlvbiBzcGVjaWZpYyBwYXJhbWV0ZXJzICovCisJcF9mbV9wb3J0LT5wX2ZtX3BvcnRf ZHJ2X3BhcmFtLT5kZmx0X2NmZy5yeF9wcmlfZWxldmF0aW9uID0KKwkJREZMVF9QT1JUX1JYX0ZJ Rk9fUFJJX0VMRVZBVElPTl9MRVYoCisJCQkJcF9mbV9wb3J0LT5wb3J0X2ludGctPm1heF9wb3J0 X2ZpZm9fc2l6ZSk7CisJcF9mbV9wb3J0LT5wX2ZtX3BvcnRfZHJ2X3BhcmFtLT5kZmx0X2NmZy5y eF9maWZvX3RociA9CisJcF9mbV9wb3J0LT5wX2ZtX3BvcnRfZHJ2X3BhcmFtLT5yeF9maWZvX3Ro cmVzaG9sZCA9CisJREZMVF9QT1JUX1JYX0ZJRk9fVEhSRVNIT0xEKAorCQkJCSAgICBwX2ZtX3Bv cnQtPmZtX3Jldl9pbmZvLm1ham9yX3JldiwKKwkJCQkgICAgcF9mbV9wb3J0LT5wb3J0X2ludGct Pm1heF9wb3J0X2ZpZm9fc2l6ZSk7CisKKwlwX2ZtX3BvcnQtPnBfZm1fcG9ydF9kcnZfcGFyYW0t PmRmbHRfY2ZnLmVycmF0YV9BMDA2Njc1ID0gZmFsc2U7CisKKyNpZiBkZWZpbmVkKEZNX09QX05P X1ZTUF9OT19SRUxFQVNFX0VSUkFUQV9GTUFOX0EwMDY2NzUpIHx8IFwKK2RlZmluZWQoRk1fRVJS T1JfVlNQX05PX01BVENIX1NXMDA2KQorCWlmIChwX2ZtX3BvcnQtPmZtX3Jldl9pbmZvLm1ham9y X3JldiA+PSA2KQorCQlwX2ZtX3BvcnQtPnBfZm1fcG9ydF9kcnZfcGFyYW0tPmRmbHRfY2ZnLmVy cmF0YV9BMDA2Njc1ID0KKwkJdHJ1ZTsKKyNlbmRpZgorCWlmICgocF9mbV9wb3J0LT5mbV9yZXZf aW5mby5tYWpvcl9yZXYgPT0gNikgJiYKKwkgICAgKChwX2ZtX3BvcnQtPmZtX3Jldl9pbmZvLm1p bm9yX3JldiA9PSAwKSB8fAorCSAgICAgKHBfZm1fcG9ydC0+Zm1fcmV2X2luZm8ubWlub3JfcmV2 ID09IDMpKSkKKwkJcF9mbV9wb3J0LT5wX2ZtX3BvcnRfZHJ2X3BhcmFtLT5kZmx0X2NmZy5lcnJh dGFfQTAwNjMyMCA9CisJCXRydWU7CisJZWxzZQorCQlwX2ZtX3BvcnQtPnBfZm1fcG9ydF9kcnZf cGFyYW0tPmRmbHRfY2ZnLmVycmF0YV9BMDA2MzIwID0KKwkJZmFsc2U7CisKKwkvKiBFeGNlc3Np dmUgVGhyZXNob2xkIHJlZ2lzdGVyIC0gZXhpc3RzIGZvciBwcmUtRk12MyBjaGlwcyBvbmx5ICov CisJaWYgKHBfZm1fcG9ydC0+Zm1fcmV2X2luZm8ubWFqb3JfcmV2IDwgNikgeworI2lmZGVmIEZN X05PX1JFU1RSSUNUX09OX0FDQ0VTU19SU1JDCisJCXBfZm1fcG9ydC0+cF9mbV9wb3J0X2Rydl9w YXJhbS0+ZGZsdF9jZmcuCisJCSAgICBleGNlc3NpdmVfdGhyZXNob2xkX3JlZ2lzdGVyID0gdHJ1 ZTsKKyNlbmRpZiAvKiBGTV9OT19SRVNUUklDVF9PTl9BQ0NFU1NfUlNSQyAqLworCQlwX2ZtX3Bv cnQtPnBfZm1fcG9ydF9kcnZfcGFyYW0tPmRmbHRfY2ZnLmZtYm1fcmVibV9oYXNfc2dkID0KKwkJ ICAgIGZhbHNlOworCQlwX2ZtX3BvcnQtPnBfZm1fcG9ydF9kcnZfcGFyYW0tPgorCQlkZmx0X2Nm Zy5mbWJtX3RmbmVfaGFzX2ZlYXR1cmVzID0KKwkJICAgIGZhbHNlOworCX0gZWxzZSB7CisJCXBf Zm1fcG9ydC0+cF9mbV9wb3J0X2Rydl9wYXJhbS0+ZGZsdF9jZmcuCisJCSAgICBleGNlc3NpdmVf dGhyZXNob2xkX3JlZ2lzdGVyID0gZmFsc2U7CisJCXBfZm1fcG9ydC0+cF9mbV9wb3J0X2Rydl9w YXJhbS0+ZGZsdF9jZmcuZm1ibV9yZWJtX2hhc19zZ2QgPQorCQl0cnVlOworCQlwX2ZtX3BvcnQt PnBfZm1fcG9ydF9kcnZfcGFyYW0tPgorCQlkZmx0X2NmZy5mbWJtX3RmbmVfaGFzX2ZlYXR1cmVz ID0gdHJ1ZTsKKwl9CisJaWYgKHBfZm1fcG9ydC0+Zm1fcmV2X2luZm8ubWFqb3JfcmV2ID09IDQp CisJCXBfZm1fcG9ydC0+cF9mbV9wb3J0X2Rydl9wYXJhbS0+CisJCWRmbHRfY2ZnLnFtaV9kZXFf b3B0aW9uc19zdXBwb3J0ID0gZmFsc2U7CisJZWxzZQorCQlwX2ZtX3BvcnQtPnBfZm1fcG9ydF9k cnZfcGFyYW0tPgorCQlkZmx0X2NmZy5xbWlfZGVxX29wdGlvbnNfc3VwcG9ydCA9IHRydWU7CisK KwkvKiBDb250aW51ZSB3aXRoIG90aGVyIHBhcmFtZXRlcnMgKi8KKwlwX2ZtX3BvcnQtPnBfZm1f cG9ydF9kcnZfcGFyYW0tPmJhc2VfYWRkciA9IGJhc2VfYWRkcjsKKwkvKiBzZXQgbWVtb3J5IG1h cCBwb2ludGVycyAqLworCXBfZm1fcG9ydC0+cF9mbV9wb3J0X3FtaV9yZWdzID0KKwkgICAgKHN0 cnVjdCBmbV9wb3J0X3FtaV9yZWdzX3QgX19pb21lbSAqKVVJTlRfVE9fUFRSKGJhc2VfYWRkciAr CisJUU1JX1BPUlRfUkVHU19PRkZTRVQpOworCXBfZm1fcG9ydC0+cF9mbV9wb3J0X2JtaV9yZWdz ID0KKwkgICAgKHVuaW9uIGZtX3BvcnRfYm1pX3JlZ3NfdSBfX2lvbWVtICopVUlOVF9UT19QVFIo YmFzZV9hZGRyICsKKwlCTUlfUE9SVF9SRUdTX09GRlNFVCk7CisKKwlwX2ZtX3BvcnQtPnBfZm1f cG9ydF9kcnZfcGFyYW0tPgorCWJ1ZmZlcl9wcmVmaXhfY29udGVudC5wcml2X2RhdGFfc2l6ZSA9 CisJICAgIERFRkFVTFRfUE9SVF9CVUZGRVJfUFJFRklYX0NPTlRFTlRfUFJJVl9EQVRBX1NJWkU7 CisJcF9mbV9wb3J0LT5wX2ZtX3BvcnRfZHJ2X3BhcmFtLT4KKwlidWZmZXJfcHJlZml4X2NvbnRl bnQucGFzc19wcnNfcmVzdWx0ID0KKwkgICAgREVGQVVMVF9QT1JUX0JVRkZFUl9QUkVGSVhfQ09O VEVOVF9QQVNTX1BSU19SRVNVTFQ7CisJcF9mbV9wb3J0LT5wX2ZtX3BvcnRfZHJ2X3BhcmFtLT4K KwlidWZmZXJfcHJlZml4X2NvbnRlbnQucGFzc190aW1lX3N0YW1wID0KKwkgICAgREVGQVVMVF9Q T1JUX0JVRkZFUl9QUkVGSVhfQ09OVEVOVF9QQVNTX1RJTUVfU1RBTVA7CisJcF9mbV9wb3J0LT5w X2ZtX3BvcnRfZHJ2X3BhcmFtLT5idWZmZXJfcHJlZml4X2NvbnRlbnQuZGF0YV9hbGlnbiA9CisJ ICAgIERFRkFVTFRfUE9SVF9CVUZGRVJfUFJFRklYX0NPTlRFWFRfREFUQV9BTElHTjsKKwlwX2Zt X3BvcnQtPnBfZm1fcG9ydF9kcnZfcGFyYW0tPmxpb2RuX2Jhc2UgPQorCSAgICBwX2ZtX3BvcnRf cGFyYW1zLT5saW9kbl9iYXNlOworCXBfZm1fcG9ydC0+cF9mbV9wb3J0X2Rydl9wYXJhbS0+Y2hl a3N1bV9sYXN0X2J5dGVzX2lnbm9yZSA9CisJICAgIERFRkFVTFRfUE9SVF9jaGVrc3VtX2xhc3Rf Ynl0ZXNfaWdub3JlOworCisJcF9mbV9wb3J0LT5tYXhfZnJhbWVfbGVuZ3RoID0gREVGQVVMVF9Q T1JUX21heF9mcmFtZV9sZW5ndGg7CisJLyogcmVzb3VyY2UgZGlzdHJpYnV0aW9uLiAqLworCisJ cF9mbV9wb3J0LT5maWZvX2J1ZnMubnVtID0KKwlERkxUX1BPUlRfTlVNX09GX0ZJRk9fQlVGUyhw X2ZtX3BvcnQtPmZtX3Jldl9pbmZvLm1ham9yX3JldiwKKwkJCQkgICBwX2ZtX3BvcnQtPnBvcnRf dHlwZSwKKwkJCQkgICBwX2ZtX3BvcnQtPnBvcnRfc3BlZWQpICogQk1JX0ZJRk9fVU5JVFM7CisJ cF9mbV9wb3J0LT5maWZvX2J1ZnMuZXh0cmEgPQorCURGTFRfUE9SVF9FWFRSQV9OVU1fT0ZfRklG T19CVUZTICogQk1JX0ZJRk9fVU5JVFM7CisKKwlwX2ZtX3BvcnQtPm9wZW5fZG1hcy5udW0gPQor CURGTFRfUE9SVF9OVU1fT0ZfT1BFTl9ETUFTKHBfZm1fcG9ydC0+Zm1fcmV2X2luZm8ubWFqb3Jf cmV2LAorCQkJCSAgIHBfZm1fcG9ydC0+cG9ydF90eXBlLAorCQkJCSAgIHBfZm1fcG9ydC0+cG9y dF9zcGVlZCk7CisJcF9mbV9wb3J0LT5vcGVuX2RtYXMuZXh0cmEgPQorCURGTFRfUE9SVF9FWFRS QV9OVU1fT0ZfT1BFTl9ETUFTKHBfZm1fcG9ydC0+Zm1fcmV2X2luZm8ubWFqb3JfcmV2LAorCQkJ CQkgcF9mbV9wb3J0LT5wb3J0X3R5cGUsCisJCQkJCSBwX2ZtX3BvcnQtPnBvcnRfc3BlZWQpOwor CXBfZm1fcG9ydC0+dGFza3MubnVtID0KKwlERkxUX1BPUlRfTlVNX09GX1RBU0tTKHBfZm1fcG9y dC0+Zm1fcmV2X2luZm8ubWFqb3JfcmV2LAorCQkJICAgICAgIHBfZm1fcG9ydC0+cG9ydF90eXBl LAorCQkJICAgICAgIHBfZm1fcG9ydC0+cG9ydF9zcGVlZCk7CisJcF9mbV9wb3J0LT50YXNrcy5l eHRyYSA9CisJREZMVF9QT1JUX0VYVFJBX05VTV9PRl9UQVNLUyhwX2ZtX3BvcnQtPmZtX3Jldl9p bmZvLm1ham9yX3JldiwKKwkJCQkgICAgIHBfZm1fcG9ydC0+cG9ydF90eXBlLAorCQkJCSAgICAg cF9mbV9wb3J0LT5wb3J0X3NwZWVkKTsKKworI2lmZGVmIEZNX0hFQVZZX1RSQUZGSUNfU0VRVUVO Q0VSX0hBTkdfRVJSQVRBX0ZNQU5fQTAwNjk4MQorCWlmICgocF9mbV9wb3J0LT5mbV9yZXZfaW5m by5tYWpvcl9yZXYgPT0gNikgJiYKKwkgICAgKHBfZm1fcG9ydC0+Zm1fcmV2X2luZm8ubWlub3Jf cmV2ID09IDApICYmCisJICAgICgocF9mbV9wb3J0LT5wb3J0X3R5cGUgPT0gRk1fUE9SVF9UWVBF X09QKSB8fAorCSAgICAgKChwX2ZtX3BvcnQtPnBvcnRfdHlwZSA9PSBGTV9QT1JUX1RZUEVfVFgp ICYmCisJICAgICAocF9mbV9wb3J0LT5wb3J0X3NwZWVkID09IEZNX1BPUlRfU1BFRURfMUcpKSkp IHsKKwkJcF9mbV9wb3J0LT5vcGVuX2RtYXMubnVtID0gMTY7CisJCXBfZm1fcG9ydC0+b3Blbl9k bWFzLmV4dHJhID0gMDsKKwl9CisjZW5kaWYgLyogRk1fSEVBVllfVFJBRkZJQ19TRVFVRU5DRVJf SEFOR19FUlJBVEFfRk1BTl9BMDA2OTgxICovCisKKwkvKiBQb3J0IHR5cGUgc3BlY2lmaWMgaW5p dGlhbGl6YXRpb246ICovCisJc3dpdGNoIChwX2ZtX3BvcnQtPnBvcnRfdHlwZSkgeworCWNhc2Ug KEZNX1BPUlRfVFlQRV9SWCk6CisJCS8qIEluaXRpYWxpemUgRk0gcG9ydCBwYXJhbWV0ZXJzIGZv ciBpbml0aWFsaXphdGlvbiBwaGFzZSBvbmx5Ki8KKwkJcF9mbV9wb3J0LT5wX2ZtX3BvcnRfZHJ2 X3BhcmFtLT5jdXRfYnl0ZXNfZnJvbV9lbmQgPQorCQkgICAgREVGQVVMVF9QT1JUX2N1dF9ieXRl c19mcm9tX2VuZDsKKwkJcF9mbV9wb3J0LT5wX2ZtX3BvcnRfZHJ2X3BhcmFtLT5lbl9idWZfcG9v bF9kZXBsZXRpb24gPQorCQlmYWxzZTsKKwkJcF9mbV9wb3J0LT5wX2ZtX3BvcnRfZHJ2X3BhcmFt LT5mcm1fZGlzY2FyZF9vdmVycmlkZSA9CisJCSAgICBERUZBVUxUX1BPUlRfZnJtX2Rpc2NhcmRf b3ZlcnJpZGU7CisKKwkJcF9mbV9wb3J0LT5wX2ZtX3BvcnRfZHJ2X3BhcmFtLT5yeF9maWZvX3By aV9lbGV2YXRpb25fbGV2ZWwgPQorCQlERkxUX1BPUlRfUlhfRklGT19QUklfRUxFVkFUSU9OX0xF VihwX2ZtX3BvcnQtPnBvcnRfaW50Zy0+CisJCQkJCQkgICAgbWF4X3BvcnRfZmlmb19zaXplKTsK KwkJcF9mbV9wb3J0LT5wX2ZtX3BvcnRfZHJ2X3BhcmFtLT5yeF9maWZvX3RocmVzaG9sZCA9CisJ CURGTFRfUE9SVF9SWF9GSUZPX1RIUkVTSE9MRChwX2ZtX3BvcnQtPmZtX3Jldl9pbmZvLm1ham9y X3JldiwKKwkJCQkJICAgIHBfZm1fcG9ydC0+cG9ydF9pbnRnLT4KKwkJCQkJICAgIG1heF9wb3J0 X2ZpZm9fc2l6ZSk7CisKKwkJcF9mbV9wb3J0LT5wX2ZtX3BvcnRfZHJ2X3BhcmFtLT5idWZfbWFy Z2lucy5lbmRfbWFyZ2lucyA9CisJCSAgICBERUZBVUxUX1BPUlRfQlVGX01BUkdJTlNfRU5EX01B QVJHSU5TOworCQlwX2ZtX3BvcnQtPnBfZm1fcG9ydF9kcnZfcGFyYW0tPmVycm9yc190b19kaXNj YXJkID0KKwkJICAgIERFRkFVTFRfUE9SVF9lcnJvcnNfdG9fZGlzY2FyZDsKKwkJcF9mbV9wb3J0 LT5wX2ZtX3BvcnRfZHJ2X3BhcmFtLT5mb3J3YXJkX3JldXNlX2ludF9jb250ZXh0ID0KKwkJICAg IERFRkFVTFRfUE9SVF9GT1JXQVJEX0lOVF9DT05URU5UX1JFVVNFOworCQlicmVhazsKKworCWNh c2UgKEZNX1BPUlRfVFlQRV9UWCk6CisJCWlmIChwX2ZtX3BvcnQtPnBvcnRfc3BlZWQgPT0gRk1f UE9SVF9TUEVFRF8xRykgeworCQkJcF9mbV9wb3J0LT5wX2ZtX3BvcnRfZHJ2X3BhcmFtLT5kb250 X3JlbGVhc2VfYnVmID0KKwkJCWZhbHNlOworI2lmZGVmIEZNX1dST05HX1JFU0VUX1ZBTFVFU19F UlJBVEFfRk1BTl9BMDA1MTI3CisJCQlpZiAocF9mbV9wb3J0LT5mbV9yZXZfaW5mby5tYWpvcl9y ZXYgPj0gNikgeworCQkJCXRtcF9yZWcgPSAweDAwMDAxMDEzOworCQkJCVdSSVRFX1VJTlQzMihw X2ZtX3BvcnQtPnBfZm1fcG9ydF9ibWlfcmVncy0+CisJCQkJCSAgICAgdHhfcG9ydF9ibWlfcmVn cy5mbWJtX3RmcCwKKwkJCQkJICAgICB0bXBfcmVnKTsKKwkJCX0KKyNlbmRpZiAvKiBGTV9XUk9O R19SRVNFVF9WQUxVRVNfRVJSQVRBX0ZNQU5fQTAwNTEyNyAqLworCQl9CisJCWlmIChwX2ZtX3Bv cnQtPnBvcnRfc3BlZWQgPT0gRk1fUE9SVF9TUEVFRF8xMEcpIHsKKwkJCXBfZm1fcG9ydC0+cF9m bV9wb3J0X2Rydl9wYXJhbS0+dHhfZmlmb19taW5fZmlsbF9sZXZlbAorCQkJPSBERkxUX1BPUlRf VFhfRklGT19NSU5fRklMTF9MRVZFTDsKKwkJCXBfZm1fcG9ydC0+cF9mbV9wb3J0X2Rydl9wYXJh bS0+dHhfZmlmb19sb3dfY29tZl9sZXZlbAorCQkJPSBERkxUX1BPUlRfVFhfRklGT19MT1dfQ09N Rl9MRVZFTDsKKworCQkJcF9mbV9wb3J0LT5wX2ZtX3BvcnRfZHJ2X3BhcmFtLT5kZXFfdHlwZSA9 CisJCQlERUZBVUxUX1BPUlRfZGVxX3R5cGU7CisJCQlwX2ZtX3BvcnQtPnBfZm1fcG9ydF9kcnZf cGFyYW0tPmRlcV9wcmVmZXRjaF9vcHRpb24gPQorCQkJREVGQVVMVF9QT1JUX2RlcV9wcmVmZXRj aF9vcHRpb247CisJCX0KKwkJcF9mbV9wb3J0LT5wX2ZtX3BvcnRfZHJ2X3BhcmFtLT5kZXFfaGln aF9wcmlvcml0eSA9CisJCQlERkxUX1BPUlRfREVRX0hJR0hfUFJJT1JJVFkocF9mbV9wb3J0LT5w b3J0X3NwZWVkKTsKKwkJcF9mbV9wb3J0LT5wX2ZtX3BvcnRfZHJ2X3BhcmFtLT5kZXFfYnl0ZV9j bnQgPQorCQkJREZMVF9QT1JUX0RFUV9CWVRFX0NOVChwX2ZtX3BvcnQtPnBvcnRfc3BlZWQpOwor CQlwX2ZtX3BvcnQtPnBfZm1fcG9ydF9kcnZfcGFyYW0tPmRmbHRfY2ZnLgorCQkJdHhfZmlmb19k ZXFfcGlwZWxpbmVfZGVwdGggPSAodWludDhfdCkKKwkJCURGTFRfUE9SVF9GSUZPX0RFUV9QSVBF TElORV9ERVBUSCgKKwkJCQkgICAgIHBfZm1fcG9ydC0+Zm1fcmV2X2luZm8ubWFqb3JfcmV2LAor CQkJCSAgICAgcF9mbV9wb3J0LT5wb3J0X3R5cGUsCisJCQkJICAgICBwX2ZtX3BvcnQtPnBvcnRf c3BlZWQpOworCQlicmVhazsKKwljYXNlIChGTV9QT1JUX1RZUEVfT1ApOgorCQlwX2ZtX3BvcnQt PnBfZm1fcG9ydF9kcnZfcGFyYW0tPmVycm9yc190b19kaXNjYXJkID0KKwkJICAgIERFRkFVTFRf UE9SVF9lcnJvcnNfdG9fZGlzY2FyZDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlrZnJlZShw X2ZtX3BvcnQtPnBfZm1fcG9ydF9kcnZfcGFyYW0pOworCQlrZnJlZShwX2ZtX3BvcnQpOworCQlw cl9lcnIoIkludmFsaWQgcG9ydCB0eXBlXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisjaWZk ZWYgRk1fUU1JX05PX0RFUV9PUFRJT05TX1NVUFBPUlQKKwlpZiAocF9mbV9wb3J0LT5mbV9yZXZf aW5mby5tYWpvcl9yZXYgPT0gNCkKKwkJcF9mbV9wb3J0LT5wX2ZtX3BvcnRfZHJ2X3BhcmFtLT5k ZXFfcHJlZmV0Y2hfb3B0aW9uID0KKwkJICAgIChlbnVtIGZtX3BvcnRfZGVxX3ByZWZldGNoX29w dGlvbilERUZBVUxUX05PVF9TVVBQT1JURUQ7CisjZW5kaWYgLyogRk1fUU1JX05PX0RFUV9PUFRJ T05TX1NVUFBPUlQgKi8KKworCXN3aXRjaCAocF9mbV9wb3J0LT5wb3J0X3R5cGUpIHsKKwljYXNl IChGTV9QT1JUX1RZUEVfUlgpOgorCQkvKiBJbml0aWFsaXplIEZNIHBvcnQgcGFyYW1ldGVycyBm b3IgaW5pdGlhbGl6YXRpb24gcGhhc2Ugb25seSovCisJCW1lbWNweSgmcF9mbV9wb3J0LT5wX2Zt X3BvcnRfZHJ2X3BhcmFtLT5leHRfYnVmX3Bvb2xzLAorCQkgICAgICAgJnBfZm1fcG9ydF9wYXJh bXMtPgorCQkJc3BlY2lmaWNfcGFyYW1zLnJ4X3BhcmFtcy5leHRfYnVmX3Bvb2xzLAorCQkgICAg ICAgc2l6ZW9mKHN0cnVjdCBmbV9leHRfcG9vbHNfdCkpOworCQlwX2ZtX3BvcnQtPnBfZm1fcG9y dF9kcnZfcGFyYW0tPmVycl9mcWlkCisJCSAgICA9IHBfZm1fcG9ydF9wYXJhbXMtPnNwZWNpZmlj X3BhcmFtcy5yeF9wYXJhbXMuZXJyX2ZxaWQ7CisJCXBfZm1fcG9ydC0+cF9mbV9wb3J0X2Rydl9w YXJhbS0+ZGZsdF9mcWlkCisJCSAgICA9IHBfZm1fcG9ydF9wYXJhbXMtPnNwZWNpZmljX3BhcmFt cy5yeF9wYXJhbXMuZGZsdF9mcWlkOworCQlwX2ZtX3BvcnQtPnBfZm1fcG9ydF9kcnZfcGFyYW0t Pmxpb2RuX29mZnNldAorCQkgICAgPSBwX2ZtX3BvcnRfcGFyYW1zLT5zcGVjaWZpY19wYXJhbXMu cnhfcGFyYW1zLmxpb2RuX29mZnNldDsKKwkJYnJlYWs7CisJY2FzZSAoRk1fUE9SVF9UWVBFX09Q KToKKwljYXNlIChGTV9QT1JUX1RZUEVfVFgpOgorCQlwX2ZtX3BvcnQtPnBfZm1fcG9ydF9kcnZf cGFyYW0tPmVycl9mcWlkID0KKwkJICAgIHBfZm1fcG9ydF9wYXJhbXMtPnNwZWNpZmljX3BhcmFt cy5ub25fcnhfcGFyYW1zLmVycl9mcWlkOworCQlwX2ZtX3BvcnQtPnBfZm1fcG9ydF9kcnZfcGFy YW0tPmRlcV9zdWJfcG9ydGFsID0KKwkJICAgICh1aW50OF90KShwX2ZtX3BvcnRfcGFyYW1zLT5z cGVjaWZpY19wYXJhbXMubm9uX3J4X3BhcmFtcy4KKwkJCSAgICAgICBxbV9jaGFubmVsICYgUU1J X0RFUV9DRkdfU1VCUE9SVEFMX01BU0spOworCQlwX2ZtX3BvcnQtPnBfZm1fcG9ydF9kcnZfcGFy YW0tPmRmbHRfZnFpZCA9CisJCSAgICBwX2ZtX3BvcnRfcGFyYW1zLT5zcGVjaWZpY19wYXJhbXMu bm9uX3J4X3BhcmFtcy5kZmx0X2ZxaWQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWtmcmVlKHBf Zm1fcG9ydC0+cF9mbV9wb3J0X2Rydl9wYXJhbSk7CisJCWtmcmVlKHBfZm1fcG9ydCk7CisJCXBy X2VycigiSW52YWxpZCBwb3J0IHR5cGVcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwltZW1z ZXQocF9mbV9wb3J0LT5uYW1lLCAwLCAoc2l6ZW9mKGNoYXIpKSAqIE1PRFVMRV9OQU1FX1NJWkUp OworCWlmIChzbnByaW50ZihwX2ZtX3BvcnQtPm5hbWUsIE1PRFVMRV9OQU1FX1NJWkUsICJGTS0l ZC1wb3J0LSVzLSVkIiwKKwkJICAgICBmbV9nZXRfaWQocF9mbV9wb3J0LT5oX2ZtKSwKKwkJICAg ICAoKHBfZm1fcG9ydC0+cG9ydF90eXBlID09IEZNX1BPUlRfVFlQRV9PUCkgPyAiT1AiIDoKKwkJ ICAgICAoKHBfZm1fcG9ydC0+cG9ydF90eXBlID09IEZNX1BPUlRfVFlQRV9UWCkgPworCQkgICAg ICgocF9mbV9wb3J0LT5wb3J0X3NwZWVkID09IEZNX1BPUlRfU1BFRURfMTBHKSA/ICIxMGctVFgi IDoKKwkJICAgICAiMWctVFgiKSA6CisJCSAgICAgKChwX2ZtX3BvcnQtPnBvcnRfc3BlZWQgPT0g Rk1fUE9SVF9TUEVFRF8xMEcpID8gIjEwZy1SWCIgOgorCQkgICAgICIxZy1SWCIpKSksCisJCSAg ICAgcF9mbV9wb3J0LT5wb3J0X2lkKSA9PSAwKSB7CisJCWtmcmVlKHBfZm1fcG9ydC0+cF9mbV9w b3J0X2Rydl9wYXJhbSk7CisJCWtmcmVlKHBfZm1fcG9ydCk7CisJCXByX2Vycigic3ByaW50ZiBm YWlsZWRcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlwX2ZtX3BvcnQtPnNwaW5sb2NrID0g a21hbGxvYyhzaXplb2Yoc3BpbmxvY2tfdCksIEdGUF9LRVJORUwpOworCWlmICghcF9mbV9wb3J0 LT5zcGlubG9jaykgeworCQlrZnJlZShwX2ZtX3BvcnQtPnBfZm1fcG9ydF9kcnZfcGFyYW0pOwor CQlrZnJlZShwX2ZtX3BvcnQpOworCQlwcl9lcnIoIlNwaW4gbG9jayBpbml0IGZhaWxlZFxuIik7 CisJCXJldHVybiBOVUxMOworCX0KKworCXNwaW5fbG9ja19pbml0KHBfZm1fcG9ydC0+c3Bpbmxv Y2spOworCisJcmV0dXJuIHBfZm1fcG9ydDsKK30KKworLyogRnVuY3Rpb24gICAgICBmbV9wb3J0 X2luaXQKKyAqIERlc2NyaXB0aW9uICAgSW5pdGlhbGl6ZXMgdGhlIEZNIG1vZHVsZQorICogUGFy YW1baW5dICAgICBoX2ZtX3BvcnQgLSBGTSBtb2R1bGUgZGVzY3JpcHRvcgorICogUmV0dXJuICAg ICAgICAwIG9uIHN1Y2Nlc3M7IEVycm9yIGNvZGUgb3RoZXJ3aXNlLgorICovCitpbnQgZm1fcG9y dF9pbml0KHZvaWQgKmhfZm1fcG9ydCkKK3sKKwlzdHJ1Y3QgZm1fcG9ydF90ICpwX2ZtX3BvcnQg PSAoc3RydWN0IGZtX3BvcnRfdCAqKWhfZm1fcG9ydDsKKwlzdHJ1Y3QgZm1fcG9ydF9kcnZfcGFy YW1fdCAqcF9kcnZfcGFyYW1zOworCWludCBlcnJfY29kZTsKKwlzdHJ1Y3QgZm1faW50ZXJfbW9k dWxlX3BvcnRfaW5pdF9wYXJhbXNfdCBmbV9wYXJhbXM7CisJc3RydWN0IGZtX3JldmlzaW9uX2lu Zm9fdCByZXZfaW5mbzsKKwlpbnQgcmV0LCByZXRfZXJyOworCWVudW0gZm1hbl9wb3J0X3R5cGUg Zm1hbl9wb3J0X3R5cGUgPSBFX0ZNQU5fUE9SVF9UWVBFX0RVTU1ZOworCisJcmV0ID0gaXNfaW5p dF9kb25lKHBfZm1fcG9ydC0+cF9mbV9wb3J0X2Rydl9wYXJhbSk7CisJaWYgKCFyZXQpCisJCXJl dHVybiAtRU5PU1lTOworCisJZXJyX2NvZGUgPQorCSAgICBmbV9zcF9idWlsZF9idWZmZXJfc3Ry dWN0dXJlKCZwX2ZtX3BvcnQtPnBfZm1fcG9ydF9kcnZfcGFyYW0tPgorCQkJCQkgaW50X2NvbnRl eHQsCisJCQkJCSAmcF9mbV9wb3J0LT5wX2ZtX3BvcnRfZHJ2X3BhcmFtLT4KKwkJCQkJIGJ1ZmZl cl9wcmVmaXhfY29udGVudCwKKwkJCQkJICZwX2ZtX3BvcnQtPnBfZm1fcG9ydF9kcnZfcGFyYW0t PgorCQkJCQkgYnVmX21hcmdpbnMsCisJCQkJCSAmcF9mbV9wb3J0LT5idWZmZXJfb2Zmc2V0cywK KwkJCQkJICZwX2ZtX3BvcnQtPmludGVybmFsX2J1Zl9vZmZzZXQpOworCWlmIChlcnJfY29kZSAh PSAwKQorCQlyZXR1cm4gLWVycl9jb2RlOworI2lmZGVmIEZNX0hFQVZZX1RSQUZGSUNfSEFOR19F UlJBVEFfRk1BTl9BMDA1NjY5CisJaWYgKHBfZm1fcG9ydC0+Zm1fcmV2X2luZm8ubWFqb3JfcmV2 ID49IDYgJiYKKwkgICAgKHBfZm1fcG9ydC0+cF9mbV9wb3J0X2Rydl9wYXJhbS0+YmNiX3dvcmth cm91bmQpICYmCisJICAgICgocF9mbV9wb3J0LT5wb3J0X3R5cGUgPT0gRk1fUE9SVF9UWVBFX1JY KSAmJgorCSAgICAocF9mbV9wb3J0LT5wb3J0X3NwZWVkID09IEZNX1BPUlRfU1BFRURfMUcpKSkg eworCQlwX2ZtX3BvcnQtPnBfZm1fcG9ydF9kcnZfcGFyYW0tPmVycm9yc190b19kaXNjYXJkIHw9 CisJCSAgICBGTV9QT1JUX0ZSTV9FUlJfUEhZU0lDQUw7CisJCWlmICghcF9mbV9wb3J0LT5maWZv X2J1ZnMubnVtKQorCQkJcF9mbV9wb3J0LT5maWZvX2J1ZnMubnVtID0KKwkJCQlERkxUX1BPUlRf TlVNX09GX0ZJRk9fQlVGUygKKwkJCQkJcF9mbV9wb3J0LT5mbV9yZXZfaW5mby5tYWpvcl9yZXYs CisJCQkJCXBfZm1fcG9ydC0+cG9ydF90eXBlLAorCQkJCQlwX2ZtX3BvcnQtPnBvcnRfc3BlZWQp ICoKKwkJCQkJQk1JX0ZJRk9fVU5JVFM7CisJCXBfZm1fcG9ydC0+Zmlmb19idWZzLm51bSArPSA0 ICogMTAyNDsKKwl9CisjZW5kaWYgLyogRk1fSEVBVllfVFJBRkZJQ19IQU5HX0VSUkFUQV9GTUFO X0EwMDU2NjkgKi8KKworCXJldF9lcnIgPSBjaGVja19pbml0X3BhcmFtZXRlcnMocF9mbV9wb3J0 KTsKKwlpZiAocmV0X2VycikKKwkJcmV0dXJuIHJldF9lcnI7CisKKwlwX2Rydl9wYXJhbXMgPSBw X2ZtX3BvcnQtPnBfZm1fcG9ydF9kcnZfcGFyYW07CisKKwkvKiBTZXQgdXAgZmxpYnMgcG9ydCBz dHJ1Y3R1cmUgKi8KKwltZW1zZXQoJnBfZm1fcG9ydC0+cG9ydCwgMCwgc2l6ZW9mKHN0cnVjdCBm bWFuX3BvcnQpKTsKKwkvKiBJbiBvcmRlciB0byBiZSBhbGlnbmVkIHdpdGggZmxpYiBwb3J0IHR5 cGVzLCB3ZSBuZWVkIHRvIHRyYW5zbGF0ZQorCSAqIHRoZSBwb3J0IHR5cGUgYW5kIHNwZWVkIHRv IGZtYW5fcG9ydF90eXBlCisJICovCisJaWYgKHBfZm1fcG9ydC0+cG9ydF90eXBlID09IEZNX1BP UlRfVFlQRV9PUCkgeworCQlmbWFuX3BvcnRfdHlwZSA9IEVfRk1BTl9QT1JUX1RZUEVfT1A7CisJ fSBlbHNlIGlmIChwX2ZtX3BvcnQtPnBvcnRfdHlwZSA9PSBGTV9QT1JUX1RZUEVfVFgpIHsKKwkJ aWYgKHBfZm1fcG9ydC0+cG9ydF9zcGVlZCA9PSBGTV9QT1JUX1NQRUVEXzEwRykKKwkJCWZtYW5f cG9ydF90eXBlID0gRV9GTUFOX1BPUlRfVFlQRV9UWF8xMEc7CisJCWVsc2UKKwkJCWZtYW5fcG9y dF90eXBlID0gRV9GTUFOX1BPUlRfVFlQRV9UWDsKKwl9IGVsc2UgaWYgKHBfZm1fcG9ydC0+cG9y dF90eXBlID09IEZNX1BPUlRfVFlQRV9SWCkgeworCQlpZiAocF9mbV9wb3J0LT5wb3J0X3NwZWVk ID09IEZNX1BPUlRfU1BFRURfMTBHKQorCQkJZm1hbl9wb3J0X3R5cGUgPSBFX0ZNQU5fUE9SVF9U WVBFX1JYXzEwRzsKKwkJZWxzZQorCQkJZm1hbl9wb3J0X3R5cGUgPSBFX0ZNQU5fUE9SVF9UWVBF X1JYOworCX0KKwlwX2ZtX3BvcnQtPnBvcnQudHlwZSA9IGZtYW5fcG9ydF90eXBlOworCWZtX2dl dF9yZXZpc2lvbihwX2ZtX3BvcnQtPmhfZm0sICZyZXZfaW5mbyk7CisJcF9mbV9wb3J0LT5wb3J0 LmZtX3Jldl9tYWogPSByZXZfaW5mby5tYWpvcl9yZXY7CisJcF9mbV9wb3J0LT5wb3J0LmZtX3Jl dl9taW4gPSByZXZfaW5mby5taW5vcl9yZXY7CisJcF9mbV9wb3J0LT5wb3J0LmJtaV9yZWdzID0g KHVuaW9uIGZtYW5fcG9ydF9ibWlfcmVncyBfX2lvbWVtICopCisJICAgIFVJTlRfVE9fUFRSKHBf ZHJ2X3BhcmFtcy0+YmFzZV9hZGRyICsgQk1JX1BPUlRfUkVHU19PRkZTRVQpOworCXBfZm1fcG9y dC0+cG9ydC5xbWlfcmVncyA9IChzdHJ1Y3QgZm1hbl9wb3J0X3FtaV9yZWdzIF9faW9tZW0gKikK KwkgICAgVUlOVF9UT19QVFIocF9kcnZfcGFyYW1zLT5iYXNlX2FkZHIgKyBRTUlfUE9SVF9SRUdT X09GRlNFVCk7CisJcF9mbV9wb3J0LT5wb3J0LmV4dF9wb29sc19udW0gPQorCSAgICAodWludDhf dCkoKHJldl9pbmZvLm1ham9yX3JldiA9PSA0KSA/IDQgOiA4KTsKKworCWlmIChwX2ZtX3BvcnQt PnBvcnRfdHlwZSA9PSBGTV9QT1JUX1RZUEVfUlgpIHsKKwkJLyogQ2FsbCB0aGUgZXh0ZXJuYWwg QnVmZmVyIHJvdXRpbmUgd2hpY2ggYWxzbyBjaGVja3MgZmlmbworCQkgKiBzaXplIGFuZCB1cGRh dGVzIGl0IGlmIG5lY2Vzc2FyeQorCQkgKi8KKwkJLyogZGVmaW5lIGV4dGVybmFsIGJ1ZmZlciBw b29scyBhbmQgcG9vbCBkZXBsZXRpb24gKi8KKwkJZXJyX2NvZGUgPSBzZXRfZXh0X2J1ZmZlcl9w b29scyhwX2ZtX3BvcnQpOworCQlpZiAoZXJyX2NvZGUpCisJCQlyZXR1cm4gLWVycl9jb2RlOwor CQkvKiBjaGVjayBpZiB0aGUgbGFyZ2VzdCBleHRlcm5hbCBidWZmZXIgcG9vbCBpcyBsYXJnZSBl bm91Z2ggKi8KKwkJaWYgKHBfZHJ2X3BhcmFtcy0+YnVmX21hcmdpbnMuc3RhcnRfbWFyZ2lucyAr CisJCSAgICBNSU5fRVhUX0JVRl9TSVpFICsKKwkJICAgIHBfZHJ2X3BhcmFtcy0+YnVmX21hcmdp bnMuZW5kX21hcmdpbnMgPgorCQkgICAgcF9mbV9wb3J0LT5yeF9wb29sc19wYXJhbXMubGFyZ2Vz dF9idWZfc2l6ZSkgeworCQkJcHJfZXJyKCJidWZfbWFyZ2lucy5zdGFydF9tYXJnaW5zICglZCkg KyBtaW5pbXVtIGJ1ZiBzaXplICg2NCkgKyBidWZfbWFyZ2lucy5lbmRfbWFyZ2lucyAoJWQpIGlz IGxhcmdlciB0aGFuIG1heGltdW0gZXh0ZXJuYWwgYnVmZmVyIHNpemUgKCVkKVxuIiwKKwkJCSAg ICAgICBwX2Rydl9wYXJhbXMtPmJ1Zl9tYXJnaW5zLnN0YXJ0X21hcmdpbnMsCisJCQkgICAgICAg cF9kcnZfcGFyYW1zLT5idWZfbWFyZ2lucy5lbmRfbWFyZ2lucywKKwkJCSAgICAgICBwX2ZtX3Bv cnQtPnJ4X3Bvb2xzX3BhcmFtcy5sYXJnZXN0X2J1Zl9zaXplKTsKKwkJCXJldHVybiAtRU5PU1lT OworCQl9CisJfQorCWlmIChwX2ZtX3BvcnQtPnBvcnRfdHlwZSA9PSBGTV9QT1JUX1RZUEVfT1Ap IHsKKwkJeworI2lmZGVmIEZNX05PX09QX09CU0VSVkVEX1BPT0xTCisJCQlzdHJ1Y3QgZm1fcmV2 aXNpb25faW5mb190IHJldl9pbmZvOworCisJCQlmbV9nZXRfcmV2aXNpb24ocF9mbV9wb3J0LT5o X2ZtLCAmcmV2X2luZm8pOworCQlpZiAoKHJldl9pbmZvLm1ham9yX3JldiA9PSA0KSAmJgorCQkg ICAgKHBfZHJ2X3BhcmFtcy0+ZW5fYnVmX3Bvb2xfZGVwbGV0aW9uKSkKKyNlbmRpZiAvKiBGTV9O T19PUF9PQlNFUlZFRF9QT09MUyAqLworCQkJeworCQkJCS8qIGRlZmluZSBleHRlcm5hbCBidWZm ZXIgcG9vbHMgKi8KKwkJCQllcnJfY29kZSA9IHNldF9leHRfYnVmZmVyX3Bvb2xzKHBfZm1fcG9y dCk7CisJCQkJaWYgKGVycl9jb2RlKQorCQkJCQlyZXR1cm4gLWVycl9jb2RlOworCQkJfQorCQl9 CisJfQorCisJLyogQ2FsbCBGTSBtb2R1bGUgcm91dGluZSBmb3IgY29tbXVuaWNhdGluZyBwYXJh bWV0ZXJzICAgICAgKi8KKworCW1lbXNldCgmZm1fcGFyYW1zLCAwLCBzaXplb2YoZm1fcGFyYW1z KSk7CisJZm1fcGFyYW1zLnBvcnRfaWQgPSBwX2ZtX3BvcnQtPnBvcnRfaWQ7CisJZm1fcGFyYW1z LnBvcnRfdHlwZSA9IChlbnVtIGZtX3BvcnRfdHlwZSlwX2ZtX3BvcnQtPnBvcnRfdHlwZTsKKwlm bV9wYXJhbXMucG9ydF9zcGVlZCA9IChlbnVtIGZtX3BvcnRfc3BlZWQpcF9mbV9wb3J0LT5wb3J0 X3NwZWVkOworCWZtX3BhcmFtcy5udW1fb2ZfdGFza3MgPSAodWludDhfdClwX2ZtX3BvcnQtPnRh c2tzLm51bTsKKwlmbV9wYXJhbXMubnVtX29mX2V4dHJhX3Rhc2tzID0gKHVpbnQ4X3QpcF9mbV9w b3J0LT50YXNrcy5leHRyYTsKKwlmbV9wYXJhbXMubnVtX29mX29wZW5fZG1hcyA9ICh1aW50OF90 KXBfZm1fcG9ydC0+b3Blbl9kbWFzLm51bTsKKwlmbV9wYXJhbXMubnVtX29mX2V4dHJhX29wZW5f ZG1hcyA9ICh1aW50OF90KXBfZm1fcG9ydC0+b3Blbl9kbWFzLmV4dHJhOworCisJaWYgKHBfZm1f cG9ydC0+Zmlmb19idWZzLm51bSkgeworCQllcnJfY29kZSA9IHZlcmlmeV9zaXplX29mX2ZpZm8o cF9mbV9wb3J0KTsKKwkJaWYgKGVycl9jb2RlICE9IDApCisJCQlyZXR1cm4gLWVycl9jb2RlOwor CX0KKwlmbV9wYXJhbXMuc2l6ZV9vZl9maWZvID0gcF9mbV9wb3J0LT5maWZvX2J1ZnMubnVtOwor CWZtX3BhcmFtcy5leHRyYV9zaXplX29mX2ZpZm8gPSBwX2ZtX3BvcnQtPmZpZm9fYnVmcy5leHRy YTsKKwlmbV9wYXJhbXMubGlvZG5fb2Zmc2V0ID0gcF9kcnZfcGFyYW1zLT5saW9kbl9vZmZzZXQ7 CisJZm1fcGFyYW1zLmxpb2RuX2Jhc2UgPSBwX2Rydl9wYXJhbXMtPmxpb2RuX2Jhc2U7CisJZm1f cGFyYW1zLmRlcV9waXBlbGluZV9kZXB0aCA9CisJICAgIHBfZm1fcG9ydC0+cF9mbV9wb3J0X2Ry dl9wYXJhbS0+CisJICAgIGRmbHRfY2ZnLnR4X2ZpZm9fZGVxX3BpcGVsaW5lX2RlcHRoOworCWZt X3BhcmFtcy5tYXhfZnJhbWVfbGVuZ3RoID0gcF9mbV9wb3J0LT5tYXhfZnJhbWVfbGVuZ3RoOwor I2lmbmRlZiBGTV9ERVFfUElQRUxJTkVfUEFSQU1TX0ZPUl9PUAorCWlmIChwX2ZtX3BvcnQtPnBv cnRfdHlwZSA9PSBGTV9QT1JUX1RZUEVfT1ApIHsKKwkJaWYgKCEoKHBfZm1fcG9ydC0+Zm1fcmV2 X2luZm8ubWFqb3JfcmV2ID09IDQpIHx8CisJCSAgICAgIChwX2ZtX3BvcnQtPmZtX3Jldl9pbmZv Lm1ham9yX3JldiA+PSA2KSkpCisJCQkvKiBPUCBwb3J0cyBkbyBub3QgaGF2ZSBmaWZvRGVxUGlw ZWxpbmVEZXB0aCwKKwkJCSAqIGJ1dCBpdCBpcyBuZWVkZWQgb25seQorCQkJICpmb3IgZGVxIHRo cmVzaG9sZCBjYWxjdWxhdGlvbi4KKwkJCSAqLworCQkJZm1fcGFyYW1zLmRlcV9waXBlbGluZV9k ZXB0aCA9IDI7CisJfQorI2VuZGlmIC8qICFGTV9ERVFfUElQRUxJTkVfUEFSQU1TX0ZPUl9PUCAq LworCisJZXJyX2NvZGUgPSBmbV9nZXRfc2V0X3BvcnRfcGFyYW1zKHBfZm1fcG9ydC0+aF9mbSwg JmZtX3BhcmFtcyk7CisJaWYgKGVycl9jb2RlKQorCQlyZXR1cm4gLWVycl9jb2RlOworCisJZXJy X2NvZGUgPSBpbml0X2xvd19sZXZlbF9kcml2ZXIocF9mbV9wb3J0KTsKKwlpZiAoZXJyX2NvZGUg IT0gMCkKKwkJcmV0dXJuIC1lcnJfY29kZTsKKworCWZtX3BvcnRfZHJ2X3BhcmFtX2ZyZWUocF9m bV9wb3J0KTsKKworCXJldHVybiAwOworfQorCit2b2lkICpmbV9wb3J0X2dldF9oYW5kbGUoY29u c3Qgc3RydWN0IGZtX3BvcnQgKnBvcnQpOworCisvKiBGdW5jdGlvbiAgICAgIGZtX3BvcnRfZnJl ZQorICogRGVzY3JpcHRpb24gICBGcmVlcyBhbGwgcmVzb3VyY2VzIHRoYXQgd2VyZSBhc3NpZ25l ZCB0byBGTSBtb2R1bGUuCisgKgkJIENhbGxpbmcgdGhpcyByb3V0aW5lIGludmFsaWRhdGVzIHRo ZSBkZXNjcmlwdG9yLgorICogUGFyYW1baW5dICAgICBoX2ZtX3BvcnQgLSBGTSBtb2R1bGUgZGVz Y3JpcHRvcgorICogUmV0dXJuICAgICAgICAwIG9uIHN1Y2Nlc3M7IEVycm9yIGNvZGUgb3RoZXJ3 aXNlLgorICovCitpbnQgZm1fcG9ydF9mcmVlKHN0cnVjdCBmbV9wb3J0ICpwb3J0KQoreworCXN0 cnVjdCBmbV9wb3J0X3QgKnBfZm1fcG9ydCA9CisJCShzdHJ1Y3QgZm1fcG9ydF90ICopZm1fcG9y dF9nZXRfaGFuZGxlKHBvcnQpOworCXN0cnVjdCBmbV9pbnRlcl9tb2R1bGVfcG9ydF9mcmVlX3Bh cmFtc190IGZtX3BhcmFtczsKKworCWlmIChwX2ZtX3BvcnQtPmVuYWJsZWQpIHsKKwkJaWYgKGZt X3BvcnRfZGlzYWJsZShwb3J0KSAhPSAwKSB7CisJCQlwcl9lcnIoImZtX3BvcnRfZGlzYWJsZSBG QUlMRURcbiIpOworCQkJcmV0dXJuIC1FTk9TWVM7CisJCX0KKwl9CisKKwlmbV9wb3J0X2Rydl9w YXJhbV9mcmVlKHBfZm1fcG9ydCk7CisKKwlmbV9wYXJhbXMucG9ydF9pZCA9IHBfZm1fcG9ydC0+ cG9ydF9pZDsKKwlmbV9wYXJhbXMucG9ydF90eXBlID0gKGVudW0gZm1fcG9ydF90eXBlKXBfZm1f cG9ydC0+cG9ydF90eXBlOworCWZtX3BhcmFtcy5kZXFfcGlwZWxpbmVfZGVwdGggPQorCSAgICBw X2ZtX3BvcnQtPnBfZm1fcG9ydF9kcnZfcGFyYW0tPgorCSAgICBkZmx0X2NmZy50eF9maWZvX2Rl cV9waXBlbGluZV9kZXB0aDsKKworCWZtX2ZyZWVfcG9ydF9wYXJhbXMocF9mbV9wb3J0LT5oX2Zt LCAmZm1fcGFyYW1zKTsKKworCWtmcmVlKHBfZm1fcG9ydC0+c3BpbmxvY2spOworCisJa2ZyZWUo cF9mbV9wb3J0KTsKKworCXJldHVybiAwOworfQorCisvKiAgICAgICBBUEkgQWR2YW5jZWQgSW5p dCB1bml0IGZ1bmN0aW9ucyAgICAgICAgKi8KKworaW50IGZtX3BvcnRfY2ZnX2RlcV9oaWdoX3By aW9yaXR5KHZvaWQgKmhfZm1fcG9ydCwgYm9vbCBoaWdoX3ByaSkKK3sKKwlzdHJ1Y3QgZm1fcG9y dF90ICpwX2ZtX3BvcnQgPSAoc3RydWN0IGZtX3BvcnRfdCAqKWhfZm1fcG9ydDsKKwlpbnQgcmV0 OworCisJcmV0ID0gaXNfaW5pdF9kb25lKHBfZm1fcG9ydC0+cF9mbV9wb3J0X2Rydl9wYXJhbSk7 CisJaWYgKCFyZXQpCisJCXJldHVybiAtRU5PU1lTOworCisJaWYgKHBfZm1fcG9ydC0+cG9ydF90 eXBlID09IEZNX1BPUlRfVFlQRV9SWCkgeworCQlwcl9lcnIoIm5vdCBhdmFpbGFibGUgZm9yIFJ4 IHBvcnRzXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcF9mbV9wb3J0LT5wX2ZtX3Bv cnRfZHJ2X3BhcmFtLT5kZmx0X2NmZy5kZXFfaGlnaF9wcmkgPSBoaWdoX3ByaTsKKworCXJldHVy biAwOworfQorCitpbnQgZm1fcG9ydF9jZmdfZGVxX3ByZWZldGNoX29wdGlvbih2b2lkICpoX2Zt X3BvcnQsCisJCQkJICAgIGVudW0gZm1fcG9ydF9kZXFfcHJlZmV0Y2hfb3B0aW9uCisJCQkJICAg IGRlcV9wcmVmZXRjaF9vcHRpb24pCit7CisJc3RydWN0IGZtX3BvcnRfdCAqcF9mbV9wb3J0ID0g KHN0cnVjdCBmbV9wb3J0X3QgKiloX2ZtX3BvcnQ7CisJaW50IHJldDsKKworCXJldCA9IGlzX2lu aXRfZG9uZShwX2ZtX3BvcnQtPnBfZm1fcG9ydF9kcnZfcGFyYW0pOworCWlmICghcmV0KQorCQly ZXR1cm4gLUVOT1NZUzsKKworCWlmIChwX2ZtX3BvcnQtPnBvcnRfdHlwZSA9PSBGTV9QT1JUX1RZ UEVfUlgpIHsKKwkJcHJfZXJyKCJub3QgYXZhaWxhYmxlIGZvciBSeCBwb3J0c1xuIik7CisJCXJl dHVybiAtRU5PREVWOworCX0KKwlwX2ZtX3BvcnQtPnBfZm1fcG9ydF9kcnZfcGFyYW0tPmRmbHRf Y2ZnLmRlcV9wcmVmZXRjaF9vcHQgPQorCSAgICAoZW51bSBmbWFuX3BvcnRfZGVxX3ByZWZldGNo KWRlcV9wcmVmZXRjaF9vcHRpb247CisKKwlyZXR1cm4gMDsKK30KKworaW50IGZtX3BvcnRfY2Zn X2J1Zl9wcmVmaXhfY29udGVudCh2b2lkICpoX2ZtX3BvcnQsCisJCQkJICAgc3RydWN0IGZtX2J1 ZmZlcl9wcmVmaXhfY29udGVudF90ICoKKwkJCQkgICBwX2ZtX2J1ZmZlcl9wcmVmaXhfY29udGVu dCkKK3sKKwlzdHJ1Y3QgZm1fcG9ydF90ICpwX2ZtX3BvcnQgPSAoc3RydWN0IGZtX3BvcnRfdCAq KWhfZm1fcG9ydDsKKwlpbnQgcmV0OworCisJcmV0ID0gaXNfaW5pdF9kb25lKHBfZm1fcG9ydC0+ cF9mbV9wb3J0X2Rydl9wYXJhbSk7CisJaWYgKCFyZXQpCisJCXJldHVybiAtRU5PU1lTOworCisJ bWVtY3B5KCZwX2ZtX3BvcnQtPnBfZm1fcG9ydF9kcnZfcGFyYW0tPmJ1ZmZlcl9wcmVmaXhfY29u dGVudCwKKwkgICAgICAgcF9mbV9idWZmZXJfcHJlZml4X2NvbnRlbnQsCisJICAgICAgIHNpemVv ZihzdHJ1Y3QgZm1fYnVmZmVyX3ByZWZpeF9jb250ZW50X3QpKTsKKwkvKiBpZiBkYXRhX2FsaWdu IHdhcyBub3QgaW5pdGlhbGl6ZWQgYnkgdXNlciwKKwkgKiB3ZSByZXR1cm4gdG8gZHJpdmVyJ3Mg ZGVmYXVsdAorCSAqKi8KKwlpZiAoIXBfZm1fcG9ydC0+cF9mbV9wb3J0X2Rydl9wYXJhbS0+CisJ ICAgIGJ1ZmZlcl9wcmVmaXhfY29udGVudC5kYXRhX2FsaWduKQorCQlwX2ZtX3BvcnQtPnBfZm1f cG9ydF9kcnZfcGFyYW0tPgorCQlidWZmZXJfcHJlZml4X2NvbnRlbnQuZGF0YV9hbGlnbiA9CisJ CSAgICBERUZBVUxUX1BPUlRfQlVGRkVSX1BSRUZJWF9DT05URVhUX0RBVEFfQUxJR047CisKKwly ZXR1cm4gMDsKK30KKworI2lmZGVmIEZNX0hFQVZZX1RSQUZGSUNfSEFOR19FUlJBVEFfRk1BTl9B MDA1NjY5CitpbnQgZm1fcG9ydF9jZmdfYmNiX3dhKHZvaWQgKmhfZm1fcG9ydCkKK3sKKwlzdHJ1 Y3QgZm1fcG9ydF90ICpwX2ZtX3BvcnQgPSAoc3RydWN0IGZtX3BvcnRfdCAqKWhfZm1fcG9ydDsK KwlpbnQgcmV0OworCisJcmV0ID0gaXNfaW5pdF9kb25lKHBfZm1fcG9ydC0+cF9mbV9wb3J0X2Ry dl9wYXJhbSk7CisJaWYgKCFyZXQpCisJCXJldHVybiAtRU5PU1lTOworCisJcF9mbV9wb3J0LT5w X2ZtX3BvcnRfZHJ2X3BhcmFtLT5iY2Jfd29ya2Fyb3VuZCA9IHRydWU7CisKKwlyZXR1cm4gMDsK K30KKyNlbmRpZiAvKiBGTV9IRUFWWV9UUkFGRklDX0hBTkdfRVJSQVRBX0ZNQU5fQTAwNTY2OSAq LworCisvKiAgICAgICBBUEkgUnVuLXRpbWUgQ29udHJvbCB1bml0IGZ1bmN0aW9ucyAgICAgICAg Ki8KKwordTY0ICpmbV9wb3J0X2dldF9idWZmZXJfdGltZV9zdGFtcChjb25zdCBzdHJ1Y3QgZm1f cG9ydCAqcG9ydCwgY2hhciAqcF9kYXRhKQoreworCXN0cnVjdCBmbV9wb3J0X3QgKnBfZm1fcG9y dCA9CisJCShzdHJ1Y3QgZm1fcG9ydF90ICopZm1fcG9ydF9nZXRfaGFuZGxlKHBvcnQpOworCWlu dCByZXQ7CisKKwlyZXQgPSBpc19pbml0X2RvbmUocF9mbV9wb3J0LT5wX2ZtX3BvcnRfZHJ2X3Bh cmFtKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChwX2ZtX3BvcnQtPmJ1ZmZl cl9vZmZzZXRzLnRpbWVfc3RhbXBfb2Zmc2V0ID09IElMTEVHQUxfQkFTRSkKKwkJcmV0dXJuIE5V TEw7CisKKwlyZXR1cm4gKHVpbnQ2NF90ICopUFRSX01PVkUocF9kYXRhLAorCQkJCSAgICBwX2Zt X3BvcnQtPgorCQkJCSAgICBidWZmZXJfb2Zmc2V0cy50aW1lX3N0YW1wX29mZnNldCk7Cit9CitF WFBPUlRfU1lNQk9MKGZtX3BvcnRfZ2V0X2J1ZmZlcl90aW1lX3N0YW1wKTsKKworaW50IGZtX3Bv cnRfZGlzYWJsZShzdHJ1Y3QgZm1fcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgZm1fcG9ydF90ICpw X2ZtX3BvcnQgPQorCQkoc3RydWN0IGZtX3BvcnRfdCAqKWZtX3BvcnRfZ2V0X2hhbmRsZShwb3J0 KTsKKwlpbnQgZXJyLCByZXQ7CisKKwlyZXQgPSBpc19pbml0X2RvbmUocF9mbV9wb3J0LT5wX2Zt X3BvcnRfZHJ2X3BhcmFtKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZXJyID0gZm1h bl9wb3J0X2Rpc2FibGUoJnBfZm1fcG9ydC0+cG9ydCk7CisJaWYgKGVyciA9PSAtRUJVU1kpIHsK KwkJcHJfZGVidWcoIiVzOiBCTUkgb3IgUU1JIGlzIEJ1c3kuIFBvcnQgZm9yY2VkIGRvd25cbiIs CisJCQkgcF9mbV9wb3J0LT5uYW1lKTsKKwkJZXJyID0gMDsKKwl9CisKKwlwX2ZtX3BvcnQtPmVu YWJsZWQgPSBmYWxzZTsKKworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MKGZtX3BvcnRf ZGlzYWJsZSk7CisKK2ludCBmbV9wb3J0X3N1c3BlbmQoc3RydWN0IGZtX3BvcnQgKnBvcnQpCit7 CisJc3RydWN0IGZtX3BvcnRfdCAqcF9mbV9wb3J0ID0KKwkJKHN0cnVjdCBmbV9wb3J0X3QgKilm bV9wb3J0X2dldF9oYW5kbGUocG9ydCk7CisJaW50IGVyciwgcmV0OworCisJcmV0ID0gaXNfaW5p dF9kb25lKHBfZm1fcG9ydC0+cF9mbV9wb3J0X2Rydl9wYXJhbSk7CisJaWYgKHJldCkKKwkJcmV0 dXJuIHJldDsKKworCWVyciA9IGZtYW5fcG9ydF9kaXNhYmxlKCZwX2ZtX3BvcnQtPnBvcnQpOwor CWlmIChlcnIgPT0gLUVCVVNZKSB7CisJCXByX2RlYnVnKCIlczogQk1JIG9yIFFNSSBpcyBCdXN5 LiBQb3J0IGZvcmNlZCBkb3duXG4iLAorCQkJIHBfZm1fcG9ydC0+bmFtZSk7CisJCWVyciA9IDA7 CisJfQorCisJcF9mbV9wb3J0LT5lbmFibGVkID0gZmFsc2U7CisKKwlyZXR1cm4gZXJyOworfQor RVhQT1JUX1NZTUJPTChmbV9wb3J0X3N1c3BlbmQpOworCitpbnQgZm1fcG9ydF9lbmFibGUoc3Ry dWN0IGZtX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGZtX3BvcnRfdCAqcF9mbV9wb3J0ID0KKwkJ KHN0cnVjdCBmbV9wb3J0X3QgKilmbV9wb3J0X2dldF9oYW5kbGUocG9ydCk7CisJaW50IGVyciwg cmV0OworCisJcmV0ID0gaXNfaW5pdF9kb25lKHBfZm1fcG9ydC0+cF9mbV9wb3J0X2Rydl9wYXJh bSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFVzZWQgYnkgZm1fcG9ydF9mcmVl IHJvdXRpbmUgYXMgaW5kaWNhdGlvbgorCSAqIGlmIHRvIGRpc2FibGUgcG9ydC4gVGh1cyBzZXQg aXQgdG8gdHJ1ZSBwcmlvcgorCSAqIHRvIGVuYWJsaW5nIGl0c2VsZi4gVGhpcyB3YXkgaWYgcGFy dCBvZiBlbmFibGUKKwkgKiBwcm9jZXNzIGZhaWxzIHRoZXJlIHdpbGwgYmUgc3RpbGwgdGhpbmdz CisJICogdG8gZGlzYWJsZSBkdXJpbmcgRnJlZS4gRm9yIGV4YW1wbGUsIGlmIEJNSQorCSAqIGVu YWJsZSBzdWNjZWVkZWQgYnV0IFFNSSBmYWlsZWQsIHN0aWxsICBCTUkKKwkgKiBuZWVkcyB0byBi ZSBkaXNhYmxlZCBieSBGcmVlLgorCSAqLworCXBfZm1fcG9ydC0+ZW5hYmxlZCA9IHRydWU7CisK KwllcnIgPSBmbWFuX3BvcnRfZW5hYmxlKCZwX2ZtX3BvcnQtPnBvcnQpOworCisJcmV0dXJuIGVy cjsKK30KK0VYUE9SVF9TWU1CT0woZm1fcG9ydF9lbmFibGUpOworCitpbnQgZm1fcG9ydF9yZXN1 bWUoc3RydWN0IGZtX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGZtX3BvcnRfdCAqcF9mbV9wb3J0 ID0KKwkJKHN0cnVjdCBmbV9wb3J0X3QgKilmbV9wb3J0X2dldF9oYW5kbGUocG9ydCk7CisJaW50 IGVyciwgcmV0OworCisJcmV0ID0gaXNfaW5pdF9kb25lKHBfZm1fcG9ydC0+cF9mbV9wb3J0X2Ry dl9wYXJhbSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFVzZWQgYnkgZm1fcG9y dF9mcmVlIHJvdXRpbmUgYXMgaW5kaWNhdGlvbgorCSAqIGlmIHRvIGRpc2FibGUgcG9ydC4gVGh1 cyBzZXQgaXQgdG8gdHJ1ZSBwcmlvcgorCSAqIHRvIGVuYWJsaW5nIGl0c2VsZi4gVGhpcyB3YXkg aWYgcGFydCBvZiBlbmFibGUKKwkgKiBwcm9jZXNzIGZhaWxzIHRoZXJlIHdpbGwgYmUgc3RpbGwg dGhpbmdzCisJICogdG8gZGlzYWJsZSBkdXJpbmcgRnJlZS4gRm9yIGV4YW1wbGUsIGlmIEJNSQor CSAqIGVuYWJsZSBzdWNjZWVkZWQgYnV0IFFNSSBmYWlsZWQsIHN0aWxsICBCTUkKKwkgKiBuZWVk cyB0byBiZSBkaXNhYmxlZCBieSBGcmVlLgorCSAqLworCXBfZm1fcG9ydC0+ZW5hYmxlZCA9IHRy dWU7CisKKwllcnIgPSBmbWFuX3BvcnRfZW5hYmxlKCZwX2ZtX3BvcnQtPnBvcnQpOworCisJcmV0 dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0woZm1fcG9ydF9yZXN1bWUpOwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vcG9ydC9mbV9wb3J0LmggYi9kcml2 ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9wb3J0L2ZtX3BvcnQuaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGYyY2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vcG9ydC9mbV9wb3J0LmgKQEAgLTAsMCAr MSw3MTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOCAtIDIwMTUgRnJlZXNjYWxlIFNlbWljb25k dWN0b3IgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0 dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAg ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl IGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l IG9mIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIG5vciB0aGUKKyAqICAgICAgIG5hbWVzIG9mIGl0 cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz CisgKiAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKgorICogQUxURVJOQVRJVkVMWSwgdGhpcyBz b2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhhdCBMaWNlbnNl IG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRISVMg U09GVFdBUkUgSVMgUFJPVklERUQgQlkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgYGBBUyBJUycn IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEJFIExJQUJM RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg VVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qIEZNIFBvcnQgaW50ZXJuYWwgc3RydWN0dXJl cyBhbmQgZGVmaW5pdGlvbnMuICovCisjaWZuZGVmIF9fRk1fUE9SVF9ICisjZGVmaW5lIF9fRk1f UE9SVF9ICisKKyNpbmNsdWRlICJzZXJ2aWNlLmgiCisKKyNpbmNsdWRlICJmbV9jb21tb24uaCIK KyNpbmNsdWRlICJmbV9zcF9jb21tb24uaCIKKyNpbmNsdWRlICJmc2xfZm1hbl9zcC5oIgorI2lu Y2x1ZGUgImZtX3BvcnRfZXh0LmgiCisjaW5jbHVkZSAiZnNsX2ZtYW5fcG9ydC5oIgorCisjZGVm aW5lIE1JTl9FWFRfQlVGX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY0Cisj ZGVmaW5lIERBVEFfQUxJR05NRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY0 CisjZGVmaW5lIE1BWF9MSU9ETl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDY0CisKKyNkZWZpbmUgTUFYX1BPUlRfRklGT19TSVpFKGJtaV9tYXhfZmlmb19zaXplKQlcCisJ bWluKCh1MzIpYm1pX21heF9maWZvX3NpemUsICh1MzIpMTAyNCAqIEJNSV9GSUZPX1VOSVRTKQor CisvKiBNZW1vcnkgTWFwIGRlZmluZXMgKi8KKyNkZWZpbmUgQk1JX1BPUlRfUkVHU19PRkZTRVQg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBRTUlfUE9SVF9SRUdTX09GRlNF VCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMAorI2RlZmluZSBQUlNfUE9SVF9SRUdT X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMAorCisvKiBkZWZhdWx0cyAq LworI2RlZmluZSBERkxUX1BPUlRfREVRX0hJR0hfUFJJT1JJVFkoc3BlZWQpCVwKKwkoKHNwZWVk ID09IEZNX1BPUlRfU1BFRURfMTBHKSA/IHRydWUgOiBmYWxzZSkKKyNkZWZpbmUgREVGQVVMVF9Q T1JUX2RlcV90eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZNX1BPUlRfREVRX1RZUEUx CisjZGVmaW5lIERFRkFVTFRfUE9SVF9kZXFfcHJlZmV0Y2hfb3B0aW9uIEZNX1BPUlRfREVRX0ZV TExfUFJFRkVUQ0gKKyNkZWZpbmUgREVGQVVMVF9QT1JUX2RlcV9wcmVmZXRjaF9vcHRpb25fSEMg Rk1fUE9SVF9ERVFfTk9fUFJFRkVUQ0gKKyNkZWZpbmUgREZMVF9QT1JUX0RFUV9CWVRFX0NOVChz cGVlZCkJXAorCSgoc3BlZWQgPT0gRk1fUE9SVF9TUEVFRF8xMEcpID8gMHgxNDAwIDogMHg0MDAp CisjZGVmaW5lIERFRkFVTFRfUE9SVF9CVUZGRVJfUFJFRklYX0NPTlRFTlRfUFJJVl9EQVRBX1NJ WkUgXAorREVGQVVMVF9GTV9TUF9CVUZGRVJfUFJFRklYX0NPTlRFTlRfUFJJVl9EQVRBX1NJWkUK KyNkZWZpbmUgREVGQVVMVF9QT1JUX0JVRkZFUl9QUkVGSVhfQ09OVEVOVF9QQVNTX1BSU19SRVNV TFQgXAorREVGQVVMVF9GTV9TUF9CVUZGRVJfUFJFRklYX0NPTlRFTlRfUFJJVl9QQVNTX1BSU19S RVNVTFQKKyNkZWZpbmUgREVGQVVMVF9QT1JUX0JVRkZFUl9QUkVGSVhfQ09OVEVOVF9QQVNTX1RJ TUVfU1RBTVAgIFwKK0RFRkFVTFRfRk1fU1BfQlVGRkVSX1BSRUZJWF9DT05URVhUX1BBU1NfVElN RV9TVEFNUAorI2RlZmluZSBERUZBVUxUX1BPUlRfQlVGRkVSX1BSRUZJWF9DT05URVhUX0RBVEFf QUxJR04gICAgICBcCitERUZBVUxUX0ZNX1NQX0JVRkZFUl9QUkVGSVhfQ09OVEVYVF9EQVRBX0FM SUdOCisjZGVmaW5lIERFRkFVTFRfUE9SVF9jaGVrc3VtX2xhc3RfYnl0ZXNfaWdub3JlICAgICAg ICAgICAgIDAKKyNkZWZpbmUgREVGQVVMVF9QT1JUX2N1dF9ieXRlc19mcm9tX2VuZCAgICAgICAg ICAgICAgICAgICAgNAorCisjZGVmaW5lIERFRkFVTFRfUE9SVF9mcm1fZGlzY2FyZF9vdmVycmlk ZSAgICAgICAgICAgICAgICAgZmFsc2UKKworI2RlZmluZSBERUZBVUxUX1BPUlRfRk9SV0FSRF9J TlRfQ09OVEVOVF9SRVVTRSAgICAgICAgICAgICBmYWxzZQorI2RlZmluZSBERUZBVUxUX1BPUlRf QlVGX01BUkdJTlNfRU5EX01BQVJHSU5TCQkwCisjZGVmaW5lIERFRkFVTFRfUE9SVF9zeW5jX3Jl cSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlCisjZGVmaW5lIERFRkFVTFRfUE9SVF9j b2xvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZNX1BPUlRfQ09MT1JfR1JFRU4KKyNk ZWZpbmUgREVGQVVMVF9QT1JUX2Vycm9yc190b19kaXNjYXJkICAgICAgICAgICAgICAgICAgICBc CitGTV9QT1JUX0ZSTV9FUlJfQ0xTX0RJU0NBUkQKKyNkZWZpbmUgREVGQVVMVF9QT1JUX2V4Y2Vw dGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgSU1fRVZfQlNZCisjZGVmaW5lIERFRkFVTFRf UE9SVF9tYXhfZnJhbWVfbGVuZ3RoICAgICAgICAgICAgICAgICAgICAgOTYwMAorCisjZGVmaW5l IERFRkFVTFRfTk9UX1NVUFBPUlRFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmCisK KyNkZWZpbmUgREZMVF9QT1JUX1JYX0ZJRk9fUFJJX0VMRVZBVElPTl9MRVYoYm1pX21heF9maWZv X3NpemUpCVwKKwlNQVhfUE9SVF9GSUZPX1NJWkUoYm1pX21heF9maWZvX3NpemUpCisKKyNkZWZp bmUgREZMVF9QT1JUX1JYX0ZJRk9fVEhSRVNIT0xEKG1ham9yLCBibWlfbWF4X2ZpZm9fc2l6ZSkJ XAorCShtYWpvciA9PSA2ID8JCQkJCQlcCisJTUFYX1BPUlRfRklGT19TSVpFKGJtaV9tYXhfZmlm b19zaXplKSA6CQlcCisJKE1BWF9QT1JUX0ZJRk9fU0laRShibWlfbWF4X2ZpZm9fc2l6ZSkgKiAz IC8gNCkpCVwKKworI2RlZmluZSBERkxUX1BPUlRfVFhfRklGT19NSU5fRklMTF9MRVZFTAkJMAor I2RlZmluZSBERkxUX1BPUlRfVFhfRklGT19MT1dfQ09NRl9MRVZFTAkJKDUgKiAxMDI0KQorCisv KiBPUCAtIDIsIDEwRyAtIDQsIDFHIChGTUFOIFYzIC0gMiwgRk1BTiBWMiAtIDEpICovCisjZGVm aW5lIERGTFRfUE9SVF9GSUZPX0RFUV9QSVBFTElORV9ERVBUSChtYWpvciwgdHlwZSwgc3BlZWQp CQlcCisJKCh0eXBlID09IEZNX1BPUlRfVFlQRV9PUCkgPyAyIDoJCQkJXAorCQkoKHNwZWVkID09 IEZNX1BPUlRfU1BFRURfMTBHKSA/IDQgOgkJCVwKKwkJKChtYWpvciA+PSA2KSA/IDIgOiAxKSkp CisKKyNkZWZpbmUgREZMVF9QT1JUX0VYVFJBX05VTV9PRl9GSUZPX0JVRlMJCTAKKworLyogRk1B TiBWMzogT1AgLSA2LCAxMEcgKFJYL1RYIDE2KSwgMUcgKFJYL1RYKSA0CisgKiBGTUFOIFYyOiBP UCAtIDMsIDEwRyAoVFgvVFggMTYpLCAxRyAoUlgvVFgpIDMKKyAqLworI2RlZmluZSBERkxUX1BP UlRfTlVNX09GX1RBU0tTKG1ham9yLCB0eXBlLCBzcGVlZCkJCQlcCisJKChtYWpvciA+PSA2KSA/ CQkJCQkJCVwKKwkoKHR5cGUgPT0gRk1fUE9SVF9UWVBFX09QKSA/IDYgOgkJCQlcCisJCSgoc3Bl ZWQgPT0gRk1fUE9SVF9TUEVFRF8xMEcpID8gMTYgOiA0KSkgOgkJXAorCSgoc3BlZWQgPT0gRk1f UE9SVF9TUEVFRF8xMEcpID8gMTYgOiAzKSkKKworLyogRk1BTiBWMzogMCBmb3IgYWxsIHBvcnRz CisgKiBGTUFOIFYyOiBSWCAxMEcgLSA4LCBSWCAxRyAyLCBUWC9PUCAtIDAKKyAqLworI2RlZmlu ZSBERkxUX1BPUlRfRVhUUkFfTlVNX09GX1RBU0tTKG1ham9yLCB0eXBlLCBzcGVlZCkJCVwKKwko KG1ham9yID49IDYpID8JIDAgOgkJCQkJCVwKKwkoKHR5cGUgPT0gRk1fUE9SVF9UWVBFX1JYKSA/ CQkJCQlcCisJKChzcGVlZCA9PSBGTV9QT1JUX1NQRUVEXzEwRykgPyA4IDogMikgOiAwKSkKKwor LyogRk1BTiBWMzogMTBHIFJYIC0gOCwgMUcgUlggLSAyLCAxMEcgVFggLSAxMiwgMUcgVFggMywg T1AgLSA2CisgKiBGTUFOIFYyOiAxMEcgUlgvVFggLSA4LCAxRyhUWC9SWCkvT1AgLSAxCisgKi8K KyNkZWZpbmUgREZMVF9QT1JUX05VTV9PRl9PUEVOX0RNQVMobWFqb3IsIHR5cGUsIHNwZWVkKQkJ CVwKKwkoKG1ham9yID49IDYpID8JCQkJCQkJXAorCSgodHlwZSA9PSBGTV9QT1JUX1RZUEVfUlgp ID8JCQkJCVwKKwkJKChzcGVlZCA9PSBGTV9QT1JUX1NQRUVEXzEwRykgPyA4IDogMikgOgkJXAor CQkoKHR5cGUgPT0gRk1fUE9SVF9UWVBFX1RYKSA/CQkJCVwKKwkJKChzcGVlZCA9PSBGTV9QT1JU X1NQRUVEXzEwRykgPyAxMiA6IDMpIDogNCkpIDoJXAorCSgoc3BlZWQgPT0gRk1fUE9SVF9TUEVF RF8xMEcpID8gOCA6IDEpKQorCisvKiBGTUFOIFYzOiAwIGZvciBhbGwgcG9ydHMKKyAqIEZNQU4g VjI6IFJYIDEwRyAtIDgsIDFHIFJYL1RYICYgT1AgLSAxCisgKi8KKyNkZWZpbmUgREZMVF9QT1JU X0VYVFJBX05VTV9PRl9PUEVOX0RNQVMobWFqb3IsIHR5cGUsIHNwZWVkKQkJXAorCSgobWFqb3Ig Pj0gNikgPwkgMCA6CQkJCQkJXAorCSgoc3BlZWQgPT0gRk1fUE9SVF9TUEVFRF8xMEcpID8gOCA6 IDEpKQorCisvKiBGTUFOIFYzOiAxMEcgUlggLSA5NiwgMTBHIFRYIDY0LCAxRy9PUCA1MAorICog Rk1BTiBWMjogMTBHIC0gNDgsIDFHIFJYIDQ1LCAxRyBUWCA0NCwgT1AgPSA4CisgKi8KKyNkZWZp bmUgREZMVF9QT1JUX05VTV9PRl9GSUZPX0JVRlMobWFqb3IsIHR5cGUsIHNwZWVkKQkJCVwKKwko bWFqb3IgPj0gNiA/CQkJCQkJCVwKKwkoKChzcGVlZCA9PSBGTV9QT1JUX1NQRUVEXzEwRykgPwkJ CQlcCisJCSgodHlwZSA9PSBGTV9QT1JUX1RZUEVfUlgpID8gKDk2KSA6ICg2NCkpIDogKDUwKSkp IDoJXAorCSgoc3BlZWQgPT0gRk1fUE9SVF9TUEVFRF8xMEcpID8gNDggOgkJCQlcCisJCSgodHlw ZSA9PSBGTV9QT1JUX1RZUEVfT1ApID8gOCA6CQkJXAorCQkoKHR5cGUgPT0gRk1fUE9SVF9UWVBF X1JYKSA/IDQ1IDogNDQpKSkpCQlcCisKKyNkZWZpbmUgRk1fUE9SVF9NQVhfTlVNX09GX0NPTkdF U1RJT05fR1JQU19BTExfSU5URUdSQVRJT05TIDI1NgorCisjZGVmaW5lIEZNX09IX1BPUlRfSUQg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvKiBNZW1vcnkgTWFwcGVkIFJlZ2lz dGVycyAqLworCitzdHJ1Y3QgZm1fcG9ydF9yeF9ibWlfcmVnc190IHsKKwl1aW50MzJfdCBmbWJt X3JjZmc7CS8qIFJ4IENvbmZpZ3VyYXRpb24gKi8KKwl1aW50MzJfdCBmbWJtX3JzdDsJLyogUngg U3RhdHVzICovCisJdWludDMyX3QgZm1ibV9yZGE7CS8qIFJ4IERNQSBhdHRyaWJ1dGVzKi8KKwl1 aW50MzJfdCBmbWJtX3JmcDsJLyogUnggRklGTyBQYXJhbWV0ZXJzKi8KKwl1aW50MzJfdCBmbWJt X3JmZWQ7CS8qIFJ4IEZyYW1lIEVuZCBEYXRhKi8KKwl1aW50MzJfdCBmbWJtX3JpY3A7CS8qIFJ4 IEludGVybmFsIENvbnRleHQgUGFyYW1ldGVycyovCisJdWludDMyX3QgZm1ibV9yaW07CS8qIFJ4 IEludGVybmFsIEJ1ZmZlciBNYXJnaW5zKi8KKwl1aW50MzJfdCBmbWJtX3JlYm07CS8qIFJ4IEV4 dGVybmFsIEJ1ZmZlciBNYXJnaW5zKi8KKwl1aW50MzJfdCBmbWJtX3JmbmU7CS8qIFJ4IEZyYW1l IE5leHQgRW5naW5lKi8KKwl1aW50MzJfdCBmbWJtX3JmY2E7CS8qIFJ4IEZyYW1lIENvbW1hbmQg QXR0cmlidXRlcy4qLworCXVpbnQzMl90IGZtYm1fcmZwbmU7CS8qIFJ4IEZyYW1lIFBhcnNlciBO ZXh0IEVuZ2luZSovCisJdWludDMyX3QgZm1ibV9ycHNvOwkvKiBSeCBQYXJzZSBTdGFydCBPZmZz ZXQqLworCXVpbnQzMl90IGZtYm1fcnBwOwkvKiBSeCBQb2xpY2VyIFByb2ZpbGUgICovCisJdWlu dDMyX3QgZm1ibV9yY2NiOwkvKiBSeCBDb2Fyc2UgQ2xhc3NpZmljYXRpb24gQmFzZSAqLworCXVp bnQzMl90IGZtYm1fcmV0aDsJLyogUnggRXhjZXNzaXZlIFRocmVzaG9sZCAqLworCXVpbnQzMl90 IHJlc2VydmVkMVsweDAxXTsKKwkvKiAoMHgwM0MpICovCisJdWludDMyX3QgZm1ibV9ycHJhaVtG TV9QT1JUX1BSU19SRVNVTFRfTlVNX09GX1dPUkRTXTsKKwkvKiBSeCBQYXJzZSBSZXN1bHRzIEFy cmF5IEluaXRpYWxpemF0aW9uKi8KKwl1aW50MzJfdCBmbWJtX3JmcWlkOwkvKiBSeCBGcmFtZSBR dWV1ZSBJRCovCisJdWludDMyX3QgZm1ibV9yZWZxaWQ7CS8qIFJ4IEVycm9yIEZyYW1lIFF1ZXVl IElEKi8KKwl1aW50MzJfdCBmbWJtX3Jmc2RtOwkvKiBSeCBGcmFtZSBTdGF0dXMgRGlzY2FyZCBN YXNrKi8KKwl1aW50MzJfdCBmbWJtX3Jmc2VtOwkvKiBSeCBGcmFtZSBTdGF0dXMgRXJyb3IgTWFz ayovCisJdWludDMyX3QgZm1ibV9yZmVuZTsJLyogUnggRnJhbWUgRW5xdWV1ZSBOZXh0IEVuZ2lu ZSAqLworCXVpbnQzMl90IHJlc2VydmVkMlsweDAyXTsKKwkvKiAoMHgwNzQtMHgwNzgpICovCisJ LyogUnggRnJhbWUgQ29udGludW91cyBNb2RlIE5leHQgRW5naW5lICovCisJdWludDMyX3QgZm1i bV9yY21uZTsKKwl1aW50MzJfdCByZXNlcnZlZDNbMHgyMF07CisJLyogKDB4MDgwIDB4MEZGKSAg Ki8KKwl1aW50MzJfdCBmbWJtX2VibXBpW0ZNX1BPUlRfTUFYX05VTV9PRl9FWFRfUE9PTFNdOwor CS8qIEJ1ZmZlciBNYW5hZ2VyIHBvb2wgSW5mb3JtYXRpb24tKi8KKwl1aW50MzJfdCBmbWJtX2Fj bnRbRk1fUE9SVF9NQVhfTlVNX09GX0VYVF9QT09MU107CisJLyogQWxsb2NhdGUgQ291bnRlci0q LworCXVpbnQzMl90IHJlc2VydmVkNFsweDA4XTsKKwkvKiAweDEzMC8weDE0MCAtIDB4MTVGIHJl c2VydmVkIC0qLworCXVpbnQzMl90CisJZm1ibV9yY2dtW0ZNX1BPUlRfTUFYX05VTV9PRl9DT05H RVNUSU9OX0dSUFNfQUxMX0lOVEVHUkFUSU9OUyAvIDMyXTsKKwkvKiBDb25nZXN0aW9uIEdyb3Vw IE1hcCovCisJdWludDMyX3QgZm1ibV9ybXBkOwkvKiBCTSBQb29sIERlcGxldGlvbiAgKi8KKwl1 aW50MzJfdCByZXNlcnZlZDVbMHgxRl07CisJLyogKDB4MTg0IDB4MUZGKSAqLworCXVpbnQzMl90 IGZtYm1fcnN0YzsJLyogUnggU3RhdGlzdGljcyBDb3VudGVycyovCisJdWludDMyX3QgZm1ibV9y ZnJjOwkvKiBSeCBGcmFtZSBDb3VudGVyKi8KKwl1aW50MzJfdCBmbWJtX3JmYmM7CS8qIFJ4IEJh ZCBGcmFtZXMgQ291bnRlciovCisJdWludDMyX3QgZm1ibV9ybGZjOwkvKiBSeCBMYXJnZSBGcmFt ZXMgQ291bnRlciovCisJdWludDMyX3QgZm1ibV9yZmZjOwkvKiBSeCBGaWx0ZXIgRnJhbWVzIENv dW50ZXIqLworCXVpbnQzMl90IGZtYm1fcmZjZDsJLyogUnggRnJhbWUgRGlzY2FyZCBDb3VudGVy Ki8KKwl1aW50MzJfdCBmbWJtX3JmbGRlYzsJLyogUnggRnJhbWVzIExpc3QgRE1BIEVycm9yIENv dW50ZXIqLworCXVpbnQzMl90IGZtYm1fcm9kYzsvKiBSeCBPdXQgb2YgQnVmZmVycyBEaXNjYXJk IENvdW50ZXItKi8KKwl1aW50MzJfdCBmbWJtX3JiZGM7CS8qIFJ4IEJ1ZmZlcnMgRGVhbGxvY2F0 ZSBDb3VudGVyLSovCisJdWludDMyX3QgZm1ibV9ycGVjOwkvKiBSeCBSWCBQcmVwYXJlIHRvIGVu cXVldWUgQ291bnRlci0qLworCXVpbnQzMl90IHJlc2VydmVkNlsweDE2XTsKKwkvKiAoMHgyMjgg MHgyN0YpICovCisJdWludDMyX3QgZm1ibV9ycGM7CS8qIFJ4IFBlcmZvcm1hbmNlIENvdW50ZXJz Ki8KKwl1aW50MzJfdCBmbWJtX3JwY3A7CS8qIFJ4IFBlcmZvcm1hbmNlIENvdW50IFBhcmFtZXRl cnMqLworCXVpbnQzMl90IGZtYm1fcmNjbjsJLyogUnggQ3ljbGUgQ291bnRlciovCisJdWludDMy X3QgZm1ibV9ydHVjOwkvKiBSeCBUYXNrcyBVdGlsaXphdGlvbiBDb3VudGVyKi8KKwl1aW50MzJf dCBmbWJtX3JycXVjOy8qIFJ4IFJlY2VpdmUgUXVldWUgVXRpbGl6YXRpb24gQ291bnRlciovCisJ dWludDMyX3QgZm1ibV9yZHVjOwkvKiBSeCBETUEgVXRpbGl6YXRpb24gQ291bnRlciovCisJdWlu dDMyX3QgZm1ibV9yZnVjOwkvKiBSeCBGSUZPIFV0aWxpemF0aW9uIENvdW50ZXIqLworCXVpbnQz Ml90IGZtYm1fcnBhYzsJLyogUnggUGF1c2UgQWN0aXZhdGlvbiBDb3VudGVyKi8KKwl1aW50MzJf dCByZXNlcnZlZDdbMHgxOF07CisJLyogKDB4MkEwLTB4MkZGKSAqLworCXVpbnQzMl90IGZtYm1f cmRjZmdbMHgzXTsKKwkvKiBSeCBEZWJ1Zy0qLworCXVpbnQzMl90IGZtYm1fcmdwcjsJLyogUngg R2VuZXJhbCBQdXJwb3NlIFJlZ2lzdGVyLiAqLworCXVpbnQzMl90IHJlc2VydmVkOFsweDNhXTsK KwkvKiAoMHgzMTAtMHgzRkYpICovCit9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKKwor c3RydWN0IGZtX3BvcnRfdHhfYm1pX3JlZ3NfdCB7CisJIHVpbnQzMl90IGZtYm1fdGNmZzsJLyog VHggQ29uZmlndXJhdGlvbiAqLworCSB1aW50MzJfdCBmbWJtX3RzdDsJLyogVHggU3RhdHVzICov CisJIHVpbnQzMl90IGZtYm1fdGRhOwkvKiBUeCBETUEgYXR0cmlidXRlcyAqLworCSB1aW50MzJf dCBmbWJtX3RmcDsJLyogVHggRklGTyBQYXJhbWV0ZXJzICovCisJIHVpbnQzMl90IGZtYm1fdGZl ZDsJLyogVHggRnJhbWUgRW5kIERhdGEgKi8KKwkgdWludDMyX3QgZm1ibV90aWNwOwkvKiBUeCBJ bnRlcm5hbCBDb250ZXh0IFBhcmFtZXRlcnMgKi8KKwkgdWludDMyX3QgZm1ibV90ZmRuZTsJLyog VHggRnJhbWUgRGVxdWV1ZSBOZXh0IEVuZ2luZS4gKi8KKwkgdWludDMyX3QgZm1ibV90ZmNhOwkv KiBUeCBGcmFtZSBDb21tYW5kIGF0dHJpYnV0ZS4gKi8KKwkgdWludDMyX3QgZm1ibV90Y2ZxaWQ7 CS8qIFR4IENvbmZpcm1hdGlvbiBGcmFtZSBRdWV1ZSBJRC4gKi8KKwkgdWludDMyX3QgZm1ibV90 ZmVxaWQ7CS8qIFR4IEZyYW1lIEVycm9yIFF1ZXVlIElEICovCisJIHVpbnQzMl90IGZtYm1fdGZl bmU7CS8qIFR4IEZyYW1lIEVucXVldWUgTmV4dCBFbmdpbmUgKi8KKwkgdWludDMyX3QgZm1ibV90 cmxtdHM7CS8qIFR4IFJhdGUgTGltaXRlciBTY2FsZSAqLworCSB1aW50MzJfdCBmbWJtX3RybG10 OwkvKiBUeCBSYXRlIExpbWl0ZXIgKi8KKwkgdWludDMyX3QgZm1ibV90Y2NiOwkvKiBUeCBDb2Fy c2UgQ2xhc3NpZmljYXRpb24gQmFzZSAqLworCSB1aW50MzJfdCByZXNlcnZlZDBbMHgwZV07CisJ CQkJCS8qICgweDAzOC0weDA3MCkgKi8KKwkgdWludDMyX3QgZm1ibV90Zm5lOwkvKiBUeCBGcmFt ZSBOZXh0IEVuZ2luZSAqLworCSB1aW50MzJfdCBmbWJtX3RwZmNtWzB4MDJdOworCQkJLyogVHgg UHJpb3JpdHkgYmFzZWQgRmxvdyBDb250cm9sIChQRkMpIE1hcHBpbmcgKi8KKwkvKiBUeCBGcmFt ZSBDb250aW51b3VzIE1vZGUgTmV4dCBFbmdpbmUgKi8KKwkgdWludDMyX3QgZm1ibV90Y21uZTsK KwkgdWludDMyX3QgcmVzZXJ2ZWQyWzB4NjBdOworCQkJCQkvKiAoMHgwODAtMHgyMDApICovCisJ IHVpbnQzMl90IGZtYm1fdHN0YzsJLyogVHggU3RhdGlzdGljcyBDb3VudGVycyAqLworCSB1aW50 MzJfdCBmbWJtX3RmcmM7CS8qIFR4IEZyYW1lIENvdW50ZXIgKi8KKwkgdWludDMyX3QgZm1ibV90 ZmRjOwkvKiBUeCBGcmFtZXMgRGlzY2FyZCBDb3VudGVyICovCisJIHVpbnQzMl90IGZtYm1fdGZs ZWRjOwkvKiBUeCBGcmFtZSBMZW5ndGggZXJyb3IgZGlzY2FyZCBjb3VudGVyICovCisJLyogVHgg RnJhbWUgdW5zdXBwb3J0ZWQgZm9ybWF0IGRpc2NhcmQgQ291bnRlciAqLworCSB1aW50MzJfdCBm bWJtX3RmdWZkYzsKKwkgdWludDMyX3QgZm1ibV90YmRjOwkvKiBUeCBCdWZmZXJzIERlYWxsb2Nh dGUgQ291bnRlciAqLworCSB1aW50MzJfdCByZXNlcnZlZDNbMHgxQV07CisJCQkJCS8qICgweDIx OC0weDI4MCkgKi8KKwkgdWludDMyX3QgZm1ibV90cGM7CS8qIFR4IFBlcmZvcm1hbmNlIENvdW50 ZXJzKi8KKwkgdWludDMyX3QgZm1ibV90cGNwOwkvKiBUeCBQZXJmb3JtYW5jZSBDb3VudCBQYXJh bWV0ZXJzKi8KKwkgdWludDMyX3QgZm1ibV90Y2NuOwkvKiBUeCBDeWNsZSBDb3VudGVyKi8KKwkg dWludDMyX3QgZm1ibV90dHVjOwkvKiBUeCBUYXNrcyBVdGlsaXphdGlvbiBDb3VudGVyKi8KKwkg LyogVHggVHJhbnNtaXQgQ29uZmlybSBRdWV1ZSBVdGlsaXphdGlvbiBDb3VudGVyKi8KKwkgdWlu dDMyX3QgZm1ibV90dGNxdWM7CisJIHVpbnQzMl90IGZtYm1fdGR1YzsJLyogVHggRE1BIFV0aWxp emF0aW9uIENvdW50ZXIqLworCSB1aW50MzJfdCBmbWJtX3RmdWM7CS8qIFR4IEZJRk8gVXRpbGl6 YXRpb24gQ291bnRlciovCisJIHVpbnQzMl90IHJlc2VydmVkNFsxNl07LyogKDB4MjlDLTB4MkZG KSAqLworCSB1aW50MzJfdCBmbWJtX3RkY2ZnWzB4M107CisJCQkJCS8qIFR4IERlYnVnLSovCisJ IHVpbnQzMl90IGZtYm1fdGdwcjsJLyogTy9IIEdlbmVyYWwgUHVycG9zZSBSZWdpc3RlciAqLwor CSB1aW50MzJfdCByZXNlcnZlZDVbMHgzYV07CisJCQkJCS8qICgweDMxMC0weDNGRikgKi8KK30g X19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOworCitzdHJ1Y3QgZm1fcG9ydF9vaF9ibWlfcmVn c190IHsKKwl1aW50MzJfdCBmbWJtX29jZmc7CS8qIE8vSCBDb25maWd1cmF0aW9uICAqLworCXVp bnQzMl90IGZtYm1fb3N0OwkvKiBPL0ggU3RhdHVzICovCisJdWludDMyX3QgZm1ibV9vZGE7CS8q IE8vSCBETUEgYXR0cmlidXRlcyAgKi8KKwl1aW50MzJfdCBmbWJtX29pY3A7CS8qIE8vSCBJbnRl cm5hbCBDb250ZXh0IFBhcmFtZXRlcnMqLworCXVpbnQzMl90IGZtYm1fb2ZkbmU7CS8qIE8vSCBG cmFtZSBEZXF1ZXVlIE5leHQgRW5naW5lICAqLworCXVpbnQzMl90IGZtYm1fb2ZuZTsJLyogTy9I IEZyYW1lIE5leHQgRW5naW5lICAqLworCXVpbnQzMl90IGZtYm1fb2ZjYTsJLyogTy9IIEZyYW1l IENvbW1hbmQgQXR0cmlidXRlcy4gICovCisJdWludDMyX3QgZm1ibV9vZnBuZTsJLyogTy9IIEZy YW1lIFBhcnNlciBOZXh0IEVuZ2luZSAgKi8KKwl1aW50MzJfdCBmbWJtX29wc287CS8qIE8vSCBQ YXJzZSBTdGFydCBPZmZzZXQgICovCisJdWludDMyX3QgZm1ibV9vcHA7CS8qIE8vSCBQb2xpY2Vy IFByb2ZpbGUgKi8KKwl1aW50MzJfdCBmbWJtX29jY2I7CS8qIE8vSCBDb2Fyc2UgQ2xhc3NpZmlj YXRpb24gYmFzZSAqLworCXVpbnQzMl90IGZtYm1fb2ltOwkvKiBPL0ggSW50ZXJuYWwgbWFyZ2lu cyovCisJdWludDMyX3QgZm1ibV9vZnA7CS8qIE8vSCBGaWZvIFBhcmFtZXRlcnMqLworCXVpbnQz Ml90IGZtYm1fb2ZlZDsJLyogTy9IIEZyYW1lIEVuZCBEYXRhKi8KKwl1aW50MzJfdCByZXNlcnZl ZDBbMl07CS8qICgweDAzOCAtIDB4MDNGKSAqLworCXVpbnQzMl90IGZtYm1fb3ByYWlbRk1fUE9S VF9QUlNfUkVTVUxUX05VTV9PRl9XT1JEU107CisJCQkJLyogTy9IIFBhcnNlIFJlc3VsdHMgQXJy YXkgSW5pdGlhbGl6YXRpb24gKi8KKwl1aW50MzJfdCBmbWJtX29mcWlkOwkvKiBPL0ggRnJhbWUg UXVldWUgSUQgICovCisJdWludDMyX3QgZm1ibV9vZWZxaWQ7CS8qIE8vSCBFcnJvciBGcmFtZSBR dWV1ZSBJRCAgKi8KKwl1aW50MzJfdCBmbWJtX29mc2RtOwkvKiBPL0ggRnJhbWUgU3RhdHVzIERp c2NhcmQgTWFzayAgKi8KKwl1aW50MzJfdCBmbWJtX29mc2VtOwkvKiBPL0ggRnJhbWUgU3RhdHVz IEVycm9yIE1hc2sgICovCisJdWludDMyX3QgZm1ibV9vZmVuZTsJLyogTy9IIEZyYW1lIEVucXVl dWUgTmV4dCBFbmdpbmUgICovCisJdWludDMyX3QgZm1ibV9vcmxtdHM7CS8qIE8vSCBSYXRlIExp bWl0ZXIgU2NhbGUgICovCisJdWludDMyX3QgZm1ibV9vcmxtdDsJLyogTy9IIFJhdGUgTGltaXRl ciAgKi8KKwl1aW50MzJfdCBmbWJtX29jbW5lOwkvKiBPL0ggQ29udGludW91cyBNb2RlIE5leHQg RW5naW5lKi8KKwl1aW50MzJfdCByZXNlcnZlZDFbMHgyMF07CisJCQkJCS8qICgweDA4MCAtIDB4 MEZGKSAqLworCS8qIEJ1ZmZlciBNYW5hZ2VyIE9ic2VydmVkIFBvb2wgSW5mb3JtYXRpb24gKi8K Kwl1aW50MzJfdCBmbWJtX29lYm1waVsyXTsKKwl1aW50MzJfdCByZXNlcnZlZDJbMHgxNl07CisJ CQkJCS8qICgweDEwOCAtIDB4MTVGKSAqLworCXVpbnQzMl90IGZtYm1fb2NnbTsJLyogT2JzZXJ2 ZWQgQ29uZ2VzdGlvbiBHcm91cCBNYXAgKi8KKwl1aW50MzJfdCByZXNlcnZlZDNbMHg3XTsKKwkJ CQkJLyogKDB4MTY0IC0gMHgxN0YpICovCisJdWludDMyX3QgZm1ibV9vbXBkOwkvKiBPYnNlcnZl ZCBCTWFuIFBvb2wgRGVwbGV0aW9uICovCisJdWludDMyX3QgcmVzZXJ2ZWQ0WzB4MUZdOworCQkJ CQkvKiAoMHgxODQgLSAweDFGRikgKi8KKwl1aW50MzJfdCBmbWJtX29zdGM7CS8qIE8vSCBTdGF0 aXN0aWNzIENvdW50ZXJzICAqLworCXVpbnQzMl90IGZtYm1fb2ZyYzsJLyogTy9IIEZyYW1lIENv dW50ZXIgICovCisJdWludDMyX3QgZm1ibV9vZmRjOwkvKiBPL0ggRnJhbWVzIERpc2NhcmQgQ291 bnRlciAgKi8KKwkvKiBPL0ggRnJhbWVzIExlbmd0aCBFcnJvciBEaXNjYXJkIENvdW50ZXIgICov CisJdWludDMyX3QgZm1ibV9vZmxlZGM7CisJLyogTy9IIEZyYW1lcyBVbnN1cHBvcnRlZCBGb3Jt YXQgRGlzY2FyZCBDb3VudGVyICAqLworCXVpbnQzMl90IGZtYm1fb2Z1ZmRjOworCXVpbnQzMl90 IGZtYm1fb2ZmYzsJLyogTy9IIEZpbHRlciBGcmFtZXMgQ291bnRlciAgKi8KKwl1aW50MzJfdCBm bWJtX29md2RjOwkvKiAtIFJ4IEZyYW1lcyBXUkVEIERpc2NhcmQgQ291bnRlciovCisJLyogTy9I IEZyYW1lcyBMaXN0IERNQSBFcnJvciBDb3VudGVyICovCisJdWludDMyX3QgZm1ibV9vZmxkZWM7 CisJLyogTy9IIEJ1ZmZlcnMgRGVhbGxvY2F0ZSBDb3VudGVyICovCisJdWludDMyX3QgZm1ibV9v YmRjOworCS8qIE8vSCBPdXQgb2YgQnVmZmVycyBEaXNjYXJkIENvdW50ZXIgKi8KKwl1aW50MzJf dCBmbWJtX29vZGM7CisJLyogTy9IIFByZXBhcmUgdG8gZW5xdWV1ZSBDb3VudGVyICovCisJdWlu dDMyX3QgZm1ibV9vcGVjOworCXVpbnQzMl90IHJlc2VydmVkNVsweDE1XTsKKwkJCQkJLyogKCAt IDB4MjdGKSAqLworCXVpbnQzMl90IGZtYm1fb3BjOwkvKiBPL0ggUGVyZm9ybWFuY2UgQ291bnRl cnMgICovCisJdWludDMyX3QgZm1ibV9vcGNwOwkvKiBPL0ggUGVyZm9ybWFuY2UgQ291bnQgUGFy YW1ldGVycyovCisJdWludDMyX3QgZm1ibV9vY2NuOwkvKiBPL0ggQ3ljbGUgQ291bnRlciAgKi8K Kwl1aW50MzJfdCBmbWJtX290dWM7CS8qIE8vSCBUYXNrcyBVdGlsaXphdGlvbiBDb3VudGVyICAq LworCXVpbnQzMl90IGZtYm1fb2R1YzsJLyogTy9IIERNQSBVdGlsaXphdGlvbiBDb3VudGVyICov CisJdWludDMyX3QgZm1ibV9vZnVjOwkvKiBPL0ggRklGTyBVdGlsaXphdGlvbiBDb3VudGVyICov CisJdWludDMyX3QgcmVzZXJ2ZWQ2WzI2XTsvKiAoMHgyOTgtMHgyRkYpICovCisJdWludDMyX3Qg Zm1ibV9vZGNmZ1sweDNdOworCQkJCQkvKiBPL0ggRGVidWcgKG9ubHkgMSBpbiBQMTAyMykgKi8K Kwl1aW50MzJfdCBmbWJtX29ncHI7CS8qIE8vSCBHZW5lcmFsIFB1cnBvc2UgUmVnaXN0ZXIuICov CisJdWludDMyX3QgcmVzZXJ2ZWQ3WzB4M2FdOworCQkJCQkvKiAoMHgzMTAgMHgzRkYpICovCit9 IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKKwordW5pb24gZm1fcG9ydF9ibWlfcmVnc191 IHsKKwlzdHJ1Y3QgZm1fcG9ydF9yeF9ibWlfcmVnc190IHJ4X3BvcnRfYm1pX3JlZ3M7CisJc3Ry dWN0IGZtX3BvcnRfdHhfYm1pX3JlZ3NfdCB0eF9wb3J0X2JtaV9yZWdzOworCXN0cnVjdCBmbV9w b3J0X29oX2JtaV9yZWdzX3Qgb2hfcG9ydF9ibWlfcmVnczsKK30gX19hdHRyaWJ1dGVfXygoX19w YWNrZWRfXykpOworCitzdHJ1Y3QgZm1fcG9ydF9ub25fcnhfcW1pX3JlZ3NfdCB7CisJLyogICAw eG4wMjQgLSAweDAyQiAqLworCXVpbnQzMl90IHJlc2VydmVkMVsyXTsKKwkvKiAgIFBvcnRJRCBu IERlcXVldWUgTklBIFJlZ2lzdGVyICovCisJdWludDMyX3QgZm1xbV9wbmRuOworCS8qICAgUG9y dElEIG4gRGVxdWV1ZSBDb25maWcgUmVnaXN0ZXIgKi8KKwl1aW50MzJfdCBmbXFtX3BuZGM7CisJ LyogICBQb3J0SUQgbiBEZXF1ZXVlIFRvdGFsIEZyYW1lIENvdW50ZXIgKi8KKwl1aW50MzJfdCBm bXFtX3BuZHRmYzsKKwkvKiAgIFBvcnRJRCBuIERlcXVldWUgRlFJRCBmcm9tIERlZmF1bHQgQ291 bnRlciAqLworCXVpbnQzMl90IGZtcW1fcG5kZmRjOworCS8qICAgUG9ydElEIG4gRGVxdWV1ZSBD b25maXJtIENvdW50ZXIgKi8KKwl1aW50MzJfdCBmbXFtX3BuZGNjOworfSBfX2F0dHJpYnV0ZV9f KChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBmbV9wb3J0X3FtaV9yZWdzX3QgeworCS8qICAgUG9y dElEIG4gQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworCXVpbnQzMl90IGZtcW1fcG5jOworCS8q ICAgUG9ydElEIG4gU3RhdHVzIFJlZ2lzdGVyICovCisJdWludDMyX3QgZm1xbV9wbnM7CisJLyog ICBQb3J0SUQgbiBUYXNrIFN0YXR1cyBSZWdpc3RlciAqLworCXVpbnQzMl90IGZtcW1fcG50czsK KwkvKiAgIDB4bjAwQyAtIDB4bjAxQiAqLworCXVpbnQzMl90IHJlc2VydmVkMFs0XTsKKwkvKiAg IFBvcnRJRCBuIEVucXVldWUgTklBIFJlZ2lzdGVyICovCisJdWludDMyX3QgZm1xbV9wbmVuOwor CS8qICAgUG9ydElEIG4gRW5xdWV1ZSBUb3RhbCBGcmFtZSBDb3VudGVyICovCisJdWludDMyX3Qg Zm1xbV9wbmV0ZmM7CisJLyogICBSZWdpc3RlcnMgZm9yIFR4IEhjJk9wIHBvcnRzICovCisJc3Ry dWN0IGZtX3BvcnRfbm9uX3J4X3FtaV9yZWdzX3Qgbm9uX3J4X3FtaV9yZWdzOworfSBfX2F0dHJp YnV0ZV9fKChfX3BhY2tlZF9fKSk7CisKKy8qIFJlZ2lzdGVycyBiaXQgZmllbGRzICovCisKKy8q IEJNSSBkZWZpbmVzICovCisjZGVmaW5lIEJNSV9QT1JUX0NGR19FTiAgICAgICAgICAgICAgICAg ICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIEJNSV9QT1JUX0NGR19GRE9WUiAgICAgICAgICAg ICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIEJNSV9QT1JUX0NGR19JTSAgICAgICAgICAg ICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEJNSV9QT1JUX1NUQVRVU19CU1kgICAg ICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIEJNSV9DT1VOVEVSU19FTiAgICAg ICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisKKyNkZWZpbmUgQk1JX1BPUlRfUkZORV9G UldEX0RDTDRDICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgQk1JX1BPUlRfUkZO RV9GUldEX1JQRCAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgQk1JX1JGTkVf RkRDU19NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4RkYwMDAwMDAKKworI2RlZmluZSBCTUlf Q01EX01SX0xFQUMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBC TUlfQ01EX01SX1NMRUFDICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmlu ZSBCTUlfQ01EX01SX01BICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2Rl ZmluZSBCTUlfQ01EX01SX0RFQVMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAor I2RlZmluZSBCTUlfQ01EX1JYX01SX0RFRglcCisoQk1JX0NNRF9NUl9MRUFDIHwgXAorQk1JX0NN RF9NUl9TTEVBQyB8IFwKK0JNSV9DTURfTVJfTUEgfCBcCitCTUlfQ01EX01SX0RFQVMpCisjZGVm aW5lIEJNSV9DTURfQVRUUl9PUkRFUiAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisj ZGVmaW5lIEJNSV9DTURfQVRUUl9TWU5DICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAw CisjZGVmaW5lIEJNSV9DTURfQVRUUl9NT0RFX01JU1NfQUxJR05fQUREUl9FTiAgIDB4MDAwODAw MDAKKyNkZWZpbmUgQk1JX0NNRF9BVFRSX01BQ0NNRF9NQVNLICAgICAgICAgICAgICAgIDB4MDAw MGZmMDAKKyNkZWZpbmUgQk1JX0NNRF9BVFRSX01BQ0NNRF9PVkVSUklERSAgICAgICAgICAgIDB4 MDAwMDgwMDAKKyNkZWZpbmUgQk1JX0NNRF9BVFRSX01BQ0NNRF9TRUNVUkVEICAgICAgICAgICAg IDB4MDAwMDEwMDAKKyNkZWZpbmUgQk1JX0NNRF9BVFRSX01BQ0NNRF9TQ19NQVNLICAgICAgICAg ICAgIDB4MDAwMDBmMDAKKworI2RlZmluZSBCTUlfRVhUX0JVRl9QT09MX0lEX01BU0sgICAgICAg ICAgICAgICAgMHgwMDNGMDAwMAorI2RlZmluZSBCTUlfU1RBVFVTX1JYX01BU0tfVU5VU0VECVwK Kyh1aW50MzJfdCkofihGTV9QT1JUX0ZSTV9FUlJfRE1BICAgICAgICAgICAgICAgICAgICB8IFwK K0ZNX1BPUlRfRlJNX0VSUl9QSFlTSUNBTCAgICAgICAgICAgICAgIHwgXAorRk1fUE9SVF9GUk1f RVJSX1NJWkUgICAgICAgICAgICAgICAgICAgfCBcCitGTV9QT1JUX0ZSTV9FUlJfQ0xTX0RJU0NB UkQgICAgICAgICAgICB8IFwKK0ZNX1BPUlRfRlJNX0VSUl9FWFRSQUNUSU9OICAgICAgICAgICAg IHwgXAorRk1fUE9SVF9GUk1fRVJSX05PX1NDSEVNRSAgICAgICAgICAgICAgfCBcCitGTV9QT1JU X0ZSTV9FUlJfQ09MT1JfUkVEICAgICAgICAgICAgICB8IFwKK0ZNX1BPUlRfRlJNX0VSUl9DT0xP Ul9ZRUxMT1cgICAgICAgICAgIHwgXAorRk1fUE9SVF9GUk1fRVJSX1BSU19USU1FT1VUICAgICAg ICAgICAgfCBcCitGTV9QT1JUX0ZSTV9FUlJfUFJTX0lMTF9JTlNUUlVDVCAgICAgICB8IFwKK0ZN X1BPUlRfRlJNX0VSUl9CTE9DS19MSU1JVF9FWENFRURFRCAgIHwgXAorRk1fUE9SVF9GUk1fRVJS X1BSU19IRFJfRVJSICAgICAgICAgICAgfCBcCitGTV9QT1JUX0ZSTV9FUlJfSVBSRSAgICAgICAg ICAgICAgICAgICB8IFwKK0ZNX1BPUlRfRlJNX0VSUl9JUFJfTkNTUCAgICAgICAgICAgICAgIHwg XAorRk1fUE9SVF9GUk1fRVJSX0tFWVNJWkVfT1ZFUkZMT1cpKQorCisjZGVmaW5lIEJNSV9TVEFU VVNfT1BfTUFTS19VTlVTRUQJCQlcCisJKHVpbnQzMl90KShCTUlfU1RBVFVTX1JYX01BU0tfVU5V U0VECSYJXAorCQl+KEZNX1BPUlRfRlJNX0VSUl9MRU5HVEgJfAlcCisJCUZNX1BPUlRfRlJNX0VS Ul9OT05fRk0JCXwJXAorCQlGTV9QT1JUX0ZSTV9FUlJfVU5TVVBQT1JURURfRk9STUFUKSkKKwor I2RlZmluZSBCTUlfUlhfRklGT19USFJFU0hPTERfQkMgICAgICAgICAgICAgICAgMHg4MDAwMDAw MAorCisjZGVmaW5lIEJNSV9QUlNfUkVTVUxUX0hJR0ggICAgICAgICAgICAgICAgICAgICAweDAw MDAwMDAwCisjZGVmaW5lIEJNSV9QUlNfUkVTVUxUX0xPVyAgICAgICAgICAgICAgICAgICAgICAw eEZGRkZGRkZGCisKKyNkZWZpbmUgUlhfRVJSU19UT19FTlEJXAorKEZNX1BPUlRfRlJNX0VSUl9E TUEgICAgICAgICAgICAgICAgICAgIHwgXAorRk1fUE9SVF9GUk1fRVJSX1BIWVNJQ0FMICAgICAg ICAgICAgICAgfCBcCitGTV9QT1JUX0ZSTV9FUlJfU0laRSAgICAgICAgICAgICAgICAgICB8IFwK K0ZNX1BPUlRfRlJNX0VSUl9FWFRSQUNUSU9OICAgICAgICAgICAgIHwgXAorRk1fUE9SVF9GUk1f RVJSX05PX1NDSEVNRSAgICAgICAgICAgICAgfCBcCitGTV9QT1JUX0ZSTV9FUlJfUFJTX1RJTUVP VVQgICAgICAgICAgICB8IFwKK0ZNX1BPUlRfRlJNX0VSUl9QUlNfSUxMX0lOU1RSVUNUICAgICAg IHwgXAorRk1fUE9SVF9GUk1fRVJSX0JMT0NLX0xJTUlUX0VYQ0VFREVEICAgfCBcCitGTV9QT1JU X0ZSTV9FUlJfUFJTX0hEUl9FUlIgICAgICAgICAgICB8IFwKK0ZNX1BPUlRfRlJNX0VSUl9LRVlT SVpFX09WRVJGTE9XICAgICAgIHwgXAorRk1fUE9SVF9GUk1fRVJSX0lQUkUpCisKKyNkZWZpbmUg T1BfRVJSU19UT19FTlEJXAorKFJYX0VSUlNfVE9fRU5RICAgICAgICAgICAgICAgICAgICAgICAg IHwgXAorRk1fUE9SVF9GUk1fRVJSX0xFTkdUSCAgICAgICAgICAgICAgICAgfCBcCitGTV9QT1JU X0ZSTV9FUlJfTk9OX0ZNICAgICAgICAgICAgICAgICB8IFwKK0ZNX1BPUlRfRlJNX0VSUl9VTlNV UFBPUlRFRF9GT1JNQVQpCisKKyNkZWZpbmUgQk1JX1JYX0ZJRk9fUFJJX0VMRVZBVElPTl9NQVNL ICAgICAgICAgIDB4MDNGRjAwMDAKKyNkZWZpbmUgQk1JX1JYX0ZJRk9fVEhSRVNIT0xEX01BU0sg ICAgICAgICAgICAgIDB4MDAwMDAzRkYKKyNkZWZpbmUgQk1JX1RYX0ZJRk9fTUlOX0ZJTExfTUFT SyAgICAgICAgICAgICAgIDB4MDNGRjAwMDAKKyNkZWZpbmUgQk1JX0ZJRk9fUElQRUxJTkVfREVQ VEhfTUFTSyAgICAgICAgICAgIDB4MDAwMEYwMDAKKyNkZWZpbmUgQk1JX1RYX0xPV19DT01GX01B U0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzRkYKKworLyogc2hpZnRzICovCisjZGVmaW5l IEJNSV9QT1JUX0NGR19NU19TRUxfU0hJRlQgICAgICAgICAgICAgICAxNgorI2RlZmluZSBCTUlf RE1BX0FUVFJfSUNfQ0FDSEVfU0hJRlQgICAgICAgICAgICAgRk1BTl9TUF9ETUFfQVRUUl9JQ19D QUNIRV9TSElGVAorI2RlZmluZSBCTUlfRE1BX0FUVFJfSERSX0NBQ0hFX1NISUZUICAgICAgICAg ICAgRk1BTl9TUF9ETUFfQVRUUl9IRFJfQ0FDSEVfU0hJRlQKKyNkZWZpbmUgQk1JX0RNQV9BVFRS X1NHX0NBQ0hFX1NISUZUICAgICAgICAgICAgIEZNQU5fU1BfRE1BX0FUVFJfU0dfQ0FDSEVfU0hJ RlQKKworI2RlZmluZSBCTUlfSU1fRk9GX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMjgK KyNkZWZpbmUgQk1JX1BSX1BPUlRJRF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDI0CisKKyNk ZWZpbmUgQk1JX1JYX0ZJRk9fUFJJX0VMRVZBVElPTl9TSElGVCAgICAgICAgIDE2CisjZGVmaW5l IEJNSV9SWF9GSUZPX1RIUkVTSE9MRF9TSElGVCAgICAgICAgICAgICAwCisKKyNkZWZpbmUgQk1J X1JYX0ZSQU1FX0VORF9DU19JR05PUkVfU0hJRlQgICAgICAgIDI0CisjZGVmaW5lIEJNSV9SWF9G UkFNRV9FTkRfQ1VUX1NISUZUICAgICAgICAgICAgICAxNgorCisjZGVmaW5lIEJNSV9JQ19TSVpF X1NISUZUICAgICAgICAgICAgICAgICAgICAgICBGTUFOX1NQX0lDX1NJWkVfU0hJRlQKKworI2Rl ZmluZSBCTUlfSU5UX0JVRl9NQVJHX1NISUZUICAgICAgICAgICAgICAgICAgMjgKKworI2RlZmlu ZSBCTUlfRVhUX0JVRl9NQVJHX0VORF9TSElGVCAgICAgICAgICAgICAgRk1BTl9TUF9FWFRfQlVG X01BUkdfRU5EX1NISUZUCisKKyNkZWZpbmUgQk1JX0NNRF9BVFRSX0NPTE9SX1NISUZUICAgICAg ICAgICAgICAgIDI2CisjZGVmaW5lIEJNSV9DTURfQVRUUl9DT01fTU9ERV9TSElGVCAgICAgICAg ICAgICAxNgorI2RlZmluZSBCTUlfQ01EX0FUVFJfTUFDQ01EX1NISUZUICAgICAgICAgICAgICAg OAorI2RlZmluZSBCTUlfQ01EX0FUVFJfTUFDQ01EX09WRVJSSURFX1NISUZUICAgICAgMTUKKyNk ZWZpbmUgQk1JX0NNRF9BVFRSX01BQ0NNRF9TRUNVUkVEX1NISUZUICAgICAgIDEyCisjZGVmaW5l IEJNSV9DTURfQVRUUl9NQUNDTURfU0NfU0hJRlQgICAgICAgICAgICA4CisKKyNkZWZpbmUgQk1J X1BPT0xfREVQX05VTV9PRl9QT09MU19WRUNUT1JfU0hJRlQgIDI0CisKKyNkZWZpbmUgQk1JX1RY X0ZJRk9fTUlOX0ZJTExfU0hJRlQgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEJNSV9UWF9MT1df Q09NRl9TSElGVCAgICAgICAgICAgICAgICAgICAwCisKKyNkZWZpbmUgQk1JX1BFUkZPUk1BTkNF X1RBU0tfQ09NUF9TSElGVCAgICAgICAgIDI0CisjZGVmaW5lIEJNSV9QRVJGT1JNQU5DRV9QT1JU X0NPTVBfU0hJRlQgICAgICAgICAxNgorI2RlZmluZSBCTUlfUEVSRk9STUFOQ0VfRE1BX0NPTVBf U0hJRlQgICAgICAgICAgMTIKKyNkZWZpbmUgQk1JX1BFUkZPUk1BTkNFX0ZJRk9fQ09NUF9TSElG VCAgICAgICAgIDAKKworI2RlZmluZSBCTUlfTUFYX0JVUlNUX1NISUZUICAgICAgICAgICAgICAg ICAgICAgMTYKKyNkZWZpbmUgQk1JX0NPVU5UX1JBVEVfVU5JVF9TSElGVCAgICAgICAgICAgICAg IDE2CisKKy8qIHNpemVzICovCisjZGVmaW5lIEZSQU1FX0VORF9EQVRBX1NJWkUgICAgICAgICAg ICAgICAgICAgICAxNgorI2RlZmluZSBGUkFNRV9PRkZTRVRfVU5JVFMgICAgICAgICAgICAgICAg ICAgICAgMTYKKyNkZWZpbmUgTUlOX1RYX0lOVF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAg IDE2CisjZGVmaW5lIE1BWF9GUkFNRV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICA2NAor I2RlZmluZSBNQVhfRklGT19QSVBFTElORV9ERVBUSCAgICAgICAgICAgICAgICAgOAorI2RlZmlu ZSBNQVhfUEVSRk9STUFOQ0VfVEFTS19DT01QICAgICAgICAgICAgICAgNjQKKyNkZWZpbmUgTUFY X1BFUkZPUk1BTkNFX1RYX1FVRVVFX0NPTVAgICAgICAgICAgIDgKKyNkZWZpbmUgTUFYX1BFUkZP Uk1BTkNFX1JYX1FVRVVFX0NPTVAgICAgICAgICAgIDY0CisjZGVmaW5lIE1BWF9QRVJGT1JNQU5D RV9ETUFfQ09NUCAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBNQVhfTlVNX09GX1RBU0tTICAg ICAgICAgICAgICAgICAgICAgICAgNjQKKyNkZWZpbmUgTUFYX05VTV9PRl9FWFRSQV9UQVNLUyAg ICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgTUFYX05VTV9PRl9ETUFTICAgICAgICAgICAgICAg ICAgICAgICAgIDE2CisjZGVmaW5lIE1BWF9OVU1fT0ZfRVhUUkFfRE1BUyAgICAgICAgICAgICAg ICAgICA4CisjZGVmaW5lIE1BWF9CVVJTVF9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAx MDI0CisjZGVmaW5lIE1JTl9OVU1fT0ZfT1BfRE1BUyAgICAgICAgICAgICAgICAgICAgICAyCisK Ky8qIFFNSSBkZWZpbmVzICovCisvKiBtYXNrcyAqLworI2RlZmluZSBRTUlfUE9SVF9DRkdfRU4g ICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBRTUlfUE9SVF9DRkdf RU5fQ09VTlRFUlMgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBRTUlfUE9SVF9T VEFUVVNfREVRX1ROVU1fQlNZICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBRTUlfUE9S VF9TVEFUVVNfREVRX0ZEX0JTWSAgICAgICAgICAgICAgMHgyMDAwMDAwMAorCisjZGVmaW5lIFFN SV9ERVFfQ0ZHX1BSRUZFVENIX05PX1ROVU0gICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5l IFFNSV9ERVFfQ0ZHX1BSRUZFVENIX1dBSVRJTkdfVE5VTSAgICAgICAwCisjZGVmaW5lIFFNSV9E RVFfQ0ZHX1BSRUZFVENIXzFfRlJBTUUgICAgICAgICAgICAwCisjZGVmaW5lIFFNSV9ERVFfQ0ZH X1BSRUZFVENIXzNfRlJBTUVTICAgICAgICAgICAweDAxMDAwMDAwCisKKyNkZWZpbmUgUU1JX0RF UV9DRkdfUFJJICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgUU1J X0RFUV9DRkdfVFlQRTEgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUg UU1JX0RFUV9DRkdfVFlQRTIgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZp bmUgUU1JX0RFUV9DRkdfVFlQRTMgICAgICAgICAgICAgICAgICAgICAgIDB4MzAwMDAwMDAKKwor I2RlZmluZSBRTUlfREVRX0NGR19TVUJQT1JUQUxfTUFTSyAgICAgICAgICAgICAgMHgxZgorI2Rl ZmluZSBRTUlfREVRX0NGR19TVUJQT1JUQUxfU0hJRlQgICAgICAgICAgICAgMjAKKworLyogUEFS U0VSIGRlZmluZXMgKi8KKy8qIG1hc2tzICovCisjZGVmaW5lIFBSU19IRFJfRVJST1JfRElTICAg ICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIFBSU19IRFJfU1dfUFJTX0VO ICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIFBSU19DUF9PRkZTRVRf TUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIFBSU19UUElEMV9N QVNLICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lIFBSU19UUElE Ml9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIFBSU19U UElEX0RGTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMDA5MTAwCisKKyNkZWZpbmUg UFJTX0hEUl9NUExTX0xCTF9JTlRFUl9FTiAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZp bmUgUFJTX0hEUl9JUFY2X1JPVVRFX0hEUl9FTiAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNk ZWZpbmUgUFJTX0hEUl9QUFBPRV9NVFVfQ0hFQ0tfRU4gICAgICAgICAgICAgIDB4ODAwMDAwMDAK KyNkZWZpbmUgUFJTX0hEUl9VRFBfUEFEX1JFTU9WQUwgICAgICAgICAgICAgICAgIDB4ODAwMDAw MDAKKyNkZWZpbmUgUFJTX0hEUl9UQ1BfUEFEX1JFTU9WQUwgICAgICAgICAgICAgICAgIDB4ODAw MDAwMDAKKyNkZWZpbmUgUFJTX0NBQ19TVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4 MDAwMDAwMDEKKyNkZWZpbmUgUFJTX0NBQ19BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAg IDB4MDAwMDAxMDAKKworLyogc2hpZnRzICovCisjZGVmaW5lIFBSU19QQ1RQSURfU0hJRlQgICAg ICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBQUlNfSERSX01QTFNfTkVYVF9IRFJfU0hJ RlQgICAgICAgICAgICAgMjIKKyNkZWZpbmUgUFJTX0hEUl9FVEhfQkNfU0hJRlQgICAgICAgICAg ICAgICAgICAgIDI4CisjZGVmaW5lIFBSU19IRFJfRVRIX01DX1NISUZUICAgICAgICAgICAgICAg ICAgICAyNAorI2RlZmluZSBQUlNfSERSX1ZMQU5fU1RBQ0tFRF9TSElGVCAgICAgICAgICAgICAg MTYKKyNkZWZpbmUgUFJTX0hEUl9NUExTX1NUQUNLRURfU0hJRlQgICAgICAgICAgICAgIDE2Cisj ZGVmaW5lIFBSU19IRFJfSVBWNF8xX0JDX1NISUZUICAgICAgICAgICAgICAgICAyOAorI2RlZmlu ZSBQUlNfSERSX0lQVjRfMV9NQ19TSElGVCAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgUFJT X0hEUl9JUFY0XzJfVUNfU0hJRlQgICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIFBSU19IRFJf SVBWNF8yX01DX0JDX1NISUZUICAgICAgICAgICAgICAxNgorI2RlZmluZSBQUlNfSERSX0lQVjZf MV9NQ19TSElGVCAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgUFJTX0hEUl9JUFY2XzJfVUNf U0hJRlQgICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIFBSU19IRFJfSVBWNl8yX01DX1NISUZU ICAgICAgICAgICAgICAgICAxNgorCisjZGVmaW5lIFBSU19IRFJfRVRIX0JDX01BU0sgICAgICAg ICAgICAgICAgICAgICAweDBmZmZmZmZmCisjZGVmaW5lIFBSU19IRFJfRVRIX01DX01BU0sgICAg ICAgICAgICAgICAgICAgICAweGYwZmZmZmZmCisjZGVmaW5lIFBSU19IRFJfVkxBTl9TVEFDS0VE X01BU0sgICAgICAgICAgICAgICAweGZmZjBmZmZmCisjZGVmaW5lIFBSU19IRFJfTVBMU19TVEFD S0VEX01BU0sgICAgICAgICAgICAgICAweGZmZjBmZmZmCisjZGVmaW5lIFBSU19IRFJfSVBWNF8x X0JDX01BU0sgICAgICAgICAgICAgICAgICAweDBmZmZmZmZmCisjZGVmaW5lIFBSU19IRFJfSVBW NF8xX01DX01BU0sgICAgICAgICAgICAgICAgICAweGYwZmZmZmZmCisjZGVmaW5lIFBSU19IRFJf SVBWNF8yX1VDX01BU0sgICAgICAgICAgICAgICAgICAweGZmMGZmZmZmCisjZGVmaW5lIFBSU19I RFJfSVBWNF8yX01DX0JDX01BU0sgICAgICAgICAgICAgICAweGZmZjBmZmZmCisjZGVmaW5lIFBS U19IRFJfSVBWNl8xX01DX01BU0sgICAgICAgICAgICAgICAgICAweGYwZmZmZmZmCisjZGVmaW5l IFBSU19IRFJfSVBWNl8yX1VDX01BU0sgICAgICAgICAgICAgICAgICAweGZmMGZmZmZmCisjZGVm aW5lIFBSU19IRFJfSVBWNl8yX01DX01BU0sgICAgICAgICAgICAgICAgICAweGZmZjBmZmZmCisK Ky8qIG90aGVycyAqLworI2RlZmluZSBQUlNfSERSX0VOVFJZX1NJWkUgICAgICAgICAgICAgICAg ICAgICAgOAorI2RlZmluZSBERUZBVUxUX0NMU19QTEFOX1ZFQ1RPUiAgICAgICAgICAgICAgICAg MHhGRkZGRkZGRgorCisjZGVmaW5lIElQU0VDX1NXX1BBVENIX1NUQVJUICAgICAgICAgICAgICAg ICAgICAweDIwCisjZGVmaW5lIFNDVFBfU1dfUEFUQ0hfU1RBUlQgICAgICAgICAgICAgICAgICAg ICAweDRECisjZGVmaW5lIERDQ1BfU1dfUEFUQ0hfU1RBUlQgICAgICAgICAgICAgICAgICAgICAw eDQxCisKKy8qIEFkZGl0aW9uYWwgZGVmaW5lcyAqLworCitzdHJ1Y3QgZm1fcG9ydF9kcnZfcGFy YW1fdCB7CisJc3RydWN0IGZtYW5fcG9ydF9jZmcgZGZsdF9jZmc7CisJdWludDMyX3QgZGZsdF9m cWlkOworCXVpbnQzMl90IGVycl9mcWlkOworCXVpbnRwdHJfdCBiYXNlX2FkZHI7CisJdWludDhf dCBkZXFfc3ViX3BvcnRhbDsKKwlib29sIGRlcV9oaWdoX3ByaW9yaXR5OworCWVudW0gZm1fcG9y dF9kZXFfdHlwZSBkZXFfdHlwZTsKKwllbnVtIGZtX3BvcnRfZGVxX3ByZWZldGNoX29wdGlvbiBk ZXFfcHJlZmV0Y2hfb3B0aW9uOworCXVpbnQxNl90IGRlcV9ieXRlX2NudDsKKwl1aW50OF90IGNo ZWtzdW1fbGFzdF9ieXRlc19pZ25vcmU7CisJdWludDhfdCBjdXRfYnl0ZXNfZnJvbV9lbmQ7CisJ c3RydWN0IGZtX2J1Zl9wb29sX2RlcGxldGlvbl90IGJ1Zl9wb29sX2RlcGxldGlvbjsKKwlib29s IGZybV9kaXNjYXJkX292ZXJyaWRlOworCWJvb2wgZW5fYnVmX3Bvb2xfZGVwbGV0aW9uOworCXVp bnQxNl90IGxpb2RuX29mZnNldDsKKwl1aW50MTZfdCBsaW9kbl9iYXNlOworCXN0cnVjdCBmbV9l eHRfcG9vbHNfdCBleHRfYnVmX3Bvb2xzOworCWVudW0gZm1fZG1hX3N3YXBfb3B0aW9uIGRtYV9z d2FwX2RhdGE7CisJdWludDMyX3QgdHhfZmlmb19taW5fZmlsbF9sZXZlbDsKKwl1aW50MzJfdCB0 eF9maWZvX2xvd19jb21mX2xldmVsOworCXVpbnQzMl90IHJ4X2ZpZm9fcHJpX2VsZXZhdGlvbl9s ZXZlbDsKKwl1aW50MzJfdCByeF9maWZvX3RocmVzaG9sZDsKKwlzdHJ1Y3QgZm1fc3BfYnVmX21h cmdpbnNfdCBidWZfbWFyZ2luczsKKwlzdHJ1Y3QgZm1fc3BfaW50X2NvbnRleHRfZGF0YV9jb3B5 X3QgaW50X2NvbnRleHQ7CisJYm9vbCBzeW5jX3JlcTsKKwllbnVtIGZtX3BvcnRfY29sb3IgY29s b3I7CisJdWludDMyX3QgZXJyb3JzX3RvX2Rpc2NhcmQ7CisJdWludDMyX3QgZXJyb3JzX3RvX2Vu cTsKKwlib29sIGZvcndhcmRfcmV1c2VfaW50X2NvbnRleHQ7CisJc3RydWN0IGZtX2J1ZmZlcl9w cmVmaXhfY29udGVudF90IGJ1ZmZlcl9wcmVmaXhfY29udGVudDsKKwlzdHJ1Y3QgZm1fYmFja3Vw X2JtX3Bvb2xzX3QgKnBfYmFja3VwX2JtX3Bvb2xzOworCWJvb2wgZG9udF9yZWxlYXNlX2J1ZjsK Kwlib29sIHNldF9udW1fb2ZfdGFza3M7CisJYm9vbCBzZXRfbnVtX29mX29wZW5fZG1hczsKKwli b29sIHNldF9zaXplX29mX2ZpZm87CisKKyNpZmRlZiBGTV9IRUFWWV9UUkFGRklDX0hBTkdfRVJS QVRBX0ZNQU5fQTAwNTY2OQorCWJvb2wgYmNiX3dvcmthcm91bmQ7CisjZW5kaWYgLyogRk1fSEVB VllfVFJBRkZJQ19IQU5HX0VSUkFUQV9GTUFOX0EwMDU2NjkgKi8KK307CisKK3N0cnVjdCBmbV9w b3J0X3J4X3Bvb2xzX3BhcmFtc190IHsKKwl1aW50OF90IG51bV9vZl9wb29sczsKKwl1aW50MTZf dCBzZWNvbmRfbGFyZ2VzdF9idWZfc2l6ZTsKKwl1aW50MTZfdCBsYXJnZXN0X2J1Zl9zaXplOwor fTsKKworc3RydWN0IGZtX3BvcnRfaW50Z190IHsKKwl1aW50MzJfdCBtYXhfcG9ydF9maWZvX3Np emU7CisJdWludDMyX3QgbWF4X251bV9vZl9leHRfcG9vbHM7CisJdWludDMyX3QgZm1fbWF4X251 bV9vZl9zdWJfcG9ydGFsczsKKwl1aW50MzJfdCBibV9tYXhfbnVtX29mX3Bvb2xzOworfTsKKwor LyogTm8gUENEIEVuZ2luZSBpbmRpY2F0ZWQgKi8KKyNkZWZpbmUgRk1fUENEX05PTkUgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAwCitzdHJ1Y3QgZm1fcG9ydF90IHsKKwlzdHJ1Y3Qg Zm1hbl9wb3J0IHBvcnQ7CisJdm9pZCAqaF9mbTsKKwlzdHJ1Y3QgZm1fcmV2aXNpb25faW5mb190 IGZtX3Jldl9pbmZvOworCXVpbnQ4X3QgcG9ydF9pZDsKKwllbnVtIGZtX3BvcnRfdHlwZSBwb3J0 X3R5cGU7CisJZW51bSBmbV9wb3J0X3NwZWVkIHBvcnRfc3BlZWQ7CisJaW50IGVuYWJsZWQ7CisJ Y2hhciBuYW1lW01PRFVMRV9OQU1FX1NJWkVdOworCXVpbnQxNl90IGZtX2Nsa19mcmVxOworCXN0 cnVjdCBmbV9wb3J0X3FtaV9yZWdzX3QgX19pb21lbSAqcF9mbV9wb3J0X3FtaV9yZWdzOworCisJ dW5pb24gZm1fcG9ydF9ibWlfcmVnc191IF9faW9tZW0gKnBfZm1fcG9ydF9ibWlfcmVnczsKKwkv KiBUaGUgb3B0aW9uYWwgZW5naW5lcyBhcmUgZGV2aW5lZCBhdm9iZSAqLworCXVpbnQzMl90IHNh dmVkX2JtaV9uaWE7CisJdWludDhfdCBwcml2YXRlX2luZm87CisJc3RydWN0IGZtX3NwX2J1ZmZl cl9vZmZzZXRzX3QgYnVmZmVyX29mZnNldHM7CisKKwl2b2xhdGlsZSBib29sIGxvY2s7CisJLyog U3BpbmxvY2sgZm9yIHBvcnQgdXNlICovCisJc3BpbmxvY2tfdCAqc3BpbmxvY2s7CisJZm1fcG9y dF9leGNlcHRpb25fY2IgKmZfZXhjZXB0aW9uOworCXZvaWQgKmhfYXBwOworCXVpbnQ4X3QgaW50 ZXJuYWxfYnVmX29mZnNldDsKKwl1aW50MzJfdCBleGNlcHRpb25zOworCWJvb2wgcG9sbGluZzsK KwlzdHJ1Y3QgZm1fZXh0X3Bvb2xzX3QgZXh0X2J1Zl9wb29sczsKKwl1aW50MzJfdCByZXF1aXJl ZF9hY3Rpb247CisJdWludDMyX3Qgc2F2ZWRfcW1pX3BuZW47CisJdWludDMyX3Qgc2F2ZWRfYm1p X2ZlbmU7CisJdWludDMyX3Qgc2F2ZWRfYm1pX2ZwbmU7CisJdWludDMyX3Qgc2F2ZWRfYm1pX2Nt bmU7CisJdWludDMyX3Qgc2F2ZWRfbm9uX3J4X3FtaV9yZWdzX3BuZG47CisJdWludDMyX3Qgb3Jp Z19ub25fcnhfcW1pX3JlZ3NfcG5kbjsKKwlib29sIGluY2x1ZGVfaW5fcHJzX3N0YXRpc3RpY3M7 CisJdWludDE2X3QgbWF4X2ZyYW1lX2xlbmd0aDsKKwl1aW50MzJfdCBvcl9mbWFuX2N0cmw7CisJ c3RydWN0IGZtX3BvcnRfcnNyY190IG9wZW5fZG1hczsKKwlzdHJ1Y3QgZm1fcG9ydF9yc3JjX3Qg dGFza3M7CisJc3RydWN0IGZtX3BvcnRfcnNyY190IGZpZm9fYnVmczsKKwlzdHJ1Y3QgZm1fcG9y dF9yeF9wb29sc19wYXJhbXNfdCByeF9wb29sc19wYXJhbXM7CisKKwlzdHJ1Y3QgZm1fcG9ydF9k cnZfcGFyYW1fdCAqcF9mbV9wb3J0X2Rydl9wYXJhbTsKKworCXN0cnVjdCBmbV9wb3J0X2ludGdf dCAqcG9ydF9pbnRnOworCit9OworCisjZW5kaWYgLyogX19GTV9QT1JUX0ggKi8KLS0gCjEuNy45 LjUKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkxpbnV4 cHBjLWRldiBtYWlsaW5nIGxpc3QKTGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmcKaHR0cHM6 Ly9saXN0cy5vemxhYnMub3JnL2xpc3RpbmZvL2xpbnV4cHBjLWRldg==