[PATCH,RFC] Transparent SuperPage Support for 2.5.44

Naohiko Shimizu (nshimizu@keyaki.cc.u-tokai.ac.jp)
Mon, 28 Oct 2002 10:58:49 +0900


This is a multi-part message in MIME format.

--Multipart_Mon__28_Oct_2002_10:58:49_+0900_08273d60
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit

This is a transparent superpage support patch for 2.5.44.
Big difference between this patch and 2.4.19 patch is
eliminating of automatic dynamic downgrade for superpages.
Instead, I place pagesize adjust routine where required.
I hope this change minimize the overhead for conventional
programs which does not use superpages.

Linux SuperPage patch is transparent for user applications.
It will automatically allocate appropriate size of superpages
if possible.
It does not allocate real strage unless the application
really access that area. And it does not allocate memory
larger than the application requests.

This patch includes i386, alpha, sparc64 ports.
But I could not compile for alpha even with plain 2.5.44, and
I don't have sparc64 to test, then only i386 was tested now.

Any comments will be welcome.

I am not on this list, then please CC me for any comments.

-- 
Naohiko Shimizu
Dept. Communications Engineering/Tokai University
1117 Kitakaname Hiratsuka 259-1292 Japan
TEL.+81-463-58-1211(ext. 4084) FAX.+81-463-58-8320
http://shimizu-lab.dt.u-tokai.ac.jp/

--Multipart_Mon__28_Oct_2002_10:58:49_+0900_08273d60 Content-Type: application/octet-stream; name="super_page-2.5.44_021028.patch" Content-Disposition: attachment; filename="super_page-2.5.44_021028.patch" Content-Transfer-Encoding: base64

ZGlmZiAtdXJOIGxpbnV4LTIuNS40NC9Eb2N1bWVudGF0aW9uL3N1cGVyX3BhZ2UudHh0IGxpbnV4 LTIuNS40NC1zdXBlcnBhZ2UvRG9jdW1lbnRhdGlvbi9zdXBlcl9wYWdlLnR4dAotLS0gbGludXgt Mi41LjQ0L0RvY3VtZW50YXRpb24vc3VwZXJfcGFnZS50eHQJVGh1IEphbiAgMSAwOTowMDowMCAx OTcwCisrKyBsaW51eC0yLjUuNDQtc3VwZXJwYWdlL0RvY3VtZW50YXRpb24vc3VwZXJfcGFnZS50 eHQJU3VuIE9jdCAyNyAxNzoyNjoxNyAyMDAyCkBAIC0wLDAgKzEsNzUgQEAKK1RoZSBzdXBlciBw YWdlIGlzIGEgZmVhdHVyZSB3aGljaCBleHRlbmQgdGhlIFRMQiBjb3ZlcmFnZSBtdWNoIGEgbG90 LgorU29tZSBtb2Rlcm4gcHJvY2Vzc29ycyBoYXZlIHRoaXMgZmVhdHVyZSwgYW5kIExpbnV4IFN1 cGVyIFBhZ2UKK3dpbGwgYWN0aXZhdGUgdGhpcyBmZWF0dXJlIGFuZCByZXN1bHQgaW4gZ2V0dGlu ZyBtb3JlIHBlcmZvcm1hbmNlCitmb3IgdGhlIGV4dGVuc2l2ZWx5IFRMQiBtaXNzaW5nIHByb2dy YW1zLgorRm9yIGV4YW1wbGUgYSBsYXJnZSBtYXRyaXggdHJhbnNwb3plIGJlbmNobWFyayBydW5z IGFib3V0IDQgdGltZXMKK2Zhc3RlciB3aXRoIHN1cGVyIHBhZ2Ugb24gQWxwaGEsIDIgdG8gMyB0 aW1lcyBmYXN0ZXIgb24gVWx0cmFTcGFyY0lJLAorMiB0byA2IHRpbWVzIGZhc3RlciBvbiBQZW50 aXVtNCB0aGFuIHdpdGggbm9ybWFsIGtlcm5lbC4KKworTGludXggU3VwZXIgUGFnZSBpcyB0cmFu c3BhcmVudCBmb3IgdXNlciBhcHBsaWNhdGlvbnMgYW5kIHR1cm5zIG9uCitzdXBlcnBhZ2VzIGZv ciAnYnJrJywgJ2JzcycgYW5kICdhbm9ueW1vdXMgcHJpdmF0ZSBtbWFwJyBhcmVhLgorCitUaGUg Y3VycmVudCB0YXJnZXQgYXJjaGl0ZWN0dXJlcyBvZiB0aGlzIHBhdGNoIGFyZQorMSkgQWxwaGEK KzIpIFNwYXJjNjQKKzMpIGkzODYKKworQnV0IEkgZG9uJ3QgaGF2ZSBhbnkgU3BhcmM2NCBtYWNo aW5lIHRoZW4gaXQgaXMgbm90IHRlc3RlZCBieSBteXNlbGYuCitUaGUgaTM4NiBwb3J0IGlzIHVu ZGVyIHRoZSBkZXZlbG9wbWVudC4KKworVGhlIHN1cGVyIHBhZ2UgcGF0Y2ggcHJvdmlkZXMgc29t ZSBjb252ZW5pZW50IGZlYXR1cmVzLgorCisvcHJvYy9zdXBlcl9wYWdlOiAKKworCWN1cnJlbnQg bnI6IFRoZSBtYXhpbXVtIHN1cGVyIHBhZ2UgaW5kZXguIEFscGhhLFNwYXJjNjQgc3VwcG9ydCAx IAordGhyb3VnaCA0IGFuZCBpMzg2IHN1cHBvcnQgMSBvciAyLgorCWN1cnJlbnQgdm1fYWxpZ246 IFRoZSBjdXJyZW50IHN1cGVyIHBhZ2UgYWxpZ24gZmxhZy4gCisxIG1lYW5zIHRoYXQgYW5vbnlt b3VzIG1tYXAgcmVxdWVzdCB3aWxsIGJlIGFsaWduZWQgdG8gdGhlIAorYXBwcm9wcmlhdGUgc3Vw ZXIgcGFnZSBib3VuZGFyeS4gSXQgd2lsbCBhbGlnbiB0aGUgcmVxdWVzdGVkIAorYXJlYSBvbiB0 aGUgYm91bmRhcnkgb2YgbGFyZ2VzdCBzdXBlcnBhZ2Ugd2l0aGluIHRoZSByZXF1ZXN0ZWQgbGVu Z3RoLgorCWN1cnJlbnQgYml0bWFzazogVGhlIHZhbHVlIG9mIHRoZSBzdXBlciBwYWdlIG9yZGVy IG1hc2suCisJb3JkZXIgcmVzZXJ2ZSAgYWxsb2NhdGUgIGZhaWw6IFRoZSBzdXBlciBwYWdlIG9y ZGVyLCByZXNlcnZhdGlvbiBjb3VudCwKK2FsbG9jYXRpb24gY291bnQgYW5kIGFsbG9jYXRpb24g ZmFpbCBjb3VudCwgcmVzcGVjdGl2ZWx5LgorCitzeXNjdGw6IFByb3ZpZGUgZm9sbG93aW5nIHZh cmlhYmxlcy4KKworb246IE5vbmUgemVybyB2YWx1ZSBtZWFucyB0byB1c2Ugc3VwZXJwYWdlLgor bnI6IFRoZSBtYXhpbXVtIHN1cGVyIHBhZ2UgaW5kZXguCit2bV9hbGlnbjogVGhlIHN1cGVyIHBh Z2UgYWxpZ24gZmxhZy4KK2JpdG1hc2s6IFRoZSBzdXBlciBwYWdlIG9yZGVyIG1hc2suIFRoZSBz dXBlciBwYWdlIGluZGV4IGNvcnJlc3BvbmRpbmcgdG8KK3RoZSAwIHZhbHVlIG9mIHRoZSBtYXNr IHdpbGwgbm90IGJlIHVzZWQuIEl0IHdpbGwgZmFsbCBpbnRvIHRoZSBhdG9taWMgcGFnZS4KK2xv Z3Jlc2V0OiBXaGVuIDEsIHRoZSBhbGxvY2F0aW9uIGNvdW50ZXJzIHdpbGwgYmUgcmVzZXQgYnkg cmVhZGluZyBpdC4KKworQWxwaGEgYXJjaGl0ZWN0dXJlIGRlZmluZXMgR3JhbnVsYXJpdHkgSGlu dChHSCkgYml0cyBpbiB0aGUKK1BhZ2UgVGFibGUgRW50cnkoUFRFKS4gSWYgdGhlc2UgYml0cyBh cmUgc2V0IHRvIG5vbi16ZXJvIHZhbHVlLAoraXQgc3VwcGx5IGEgaGludCB0byB0cmFuc2xhdGlv biBidWZmZXIgaW1wbGVtZW50YXRpb25zIHRoYXQKK2EgYmxvY2sgb2YgcGFnZXMgY2FuIGJlIHRy ZWF0ZWQgYXMgYSBzaW5nbGUgbGFyZ2VyIHBhZ2UuCitTcGFyYzY0IGhhcyBhbG1vc3Qgc2FtZSBm ZWF0dXJlIGluIHRoZSBQVEUgdGhhdCBkZWZpbmVzIHRoZQorcGFnZSBzaXplIHdoaWNoIGlzIG1h cHBlZCBieSB0aGUgUFRFLiBUaGUgcmVzdHJpY3Rpb24gdG8gIHVzZQorYW5kIHRoZSBwYWdlIHNp emUgdmFyaWF0aW9uIGlzIGFsc28gdGhlIHNhbWUgYXMgQWxwaGEuCitYODYgZGVmaW5lcyBQYWdl U2l6ZSBiaXQgaW4gUEdEIG9yIFBNRCBkZXBlbmRpbmcgb24gdGhlIFBBRSBtb2RlLgorV2hlbiBQ UyBiaXQgaXMgb24sIFBHRC9QTUQgcG9pbnRzIHRvIGEgNE1CIHBhZ2UgYW5kIG5vIFBURSB3aWxs CitiZSB1c2VkLgorCitGb3IgdGhlIGxhcmdlIHdvcmtpbmcgc2V0IEhQQyBhcHBsaWNhdGlvbnMg dGhlIHBlcmZvcm1hbmNlCitkZWdyYWRhdGlvbiBjYXVzZWQgYnkgdGhlIHRyYW5zbGF0aW9uIG1p c3NlcyBzaG91bGQgYmUgYXZvaWRlZC4KK1RoZW4gaWYgd2UgY2FuIHVzZSB0aGlzIGZlYXR1cmUs IG1hbnkgSFBDIGFwcGxpY2F0aW9ucyB3aWxsIGJlCithcHByZWNpYXRlZC4KKworVGhlcmUgaXMg YSBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBzdXBwb3J0IHRoaXMKK2ZlYXR1cmUuIFlvdSBjYW4g dHVybiBvbiB0aGlzIGZlYXR1cmUgYnkgYXNzZXJ0Cit0aGUgQ09ORklHX1NVUEVSX1BBR0UgdmFy aWFibGUuIAorV2l0aCB0dXJuaW5nIG9uLCBrZXJuZWwgd2lsbCB1c2UgbWF4aW11bSBzdXBlciBw YWdlIGZvcgorYnNzLCBicmsgb3IgYW5vbnltb3VzIG1tYXAgYXJlYSB0cmFuc3BhcmVudGx5Lgor T24gdGhlIGFkZHJlc3MgYm91bmRhcnkgd2hpY2ggaXMgbm90IGZpdCBmb3IgYW55IG9mCit0aGUg c3VwZXJwYWdlcywga2VybmVsIHdpbGwgdXNlIGF0b21pYyBzaXplIG9mIHBhZ2VzLgorT3Igb24g dGhlIHRhaWwgb2YgdGhlIHJlcXVlc3RlZCBhcmVhLCBpZiB0aGUgcmVxdWVzdAorbGVuZ3RoIGlz IG5vdCBsYXJnZSBlbm91Z2ggZm9yIGFueSBvZiB0aGUgc3VwZXJwYWdlcywKK2tlcm5lbCB3aWxs IGFsc28gdXNlIGF0b21pYyBzaXplIG9mIHBhZ2VzLgorVGhlIGFsbG9jYXRlZCBwYWdlIHNpemUg d2lsbCB2YXJ5IGRlcGVuZGluZyBvbiB0aGUKK3JlcXVlc3RlZCBsZW5ndGggYW5kIGFkZHJlc3Mu IFlvdXIgd29ya2luZyBzZXQKK3dpbGwgYmUgc3RheSBqdXN0IHRoZSBzYW1lIGFzIHRoZSBub3Jt YWwga2VybmVsLgorCitOYW9oaWtvIFNoaW1penU8bnNoaW1penVAa2V5YWtpLmNjLnUtdG9rYWku YWMuanA+CitVUkw6IGh0dHA6Ly9zaGltaXp1LWxhYi5kdC51LXRva2FpLmFjLmpwL2xzcC5odG1s CisKZGlmZiAtdXJOIGxpbnV4LTIuNS40NC9hcmNoL2FscGhhL2NvbmZpZy5pbiBsaW51eC0yLjUu NDQtc3VwZXJwYWdlL2FyY2gvYWxwaGEvY29uZmlnLmluCi0tLSBsaW51eC0yLjUuNDQvYXJjaC9h bHBoYS9jb25maWcuaW4JU2F0IE9jdCAxOSAxMzowMToxOCAyMDAyCisrKyBsaW51eC0yLjUuNDQt c3VwZXJwYWdlL2FyY2gvYWxwaGEvY29uZmlnLmluCVRodSBPY3QgMjQgMTM6NTI6NTMgMjAwMgpA QCAtMjQ2LDYgKzI0Niw4IEBACiAjIExBUkdFX1ZNQUxMT0MgaXMgcmFjeSwgaWYgeW91ICpyZWFs bHkqIG5lZWQgaXQgdGhlbiBmaXggaXQgZmlyc3QKIGRlZmluZV9ib29sIENPTkZJR19BTFBIQV9M QVJHRV9WTUFMTE9DIG4KIAorYm9vbCAnVHJhbnNwYXJlbnQgU3VwZXJQYWdlIFN1cHBvcnQnIENP TkZJR19TVVBFUl9QQUdFCisKIHNvdXJjZSBkcml2ZXJzL3BjaS9Db25maWcuaW4KIAogYm9vbCAn U3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBkZXZpY2VzJyBDT05GSUdfSE9UUExVRwpkaWZmIC11 ck4gbGludXgtMi41LjQ0L2FyY2gvYWxwaGEva2VybmVsL29zZl9zeXMuYyBsaW51eC0yLjUuNDQt c3VwZXJwYWdlL2FyY2gvYWxwaGEva2VybmVsL29zZl9zeXMuYwotLS0gbGludXgtMi41LjQ0L2Fy Y2gvYWxwaGEva2VybmVsL29zZl9zeXMuYwlTYXQgT2N0IDE5IDEzOjAwOjQyIDIwMDIKKysrIGxp bnV4LTIuNS40NC1zdXBlcnBhZ2UvYXJjaC9hbHBoYS9rZXJuZWwvb3NmX3N5cy5jCVRodSBPY3Qg MjQgMTM6NDk6MjEgMjAwMgpAQCAtMTM2MSwxNCArMTM2MSwzMSBAQAogCQkgICAgICAgICB1bnNp Z25lZCBsb25nIGxpbWl0KQogewogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gZmluZF92 bWEoY3VycmVudC0+bW0sIGFkZHIpOworI2lmIENPTkZJR19TVVBFUl9QQUdFCisJZXh0ZXJuIGlu dCBzdXBlcl9wYWdlX3ZtX2FsaWduOworCXVuc2lnbmVkIGxvbmcgc3VwZXJfcGFnZV9tYXNrPTA7 CiAKKwlpZihzdXBlcl9wYWdlX3ZtX2FsaWduJiZhZGRyPT1QQUdFX0FMSUdOKFRBU0tfVU5NQVBQ RURfQkFTRSkpIHsKKwkJaW50IGk7CisJCWZvcihpPXN1cGVyX3BhZ2VfbnItMTsgaT4wOyBpLS0p IHsKKwkJaWYobGVuPihQQUdFX1NJWkUgPDwgc3VwZXJfcGFnZV9vcmRlcltpXSkpIHsKKwkJCXN1 cGVyX3BhZ2VfbWFzayA9IChQQUdFX1NJWkUgPDwgc3VwZXJfcGFnZV9vcmRlcltpXSkgLTE7CisJ CQlicmVhazsKKwkJCX0KKwkJfQorCX0KKyNlbmRpZgogCXdoaWxlICgxKSB7CiAJCS8qIEF0IHRo aXMgcG9pbnQ6ICAoIXZtYSB8fCBhZGRyIDwgdm1hLT52bV9lbmQpLiAqLwogCQlpZiAobGltaXQg LSBsZW4gPCBhZGRyKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJCWlmICghdm1hIHx8IGFkZHIgKyBs ZW4gPD0gdm1hLT52bV9zdGFydCkKIAkJCXJldHVybiBhZGRyOworI2lmIENPTkZJR19TVVBFUl9Q QUdFCisJCWFkZHIgPSAodm1hLT52bV9lbmQgKyBzdXBlcl9wYWdlX21hc2spJn5zdXBlcl9wYWdl X21hc2s7CisjZWxzZQogCQlhZGRyID0gdm1hLT52bV9lbmQ7CisjZW5kaWYKIAkJdm1hID0gdm1h LT52bV9uZXh0OwogCX0KIH0KZGlmZiAtdXJOIGxpbnV4LTIuNS40NC9hcmNoL2FscGhhL21tL2lu aXQuYyBsaW51eC0yLjUuNDQtc3VwZXJwYWdlL2FyY2gvYWxwaGEvbW0vaW5pdC5jCi0tLSBsaW51 eC0yLjUuNDQvYXJjaC9hbHBoYS9tbS9pbml0LmMJU2F0IE9jdCAxOSAxMzowMjozMCAyMDAyCisr KyBsaW51eC0yLjUuNDQtc3VwZXJwYWdlL2FyY2gvYWxwaGEvbW0vaW5pdC5jCVRodSBPY3QgMjQg MTM6NTE6MzggMjAwMgpAQCAtMzQsNiArMzQsMTIgQEAKICNpbmNsdWRlIDxhc20vY29uc29sZS5o PgogI2luY2x1ZGUgPGFzbS90bGIuaD4KIAorI2lmZGVmIENPTkZJR19TVVBFUl9QQUdFCitpbnQg c3VwZXJfcGFnZV9vcmRlcltTVVBFUl9QQUdFX05SXSA9IHswLDMsNiw5fTsKK3BncHJvdF90IHN1 cGVyX3BhZ2VfcHJvdFtTVVBFUl9QQUdFX05SXSA9IAorICB7X19wZ3Byb3QoMHgwMDAwKSxfX3Bn cHJvdCgweDAwMjApLF9fcGdwcm90KDB4MDA0MCksX19wZ3Byb3QoMHgwMDYwKX07CisjZW5kaWYK KwogbW11X2dhdGhlcl90IG1tdV9nYXRoZXJzW05SX0NQVVNdOwogCiBleHRlcm4gdm9pZCBkaWVf aWZfa2VybmVsKGNoYXIgKixzdHJ1Y3QgcHRfcmVncyAqLGxvbmcpOwpkaWZmIC11ck4gbGludXgt Mi41LjQ0L2FyY2gvaTM4Ni9jb25maWcuaW4gbGludXgtMi41LjQ0LXN1cGVycGFnZS9hcmNoL2kz ODYvY29uZmlnLmluCi0tLSBsaW51eC0yLjUuNDQvYXJjaC9pMzg2L2NvbmZpZy5pbglTYXQgT2N0 IDE5IDEzOjAxOjIxIDIwMDIKKysrIGxpbnV4LTIuNS40NC1zdXBlcnBhZ2UvYXJjaC9pMzg2L2Nv bmZpZy5pbglTdW4gT2N0IDI3IDE4OjIwOjE2IDIwMDIKQEAgLTIzNCw2ICsyMzQsMTQgQEAKICAg IGRlZmluZV9ib29sIENPTkZJR19YODZfUEFFIHkKIGZpCiAKK2Jvb2wgJ1RyYW5zcGFyZW50IFN1 cGVyUGFnZSBTdXBwb3J0JyBDT05GSUdfU1VQRVJfUEFHRQoraWYgWyAiJENPTkZJR19TVVBFUl9Q QUdFIiA9ICJ5IiBdOyB0aGVuCisgICBkZWZpbmVfaW50ICBDT05GSUdfRk9SQ0VfTUFYX1pPTkVP UkRFUiAxMQorICBpZiBbICIkQ09ORklHX01LNyIgPSAieSIgXTsgdGhlbgorICAgICBib29sICdB dGhsb24gNE1CIFRMQiBCVUcgd29ya2Fyb3VuZCcgQ09ORklHX1g4Nl9LN19JTlZMUEdfQlVHCisg IGZpCitmaQorCiBpZiBbICIkQ09ORklHX0hJR0hNRU00RyIgPSAieSIgLW8gIiRDT05GSUdfSElH SE1FTTY0RyIgPSAieSIgXTsgdGhlbgogICAgYm9vbCAnQWxsb2NhdGUgM3JkLWxldmVsIHBhZ2V0 YWJsZXMgZnJvbSBoaWdobWVtJyBDT05GSUdfSElHSFBURQogZmkKZGlmZiAtdXJOIGxpbnV4LTIu NS40NC9hcmNoL2kzODYva2VybmVsL2hlYWQuUyBsaW51eC0yLjUuNDQtc3VwZXJwYWdlL2FyY2gv aTM4Ni9rZXJuZWwvaGVhZC5TCi0tLSBsaW51eC0yLjUuNDQvYXJjaC9pMzg2L2tlcm5lbC9oZWFk LlMJU2F0IE9jdCAxOSAxMzowMToxMCAyMDAyCisrKyBsaW51eC0yLjUuNDQtc3VwZXJwYWdlL2Fy Y2gvaTM4Ni9rZXJuZWwvaGVhZC5TCVN1biBPY3QgMjcgMTc6MTk6MjIgMjAwMgpAQCAtOTMsNyAr OTMsMTEgQEAKICAqIEVuYWJsZSBwYWdpbmcKICAqLwogMzoKKyNpZiBDT05GSUdfU1VQRVJfUEFH RQorCW1vdmwgJHN3YXBwZXJfdGxiX2Rpci1fX1BBR0VfT0ZGU0VULCVlYXgKKyNlbHNlCiAJbW92 bCAkc3dhcHBlcl9wZ19kaXItX19QQUdFX09GRlNFVCwlZWF4CisjZW5kaWYKIAltb3ZsICVlYXgs JWNyMwkJLyogc2V0IHRoZSBwYWdlIHRhYmxlIHBvaW50ZXIuLiAqLwogCW1vdmwgJWNyMCwlZWF4 CiAJb3JsICQweDgwMDAwMDAwLCVlYXgKQEAgLTM2Myw2ICszNjcsMjcgQEAKICAqLwogLm9yZyAw eDEwMDAKIEVOVFJZKHN3YXBwZXJfcGdfZGlyKQorI2lmIENPTkZJR19TVVBFUl9QQUdFCisgICAg ICAgLmxvbmcgMHgwMDEwMzAwNworICAgICAgIC5sb25nIDB4MDAxMDQwMDcKKyAgICAgICAuZmls bCBCT09UX1VTRVJfUEdEX1BUUlMtMiw0LDAKKyAgICAgICAvKiBkZWZhdWx0OiA3NjYgZW50cmll cyAqLworICAgICAgIC5sb25nIDB4MDAxMDMwMDcKKyAgICAgICAubG9uZyAweDAwMTA0MDA3Cisg ICAgICAgLyogZGVmYXVsdDogMjU0IGVudHJpZXMgKi8KKyAgICAgICAuZmlsbCBCT09UX0tFUk5F TF9QR0RfUFRSUy0yLDQsMAorLyogd2UgY29weSB0aGUgdGFibGUgZm9yIHRoZSB0bGIgKi8KK3N3 YXBwZXJfdGxiX2RpcjoKKyAgICAgICAubG9uZyAweDAwMTAzMDA3CisgICAgICAgLmxvbmcgMHgw MDEwNDAwNworICAgICAgIC5maWxsIEJPT1RfVVNFUl9QR0RfUFRSUy0yLDQsMAorICAgICAgIC8q IGRlZmF1bHQ6IDc2NiBlbnRyaWVzICovCisgICAgICAgLmxvbmcgMHgwMDEwMzAwNworICAgICAg IC5sb25nIDB4MDAxMDQwMDcKKyAgICAgICAvKiBkZWZhdWx0OiAyNTQgZW50cmllcyAqLworICAg ICAgIC5maWxsIEJPT1RfS0VSTkVMX1BHRF9QVFJTLTIsNCwwCisjZGVmaW5lIFNVUEVSX09GRlNF VCArMHgxMDAwCisjZWxzZQogCS5sb25nIDB4MDAxMDIwMDcKIAkubG9uZyAweDAwMTAzMDA3CiAJ LmZpbGwgQk9PVF9VU0VSX1BHRF9QVFJTLTIsNCwwCkBAIC0zNzEsMTUgKzM5NiwxNyBAQAogCS5s b25nIDB4MDAxMDMwMDcKIAkvKiBkZWZhdWx0OiAyNTQgZW50cmllcyAqLwogCS5maWxsIEJPT1Rf S0VSTkVMX1BHRF9QVFJTLTIsNCwwCisjZGVmaW5lIFNVUEVSX09GRlNFVAorI2VuZGlmCiAKIC8q CiAgKiBUaGUgcGFnZSB0YWJsZXMgYXJlIGluaXRpYWxpemVkIHRvIG9ubHkgOE1CIGhlcmUgLSB0 aGUgZmluYWwgcGFnZQogICogdGFibGVzIGFyZSBzZXQgdXAgbGF0ZXIgZGVwZW5kaW5nIG9uIG1l bW9yeSBzaXplLgogICovCi0ub3JnIDB4MjAwMAorLm9yZyAweDIwMDAgU1VQRVJfT0ZGU0VUCiBF TlRSWShwZzApCiAKLS5vcmcgMHgzMDAwCisub3JnIDB4MzAwMCBTVVBFUl9PRkZTRVQKIEVOVFJZ KHBnMSkKIAogLyoKQEAgLTM4NywxMCArNDE0LDEwIEBACiAgKiBpbml0aWFsaXphdGlvbiBsb29w IGNvdW50cyB1bnRpbCBlbXB0eV96ZXJvX3BhZ2UpCiAgKi8KIAotLm9yZyAweDQwMDAKKy5vcmcg MHg0MDAwIFNVUEVSX09GRlNFVAogRU5UUlkoZW1wdHlfemVyb19wYWdlKQogCi0ub3JnIDB4NTAw MAorLm9yZyAweDUwMDAgU1VQRVJfT0ZGU0VUCiAKIC8qCiAgKiBSZWFsIGJlZ2lubmluZyBvZiBu b3JtYWwgInRleHQiIHNlZ21lbnQKZGlmZiAtdXJOIGxpbnV4LTIuNS40NC9hcmNoL2kzODYvbW0v ZmF1bHQuYyBsaW51eC0yLjUuNDQtc3VwZXJwYWdlL2FyY2gvaTM4Ni9tbS9mYXVsdC5jCi0tLSBs aW51eC0yLjUuNDQvYXJjaC9pMzg2L21tL2ZhdWx0LmMJU2F0IE9jdCAxOSAxMzowMDo0MiAyMDAy CisrKyBsaW51eC0yLjUuNDQtc3VwZXJwYWdlL2FyY2gvaTM4Ni9tbS9mYXVsdC5jCVRodSBPY3Qg MjQgMTQ6MDE6NDYgMjAwMgpAQCAtMzkyLDcgKzM5MiwxMSBAQAogCQlwdGVfdCAqcHRlX2s7CiAK IAkJYXNtKCJtb3ZsICUlY3IzLCUwIjoiPXIiIChwZ2QpKTsKKyNpZiBDT05GSUdfU1VQRVJfUEFH RQorCQlwZ2QgPSBvZmZzZXQgKyAocGdkX3QgKilfX3ZhKHBnZCkgLSBQVFJTX1BFUl9QR0Q7Cisj ZWxzZQogCQlwZ2QgPSBvZmZzZXQgKyAocGdkX3QgKilfX3ZhKHBnZCk7CisjZW5kaWYKIAkJcGdk X2sgPSBpbml0X21tLnBnZCArIG9mZnNldDsKIAogCQlpZiAoIXBnZF9wcmVzZW50KCpwZ2Rfaykp CmRpZmYgLXVyTiBsaW51eC0yLjUuNDQvYXJjaC9pMzg2L21tL2luaXQuYyBsaW51eC0yLjUuNDQt c3VwZXJwYWdlL2FyY2gvaTM4Ni9tbS9pbml0LmMKLS0tIGxpbnV4LTIuNS40NC9hcmNoL2kzODYv bW0vaW5pdC5jCVNhdCBPY3QgMTkgMTM6MDI6MjcgMjAwMgorKysgbGludXgtMi41LjQ0LXN1cGVy cGFnZS9hcmNoL2kzODYvbW0vaW5pdC5jCVN1biBPY3QgMjcgMTg6MTM6MDcgMjAwMgpAQCAtNDIs NiArNDIsMTQgQEAKIAogbW11X2dhdGhlcl90IG1tdV9nYXRoZXJzW05SX0NQVVNdOwogdW5zaWdu ZWQgbG9uZyBoaWdoc3RhcnRfcGZuLCBoaWdoZW5kX3BmbjsKKyNpZiBDT05GSUdfU1VQRVJfUEFH RQorI2lmIENPTkZJR19YODZfUEFFCitpbnQgc3VwZXJfcGFnZV9vcmRlcltTVVBFUl9QQUdFX05S XSA9IHswLDl9OworI2Vsc2UKK2ludCBzdXBlcl9wYWdlX29yZGVyW1NVUEVSX1BBR0VfTlJdID0g ezAsMTB9OworI2VuZGlmCitwZ3Byb3RfdCBzdXBlcl9wYWdlX3Byb3RbU1VQRVJfUEFHRV9OUl0g PSB7X19wZ3Byb3QoMCksX19wZ3Byb3QoX1BBR0VfU1VQRVIpfTsKKyNlbmRpZgogCiAvKgogICog Q3JlYXRlcyBhIG1pZGRsZSBwYWdlIHRhYmxlIGFuZCBwdXRzIGEgcG9pbnRlciB0byBpdCBpbiB0 aGUKQEAgLTM1Miw3ICszNjAsMTEgQEAKIHsKIAlwYWdldGFibGVfaW5pdCgpOwogCisjaWYgQ09O RklHX1NVUEVSX1BBR0UKKwlsb2FkX2NyMyhzd2FwcGVyX3BnX2RpcitQVFJTX1BFUl9QR0QpOyAg CisjZWxzZQogCWxvYWRfY3IzKHN3YXBwZXJfcGdfZGlyKTsKKyNlbmRpZgogCiAjaWYgQ09ORklH X1g4Nl9QQUUKIAkvKgpAQCAtNTQyLDggKzU1NCwxNCBAQAogICAgICAgICAvKgogICAgICAgICAg KiBQQUUgcGdkcyBtdXN0IGJlIDE2LWJ5dGUgYWxpZ25lZDoKICAgICAgICAgICovCisjaWYgQ09O RklHX1NVUEVSX1BBR0UKKwlwYWVfcGdkX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJwYWVf cGdkIiwKKwkJUFRSX1BFUl9QR0Qqc2l6ZW9mKHBnZF90KSoyLCAwLAorCQlTTEFCX0hXQ0FDSEVf QUxJR04gfCBTTEFCX01VU1RfSFdDQUNIRV9BTElHTiwgTlVMTCwgTlVMTCk7CisjZWxzZQogICAg ICAgICBwYWVfcGdkX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJwYWVfcGdkIiwgMzIsIDAs CiAgICAgICAgICAgICAgICAgU0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9NVVNUX0hXQ0FDSEVf QUxJR04sIE5VTEwsIE5VTEwpOworI2VuZGlmCiAgICAgICAgIGlmICghcGFlX3BnZF9jYWNoZXAp CiAgICAgICAgICAgICAgICAgcGFuaWMoImluaXRfcGFlKCk6IENhbm5vdCBhbGxvYyBwYWVfcGdk IFNMQUIgY2FjaGUiKTsKIH0KZGlmZiAtdXJOIGxpbnV4LTIuNS40NC9hcmNoL2kzODYvbW0vcGd0 YWJsZS5jIGxpbnV4LTIuNS40NC1zdXBlcnBhZ2UvYXJjaC9pMzg2L21tL3BndGFibGUuYwotLS0g bGludXgtMi41LjQ0L2FyY2gvaTM4Ni9tbS9wZ3RhYmxlLmMJU2F0IE9jdCAxOSAxMzowMjo1OSAy MDAyCisrKyBsaW51eC0yLjUuNDQtc3VwZXJwYWdlL2FyY2gvaTM4Ni9tbS9wZ3RhYmxlLmMJU3Vu IE9jdCAyNyAyMjoxMjoxNCAyMDAyCkBAIC0xNzUsMjAgKzE3NSw0MSBAQAogCiAJaWYgKHBnZCkg ewogCQlmb3IgKGkgPSAwOyBpIDwgVVNFUl9QVFJTX1BFUl9QR0Q7IGkrKykgeworI2lmIENPTkZJ R19TVVBFUl9QQUdFCisJCQl1bnNpZ25lZCBsb25nIHBtZCA9IF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQ X0tFUk5FTCwxKTsKKwkJCWlmICghcG1kKQorCQkJCWdvdG8gb3V0X29vbTsKKwkJCWNsZWFyX3Bh Z2UocG1kICsgKFBUUlNfUEVSX1BNRCpzaXplb2YocG1kX3QpKSk7CisjZWxzZQogCQkJdW5zaWdu ZWQgbG9uZyBwbWQgPSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJCQlpZiAoIXBtZCkK IAkJCQlnb3RvIG91dF9vb207CisjZW5kaWYKIAkJCWNsZWFyX3BhZ2UocG1kKTsKIAkJCXNldF9w Z2QocGdkICsgaSwgX19wZ2QoMSArIF9fcGEocG1kKSkpOworI2lmIENPTkZJR19TVVBFUl9QQUdF CisJCQlzZXRfcGdkX3JhdyhwZ2QgKyBpICsgUFRSU19QRVJfUEdELAorCQkJX19wZ2QoMSArIF9f cGEocG1kICsgKFBUUlNfUEVSX1BNRCpzaXplb2YocG1kX3QpKSkpKTsKKyNlbmRpZgorCiAJCX0K IAkJbWVtY3B5KHBnZCArIFVTRVJfUFRSU19QRVJfUEdELAogCQkJc3dhcHBlcl9wZ19kaXIgKyBV U0VSX1BUUlNfUEVSX1BHRCwKIAkJCShQVFJTX1BFUl9QR0QgLSBVU0VSX1BUUlNfUEVSX1BHRCkg KiBzaXplb2YocGdkX3QpKTsKKyNpZiBDT05GSUdfU1VQRVJfUEFHRQorCQltZW1jcHkocGdkICsg UFRSU19QRVJfUEdEICsgVVNFUl9QVFJTX1BFUl9QR0QsCisJCQlzd2FwcGVyX3BnX2RpciArIFVT RVJfUFRSU19QRVJfUEdELAorCQkJKFBUUlNfUEVSX1BHRCAtIFVTRVJfUFRSU19QRVJfUEdEKSAq IHNpemVvZihwZ2RfdCkpOworI2VuZGlmCiAJfQogCXJldHVybiBwZ2Q7CiBvdXRfb29tOgogCWZv ciAoaS0tOyBpID49IDA7IGktLSkKKyNpZiBDT05GSUdfU1VQRVJfUEFHRQorCQlmcmVlX3BhZ2Vz KCh1bnNpZ25lZCBsb25nKV9fdmEocGdkX3ZhbChwZ2RbaV0pLTEpLCAxKTsKKyNlbHNlCiAJCWZy ZWVfcGFnZSgodW5zaWduZWQgbG9uZylfX3ZhKHBnZF92YWwocGdkW2ldKS0xKSk7CisjZW5kaWYK IAlrbWVtX2NhY2hlX2ZyZWUocGFlX3BnZF9jYWNoZXAsIHBnZCk7CiAJcmV0dXJuIE5VTEw7CiB9 CkBAIC0xOTgsNyArMjE5LDExIEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgVVNFUl9Q VFJTX1BFUl9QR0Q7IGkrKykKKyNpZiBDT05GSUdfU1VQRVJfUEFHRQorCQlmcmVlX3BhZ2VzKCh1 bnNpZ25lZCBsb25nKV9fdmEocGdkX3ZhbChwZ2RbaV0pLTEpLCAxKTsKKyNlbHNlCiAJCWZyZWVf cGFnZSgodW5zaWduZWQgbG9uZylfX3ZhKHBnZF92YWwocGdkW2ldKS0xKSk7CisjZW5kaWYKIAlr bWVtX2NhY2hlX2ZyZWUocGFlX3BnZF9jYWNoZXAsIHBnZCk7CiB9CiAKQEAgLTIwNiw2ICsyMzEs MjEgQEAKIAogcGdkX3QgKnBnZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKKyNpZiBD T05GSUdfU1VQRVJfUEFHRQorCXBnZF90ICpwZ2QgPSAocGdkX3QgKilfX2dldF9mcmVlX3BhZ2Vz KEdGUF9LRVJORUwsMSk7CisKKwlpZiAocGdkKSB7CisJCW1lbXNldChwZ2QsIDAsIFVTRVJfUFRS U19QRVJfUEdEICogc2l6ZW9mKHBnZF90KSk7CisJCW1lbWNweShwZ2QgKyBVU0VSX1BUUlNfUEVS X1BHRCwKKwkJCXN3YXBwZXJfcGdfZGlyICsgVVNFUl9QVFJTX1BFUl9QR0QsCisJCQkoUFRSU19Q RVJfUEdEIC0gVVNFUl9QVFJTX1BFUl9QR0QpICogc2l6ZW9mKHBnZF90KSk7CisJCW1lbXNldChw Z2QgKyBQVFJTX1BFUl9QR0QsCisJCQkwLCBVU0VSX1BUUlNfUEVSX1BHRCAqIHNpemVvZihwZ2Rf dCkpOworCQltZW1jcHkocGdkICsgUFRSU19QRVJfUEdEICsgVVNFUl9QVFJTX1BFUl9QR0QsCisJ CQlzd2FwcGVyX3BnX2RpciArIFVTRVJfUFRSU19QRVJfUEdELAorCQkJKFBUUlNfUEVSX1BHRCAt IFVTRVJfUFRSU19QRVJfUEdEKSAqIHNpemVvZihwZ2RfdCkpOworCX0KKyNlbHNlCiAJcGdkX3Qg KnBnZCA9IChwZ2RfdCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKIAogCWlmIChwZ2Qp IHsKQEAgLTIxNCwxMiArMjU0LDE3IEBACiAJCQlzd2FwcGVyX3BnX2RpciArIFVTRVJfUFRSU19Q RVJfUEdELAogCQkJKFBUUlNfUEVSX1BHRCAtIFVTRVJfUFRSU19QRVJfUEdEKSAqIHNpemVvZihw Z2RfdCkpOwogCX0KKyNlbmRpZgogCXJldHVybiBwZ2Q7CiB9CiAKIHZvaWQgcGdkX2ZyZWUocGdk X3QgKnBnZCkKIHsKKyNpZiBDT05GSUdfU1VQRVJfUEFHRQorCWZyZWVfcGFnZXMoKHVuc2lnbmVk IGxvbmcpcGdkLCAxKTsKKyNlbHNlCiAJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBnZCk7Cisj ZW5kaWYKIH0KIAogI2VuZGlmIC8qIENPTkZJR19YODZfUEFFICovCmRpZmYgLXVyTiBsaW51eC0y LjUuNDQvYXJjaC9zcGFyYzY0L2NvbmZpZy5pbiBsaW51eC0yLjUuNDQtc3VwZXJwYWdlL2FyY2gv c3BhcmM2NC9jb25maWcuaW4KLS0tIGxpbnV4LTIuNS40NC9hcmNoL3NwYXJjNjQvY29uZmlnLmlu CVNhdCBPY3QgMTkgMTM6MDE6MjAgMjAwMgorKysgbGludXgtMi41LjQ0LXN1cGVycGFnZS9hcmNo L3NwYXJjNjQvY29uZmlnLmluCVRodSBPY3QgMjQgMTQ6MDc6MzcgMjAwMgpAQCAtMjcsNiArMjcs OCBAQAogIyBJZGVudGlmeSB0aGlzIGFzIGEgU3BhcmM2NCBidWlsZAogZGVmaW5lX2Jvb2wgQ09O RklHX1NQQVJDNjQgeQogCitib29sICdUcmFuc3BhcmVudCBTdXBlclBhZ2UgU3VwcG9ydCcgQ09O RklHX1NVUEVSX1BBR0UKKwogYm9vbCAnU3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBkZXZpY2Vz JyBDT05GSUdfSE9UUExVRwogCiAjIEdsb2JhbCB0aGluZ3MgYWNyb3NzIGFsbCBTdW4gbWFjaGlu ZXMuCmRpZmYgLXVyTiBsaW51eC0yLjUuNDQvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXNfc3BhcmMu YyBsaW51eC0yLjUuNDQtc3VwZXJwYWdlL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzX3NwYXJjLmMK LS0tIGxpbnV4LTIuNS40NC9hcmNoL3NwYXJjNjQva2VybmVsL3N5c19zcGFyYy5jCVNhdCBPY3Qg MTkgMTM6MDE6NTcgMjAwMgorKysgbGludXgtMi41LjQ0LXN1cGVycGFnZS9hcmNoL3NwYXJjNjQv a2VybmVsL3N5c19zcGFyYy5jCVRodSBPY3QgMjQgMTQ6MTQ6MjMgMjAwMgpAQCAtNDQsMTEgKzQ0 LDE2IEBACiAJKCgoKGFkZHIpK1NITUxCQS0xKSZ+KFNITUxCQS0xKSkgKwlcCiAJICgoKHBnb2Zm KTw8UEFHRV9TSElGVCkgJiAoU0hNTEJBLTEpKSkKIAorCiB1bnNpZ25lZCBsb25nIGFyY2hfZ2V0 X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5z aWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3Mp CiB7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1tOwogCXVuc2lnbmVkIGxvbmcgdGFza19z aXplID0gVEFTS19TSVpFOwogCWludCBkb19jb2xvcl9hbGlnbjsKKyNpZiBDT05GSUdfU1VQRVJf UEFHRQorCWV4dGVybiBpbnQgc3VwZXJfcGFnZV92bV9hbGlnbjsKKwl1bnNpZ25lZCBsb25nIHN1 cGVyX3BhZ2VfbWFzaz0wOworI2VuZGlmCiAKIAlpZiAoZmxhZ3MgJiBNQVBfRklYRUQpIHsKIAkJ LyogV2UgZG8gbm90IGFjY2VwdCBhIHNoYXJlZCBtYXBwaW5nIGlmIGl0IHdvdWxkIHZpb2xhdGUK QEAgLTYzLDggKzY4LDIwIEBACiAJCXRhc2tfc2l6ZSA9IDB4ZjAwMDAwMDBVTDsKIAlpZiAobGVu ID4gdGFza19zaXplIHx8IGxlbiA+IC1QQUdFX09GRlNFVCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0J aWYgKCFhZGRyKQorCWlmICghYWRkcikgewogCQlhZGRyID0gVEFTS19VTk1BUFBFRF9CQVNFOwor I2lmIENPTkZJR19TVVBFUl9QQUdFCisJCWlmKHN1cGVyX3BhZ2Vfdm1fYWxpZ24pIHsKKwkJCWlu dCBpOworCQkJZm9yKGk9c3VwZXJfcGFnZV9uci0xOyBpPjA7IGktLSkgeworCQkJCWlmKGxlbj4o UEFHRV9TSVpFIDw8IHN1cGVyX3BhZ2Vfb3JkZXJbaV0pKSB7CisJCQkJCXN1cGVyX3BhZ2VfbWFz ayA9IChQQUdFX1NJWkUgPDwgc3VwZXJfcGFnZV9vcmRlcltpXSktMTsKKwkJCQkJYnJlYWs7CisJ CQkJfQorCQkJfQorCQl9CisjZW5kaWYKKwl9CiAKIAlkb19jb2xvcl9hbGlnbiA9IDA7CiAJaWYg KGZpbHAgfHwgKGZsYWdzICYgTUFQX1NIQVJFRCkpCkBAIC04OSw2ICsxMDYsMTAgQEAKIAkJYWRk ciA9IHZtbS0+dm1fZW5kOwogCQlpZiAoZG9fY29sb3JfYWxpZ24pCiAJCQlhZGRyID0gQ09MT1VS X0FMSUdOKGFkZHIsIHBnb2ZmKTsKKyNpZiBDT05GSUdfU1VQRVJfUEFHRQorCQllbHNlCisJCQlh ZGRyID0gKGFkZHIgKyBzdXBlcl9wYWdlX21hc2spJn5zdXBlcl9wYWdlX21hc2s7CisjZW5kaWYK IAl9CiB9CiAKZGlmZiAtdXJOIGxpbnV4LTIuNS40NC9hcmNoL3NwYXJjNjQvbW0vaW5pdC5jIGxp bnV4LTIuNS40NC1zdXBlcnBhZ2UvYXJjaC9zcGFyYzY0L21tL2luaXQuYwotLS0gbGludXgtMi41 LjQ0L2FyY2gvc3BhcmM2NC9tbS9pbml0LmMJU2F0IE9jdCAxOSAxMzowMTo0OCAyMDAyCisrKyBs aW51eC0yLjUuNDQtc3VwZXJwYWdlL2FyY2gvc3BhcmM2NC9tbS9pbml0LmMJVGh1IE9jdCAyNCAx NDoyMzo0MiAyMDAyCkBAIC0xMTQxLDYgKzExNDEsMTIgQEAKICNpZm5kZWYgQ09ORklHX1NNUAog c3RydWN0IHBndGFibGVfY2FjaGVfc3RydWN0IHBndF9xdWlja2xpc3RzOwogI2VuZGlmCisjaWZk ZWYgQ09ORklHX1NVUEVSX1BBR0UKK2ludCBzdXBlcl9wYWdlX29yZGVyW1NVUEVSX1BBR0VfTlJd ID0gezAsMyw2LDl9OworcGdwcm90X3Qgc3VwZXJfcGFnZV9wcm90W1NVUEVSX1BBR0VfTlJdID0g CisJe19fcGdwcm90KF9QQUdFX1NaOEspLF9fcGdwcm90KF9QQUdFX1NaNjRLKSwKKwlfX3BncHJv dChfUEFHRV9TWjUxMkspLF9fcGdwcm90KF9QQUdFX1NaNE1CKX07CisjZW5kaWYKIAogLyogT0ss IHdlIGhhdmUgdG8gY29sb3IgdGhlc2UgcGFnZXMuIFRoZSBwYWdlIHRhYmxlcyBhcmUgYWNjZXNz ZWQKICAqIGJ5IG5vbi1EY2FjaGUgZW5hYmxlZCBtYXBwaW5nIGluIHRoZSBWUFRFIGFyZWEgYnkg dGhlIGR0bGJfYmFja2VuZC5TCmRpZmYgLXVyTiBsaW51eC0yLjUuNDQvaW5jbHVkZS9hc20tYWxw aGEvcGd0YWJsZS5oIGxpbnV4LTIuNS40NC1zdXBlcnBhZ2UvaW5jbHVkZS9hc20tYWxwaGEvcGd0 YWJsZS5oCi0tLSBsaW51eC0yLjUuNDQvaW5jbHVkZS9hc20tYWxwaGEvcGd0YWJsZS5oCVNhdCBP Y3QgMTkgMTM6MDE6MTkgMjAwMgorKysgbGludXgtMi41LjQ0LXN1cGVycGFnZS9pbmNsdWRlL2Fz bS1hbHBoYS9wZ3RhYmxlLmgJU3VuIE9jdCAyNyAxNzozMDo0MyAyMDAyCkBAIC0yNTcsOSArMjU3 LDcgQEAKIGV4dGVybiBpbmxpbmUgdW5zaWduZWQgbG9uZyBwZ2RfcGFnZShwZ2RfdCBwZ2QpCiB7 IHJldHVybiBQQUdFX09GRlNFVCArICgocGdkX3ZhbChwZ2QpICYgX1BGTl9NQVNLKSA+PiAoMzIt UEFHRV9TSElGVCkpOyB9CiAKLWV4dGVybiBpbmxpbmUgaW50IHB0ZV9ub25lKHB0ZV90IHB0ZSkJ CXsgcmV0dXJuICFwdGVfdmFsKHB0ZSk7IH0KIGV4dGVybiBpbmxpbmUgaW50IHB0ZV9wcmVzZW50 KHB0ZV90IHB0ZSkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfVkFMSUQ7IH0KLWV4dGVy biBpbmxpbmUgdm9pZCBwdGVfY2xlYXIocHRlX3QgKnB0ZXApCXsgcHRlX3ZhbCgqcHRlcCkgPSAw OyB9CiAKIGV4dGVybiBpbmxpbmUgaW50IHBtZF9ub25lKHBtZF90IHBtZCkJCXsgcmV0dXJuICFw bWRfdmFsKHBtZCk7IH0KIGV4dGVybiBpbmxpbmUgaW50IHBtZF9iYWQocG1kX3QgcG1kKQkJeyBy ZXR1cm4gKHBtZF92YWwocG1kKSAmIH5fUEZOX01BU0spICE9IF9QQUdFX1RBQkxFOyB9CkBAIC0y NzEsNiArMjY5LDMwIEBACiBleHRlcm4gaW5saW5lIGludCBwZ2RfcHJlc2VudChwZ2RfdCBwZ2Qp CXsgcmV0dXJuIHBnZF92YWwocGdkKSAmIF9QQUdFX1ZBTElEOyB9CiBleHRlcm4gaW5saW5lIHZv aWQgcGdkX2NsZWFyKHBnZF90ICogcGdkcCkJeyBwZ2RfdmFsKCpwZ2RwKSA9IDA7IH0KIAorI2lm IENPTkZJR19TVVBFUl9QQUdFCisjZGVmaW5lIGNsZWFyX3BtZF9zcChwbWQpIGRvIHt9IHdoaWxl KDApCisjZGVmaW5lIHN1cGVyX3BhZ2VfcG9wdWxhdGUobW0sIGFkciwgcGFnZSwgcHJvdCwgaW5k ZXgpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBTVVBFUl9QQUdFX01BU0sgMHgwMDYwCisjZGVm aW5lIFNVUEVSX1BBR0VfTUFTS19TSElGVCA1CisjZGVmaW5lIFNVUEVSX1BBR0VfTlIgNAorI2Rl ZmluZSBTSVpFT0ZfUFRFX0xPRzIgU0VaRU9GX1BUUl9MT0cyCit2b2lkIGRvd25fcHRlX3NwKHB0 ZV90ICpwdGVwdHIsIGludCBpbmRleCk7Cit2b2lkIGNsZWFyX3B0ZV9zcChwdGVfdCAqcHRlcHRy LCBpbnQgaW5kZXgpOworZXh0ZXJuIGludCBzdXBlcl9wYWdlX29yZGVyW107CitleHRlcm4gcGdw cm90X3Qgc3VwZXJfcGFnZV9wcm90W107CitleHRlcm4gaW5saW5lIGludCBwdGVfbm9uZShwdGVf dCBwdGUpXAorCXsgcmV0dXJuICEocHRlX3ZhbChwdGUpICYgflNVUEVSX1BBR0VfTUFTSyk7IH0K KyNkZWZpbmUgcHRlX3RvX3NwX2luZGV4KHgpXAorCSgocHRlX3ZhbCh4KSAmIFNVUEVSX1BBR0Vf TUFTSykgPj4gU1VQRVJfUEFHRV9NQVNLX1NISUZUKQorZXh0ZXJuIGlubGluZSBwdGVfdCBta19w dGVfc3BfY2xlYW4ocHRlX3QgcHRlKQlcCisJe3B0ZV92YWwocHRlKSAmPSB+U1VQRVJfUEFHRV9N QVNLOyByZXR1cm4gcHRlO30gCitleHRlcm4gaW5saW5lIHZvaWQgcHRlX2NsZWFyKHB0ZV90ICpw dGVwKQlcCisJeyBwdGVfdCBwdGU7IHB0ZV92YWwocHRlKT0wOyBzZXRfcHRlKHB0ZXAsIHB0ZSk7 IH0KKyNlbHNlCitleHRlcm4gaW5saW5lIGludCBwdGVfbm9uZShwdGVfdCBwdGUpICAgICAgICAg IHsgcmV0dXJuICEocHRlX3ZhbChwdGUpKTsgfQorZXh0ZXJuIGlubGluZSB2b2lkIHB0ZV9jbGVh cihwdGVfdCAqcHRlcCkgICAgICB7IHB0ZV92YWwoKnB0ZXApPTA7IH0KKyNlbmRpZgorCiAvKgog ICogVGhlIGZvbGxvd2luZyBvbmx5IHdvcmsgaWYgcHRlX3ByZXNlbnQoKSBpcyB0cnVlLgogICog VW5kZWZpbmVkIGJlaGF2aW91ciBpZiBub3QuLgpkaWZmIC11ck4gbGludXgtMi41LjQ0L2luY2x1 ZGUvYXNtLWkzODYvY3B1ZmVhdHVyZS5oIGxpbnV4LTIuNS40NC1zdXBlcnBhZ2UvaW5jbHVkZS9h c20taTM4Ni9jcHVmZWF0dXJlLmgKLS0tIGxpbnV4LTIuNS40NC9pbmNsdWRlL2FzbS1pMzg2L2Nw dWZlYXR1cmUuaAlTYXQgT2N0IDE5IDEzOjAxOjE3IDIwMDIKKysrIGxpbnV4LTIuNS40NC1zdXBl cnBhZ2UvaW5jbHVkZS9hc20taTM4Ni9jcHVmZWF0dXJlLmgJVGh1IE9jdCAyNCAxNzozNDozNCAy MDAyCkBAIC02OSw3ICs2OSw3IEBACiAjZGVmaW5lIGNwdV9oYXNfZnB1CQlib290X2NwdV9oYXMo WDg2X0ZFQVRVUkVfRlBVKQogI2RlZmluZSBjcHVfaGFzX3ZtZQkJYm9vdF9jcHVfaGFzKFg4Nl9G RUFUVVJFX1ZNRSkKICNkZWZpbmUgY3B1X2hhc19kZQkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJF X0RFKQotI2RlZmluZSBjcHVfaGFzX3BzZQkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1BTRSkK KyNkZWZpbmUgY3B1X2hhc19wc2UJCShib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfUFNFKXxib290 X2NwdV9oYXMoWDg2X0ZFQVRVUkVfUFNFMzYpKQogI2RlZmluZSBjcHVfaGFzX3RzYwkJYm9vdF9j cHVfaGFzKFg4Nl9GRUFUVVJFX1RTQykKICNkZWZpbmUgY3B1X2hhc19wYWUJCWJvb3RfY3B1X2hh cyhYODZfRkVBVFVSRV9QQUUpCiAjZGVmaW5lIGNwdV9oYXNfcGdlCQlib290X2NwdV9oYXMoWDg2 X0ZFQVRVUkVfUEdFKQpkaWZmIC11ck4gbGludXgtMi41LjQ0L2luY2x1ZGUvYXNtLWkzODYvbW11 X2NvbnRleHQuaCBsaW51eC0yLjUuNDQtc3VwZXJwYWdlL2luY2x1ZGUvYXNtLWkzODYvbW11X2Nv bnRleHQuaAotLS0gbGludXgtMi41LjQ0L2luY2x1ZGUvYXNtLWkzODYvbW11X2NvbnRleHQuaAlT YXQgT2N0IDE5IDEzOjAwOjQyIDIwMDIKKysrIGxpbnV4LTIuNS40NC1zdXBlcnBhZ2UvaW5jbHVk ZS9hc20taTM4Ni9tbXVfY29udGV4dC5oCVRodSBPY3QgMjQgMTQ6NTE6MDYgMjAwMgpAQCAtMzgs NyArMzgsMTEgQEAKIAkJc2V0X2JpdChjcHUsICZuZXh0LT5jcHVfdm1fbWFzayk7CiAKIAkJLyog UmUtbG9hZCBwYWdlIHRhYmxlcyAqLworI2lmIENPTkZJR19TVVBFUl9QQUdFCisJCWxvYWRfY3Iz KG5leHQtPnBnZCtQVFJTX1BFUl9QR0QpOworI2Vsc2UKIAkJbG9hZF9jcjMobmV4dC0+cGdkKTsK KyNlbmRpZgogCiAJCS8qCiAJCSAqIGxvYWQgdGhlIExEVCwgaWYgdGhlIExEVCBpcyBkaWZmZXJl bnQ6CkBAIC01NSw3ICs1OSwxMSBAQAogCQkJLyogV2Ugd2VyZSBpbiBsYXp5IHRsYiBtb2RlIGFu ZCBsZWF2ZV9tbSBkaXNhYmxlZCAKIAkJCSAqIHRsYiBmbHVzaCBJUEkgZGVsaXZlcnkuIFdlIG11 c3QgcmVsb2FkICVjcjMuCiAJCQkgKi8KKyNpZiBDT05GSUdfU1VQRVJfUEFHRQorCQkJbG9hZF9j cjMobmV4dC0+cGdkK1BUUlNfUEVSX1BHRCk7CisjZWxzZQogCQkJbG9hZF9jcjMobmV4dC0+cGdk KTsKKyNlbmRpZgogCQkJbG9hZF9MRFRfbm9sb2NrKCZuZXh0LT5jb250ZXh0LCBjcHUpOwogCQl9 CiAJfQpkaWZmIC11ck4gbGludXgtMi41LjQ0L2luY2x1ZGUvYXNtLWkzODYvcGdhbGxvYy5oIGxp bnV4LTIuNS40NC1zdXBlcnBhZ2UvaW5jbHVkZS9hc20taTM4Ni9wZ2FsbG9jLmgKLS0tIGxpbnV4 LTIuNS40NC9pbmNsdWRlL2FzbS1pMzg2L3BnYWxsb2MuaAlTYXQgT2N0IDE5IDEzOjAxOjA5IDIw MDIKKysrIGxpbnV4LTIuNS40NC1zdXBlcnBhZ2UvaW5jbHVkZS9hc20taTM4Ni9wZ2FsbG9jLmgJ VGh1IE9jdCAyNCAxNTowOToyMSAyMDAyCkBAIC0xMCw2ICsxMCwyNiBAQAogI2RlZmluZSBwbWRf cG9wdWxhdGVfa2VybmVsKG1tLCBwbWQsIHB0ZSkgXAogCQlzZXRfcG1kKHBtZCwgX19wbWQoX1BB R0VfVEFCTEUgKyBfX3BhKHB0ZSkpKQogCisjaWYgQ09ORklHX1NVUEVSX1BBR0UKK3N0YXRpYyBp bmxpbmUgdm9pZCBzdXBlcl9wYWdlX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNp Z25lZCBsb25nIGFkZHJlc3MsIHN0cnVjdCBwYWdlICpwYWdlLCBwZ3Byb3RfdCBwcm90LCBpbnQg c3BpbmRleCkgeworCXBnZF90ICpwZ2Q7CisJcG1kX3QgKnBtZDsKKwl1bmlvbiB7CisJCXBtZF90 IGVudHJ5OworCQlwdGVfdCBwdGVfZW50cnk7CisJfSB4OworCXBnZCA9IHBnZF9vZmZzZXQobW0s IGFkZHJlc3MpOworCXBtZCA9IHBtZF9vZmZzZXQocGdkLCBhZGRyZXNzKTsKKwl4LnB0ZV9lbnRy eSA9IG1rX3B0ZShwYWdlLCBfX3BncHJvdChwZ3Byb3RfdmFsKHByb3QpfF9QQUdFX1BTRSkpIDsK Kwl4LnB0ZV9lbnRyeSA9IHB0ZV9ta3dyaXRlKHB0ZV9ta2RpcnR5KHgucHRlX2VudHJ5KSk7Cisj aWYgZGVmaW5lZCAoQ09ORklHX1g4Nl9QQUUpCisJc2V0X3BtZF9yYXcocG1kICsgUFRSU19QRVJf UE1ELCB4LmVudHJ5KTsKKyNlbHNlCisJc2V0X3BtZF9yYXcocG1kICsgUFRSU19QRVJfUEdELCB4 LmVudHJ5KTsKKyNlbmRpZgorfQorI2VuZGlmCisKIHN0YXRpYyBpbmxpbmUgdm9pZCBwbWRfcG9w dWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsIHN0cnVjdCBwYWdlICpwdGUp CiB7CiAJc2V0X3BtZChwbWQsIF9fcG1kKF9QQUdFX1RBQkxFICsKZGlmZiAtdXJOIGxpbnV4LTIu NS40NC9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUtMmxldmVsLmggbGludXgtMi41LjQ0LXN1cGVy cGFnZS9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUtMmxldmVsLmgKLS0tIGxpbnV4LTIuNS40NC9p bmNsdWRlL2FzbS1pMzg2L3BndGFibGUtMmxldmVsLmgJU2F0IE9jdCAxOSAxMzowMTo1NiAyMDAy CisrKyBsaW51eC0yLjUuNDQtc3VwZXJwYWdlL2luY2x1ZGUvYXNtLWkzODYvcGd0YWJsZS0ybGV2 ZWwuaAlUaHUgT2N0IDI0IDE3OjMwOjE3IDIwMDIKQEAgLTQ1LDggKzQ1LDIxIEBACiAgKiAocG1k cyBhcmUgZm9sZGVkIGludG8gcGdkcyBzbyB0aGlzIGRvZXNudCBnZXQgYWN0dWFsbHkgY2FsbGVk LAogICogYnV0IHRoZSBkZWZpbmUgaXMgbmVlZGVkIGZvciBhIGdlbmVyaWMgaW5saW5lIGZ1bmN0 aW9uLikKICAqLworI2lmIENPTkZJR19TVVBFUl9QQUdFCisjZGVmaW5lIHNldF9wbWRfcmF3KHBt ZHB0ciwgcG1kdmFsKSAoKihwbWRwdHIpID0gcG1kdmFsKQorI2RlZmluZSBzZXRfcGdkX3Jhdyhw Z2RwdHIsIHBnZHZhbCkgKCoocGdkcHRyKSA9IHBnZHZhbCkKKyNkZWZpbmUgc2V0X3BtZChwbWRw dHIsIHBtZHZhbCkgZG8ge1wKKwlzZXRfcG1kX3JhdyhwbWRwdHIsIHBtZHZhbCk7XAorCXNldF9w bWRfcmF3KHBtZHB0citQVFJTX1BFUl9QR0QsIHBtZHZhbCk7XAorCX0gd2hpbGUgKDApCisjZGVm aW5lIHNldF9wZ2QocGdkcHRyLCBwZ2R2YWwpIGRvIHtcCisJc2V0X3BnZF9yYXcocGdkcHRyLCBw Z2R2YWwpO1wKKwlzZXRfcGdkX3JhdyhwZ2RwdHIrUFRSU19QRVJfUEdELCBwZ2R2YWwpO1wKKwl9 IHdoaWxlICgwKQorI2Vsc2UKICNkZWZpbmUgc2V0X3BtZChwbWRwdHIsIHBtZHZhbCkgKCoocG1k cHRyKSA9IHBtZHZhbCkKICNkZWZpbmUgc2V0X3BnZChwZ2RwdHIsIHBnZHZhbCkgKCoocGdkcHRy KSA9IHBnZHZhbCkKKyNlbmRpZgogCiAjZGVmaW5lIHBnZF9wYWdlKHBnZCkgXAogKCh1bnNpZ25l ZCBsb25nKSBfX3ZhKHBnZF92YWwocGdkKSAmIFBBR0VfTUFTSykpCkBAIC01OCw3ICs3MSwxMSBA QAogI2RlZmluZSBwdGVwX2dldF9hbmRfY2xlYXIoeHApCV9fcHRlKHhjaGcoJih4cCktPnB0ZV9s b3csIDApKQogI2RlZmluZSBwdGVfc2FtZShhLCBiKQkJKChhKS5wdGVfbG93ID09IChiKS5wdGVf bG93KQogI2RlZmluZSBwdGVfcGFnZSh4KQkJcGZuX3RvX3BhZ2UocHRlX3Bmbih4KSkKKyNpZiBD T05GSUdfU1VQRVJfUEFHRQorI2RlZmluZSBwdGVfbm9uZSh4KQkJKCEoKHgpLnB0ZV9sb3cmflNV UEVSX1BBR0VfTUFTSykpCisjZWxzZQogI2RlZmluZSBwdGVfbm9uZSh4KQkJKCEoeCkucHRlX2xv dykKKyNlbmRpZgogI2RlZmluZSBwdGVfcGZuKHgpCQkoKHVuc2lnbmVkIGxvbmcpKCgoeCkucHRl X2xvdyA+PiBQQUdFX1NISUZUKSkpCiAjZGVmaW5lIHBmbl9wdGUocGZuLCBwcm90KQlfX3B0ZSgo KHBmbikgPDwgUEFHRV9TSElGVCkgfCBwZ3Byb3RfdmFsKHByb3QpKQogI2RlZmluZSBwZm5fcG1k KHBmbiwgcHJvdCkJX19wbWQoKChwZm4pIDw8IFBBR0VfU0hJRlQpIHwgcGdwcm90X3ZhbChwcm90 KSkKZGlmZiAtdXJOIGxpbnV4LTIuNS40NC9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUtM2xldmVs LmggbGludXgtMi41LjQ0LXN1cGVycGFnZS9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUtM2xldmVs LmgKLS0tIGxpbnV4LTIuNS40NC9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUtM2xldmVsLmgJU2F0 IE9jdCAxOSAxMzowMjoyOCAyMDAyCisrKyBsaW51eC0yLjUuNDQtc3VwZXJwYWdlL2luY2x1ZGUv YXNtLWkzODYvcGd0YWJsZS0zbGV2ZWwuaAlUaHUgT2N0IDI0IDE3OjI5OjUyIDIwMDIKQEAgLTUx LDExICs1MSwyNiBAQAogfQogI2RlZmluZSBzZXRfcHRlX2F0b21pYyhwdGVwdHIscHRldmFsKSBc CiAJCXNldF82NGJpdCgodW5zaWduZWQgbG9uZyBsb25nICopKHB0ZXB0cikscHRlX3ZhbChwdGV2 YWwpKQorI2lmIENPTkZJR19TVVBFUl9QQUdFCisjZGVmaW5lIHNldF9wZ2RfcmF3KHBnZHB0cixw Z2R2YWwpIFwKKwlzZXRfNjRiaXQoKHVuc2lnbmVkIGxvbmcgbG9uZyAqKShwZ2RwdHIpLHBnZF92 YWwocGdkdmFsKSkKKyNkZWZpbmUgc2V0X3BtZF9yYXcocG1kcHRyLHBtZHZhbCkgXAorCXNldF82 NGJpdCgodW5zaWduZWQgbG9uZyBsb25nICopKHBtZHB0cikscG1kX3ZhbChwbWR2YWwpKQorI2Rl ZmluZSBzZXRfcG1kKHBtZHB0cixwbWR2YWwpIGRvIHtcCisJc2V0X3BtZF9yYXcocG1kcHRyLHBt ZHZhbCk7XAorCXNldF9wbWRfcmF3KHBtZHB0citQVFJTX1BFUl9QTUQscG1kdmFsKTtcCisJfSB3 aGlsZSgwKQorI2RlZmluZSBzZXRfcGdkKHBnZHB0cixwZ2R2YWwpIGRvIHtcCisJc2V0X3BnZF9y YXcocGdkcHRyLHBnZHZhbCk7XAorCXNldF9wZ2RfcmF3KHBnZHB0citQVFJTX1BFUl9QR0QscGdk dmFsKTtcCisJfSB3aGlsZSgwKQorI2Vsc2UKICNkZWZpbmUgc2V0X3BtZChwbWRwdHIscG1kdmFs KSBcCiAJCXNldF82NGJpdCgodW5zaWduZWQgbG9uZyBsb25nICopKHBtZHB0cikscG1kX3ZhbChw bWR2YWwpKQogI2RlZmluZSBzZXRfcGdkKHBnZHB0cixwZ2R2YWwpIFwKIAkJc2V0XzY0Yml0KCh1 bnNpZ25lZCBsb25nIGxvbmcgKikocGdkcHRyKSxwZ2RfdmFsKHBnZHZhbCkpCiAKKyNlbmRpZgog LyoKICAqIFBlbnRpdW0tSUkgZXJyYXR1bSBBMTM6IGluIFBBRSBtb2RlIHdlIGV4cGxpY2l0bHkg aGF2ZSB0byBmbHVzaAogICogdGhlIFRMQiB2aWEgY3IzIGlmIHRoZSB0b3AtbGV2ZWwgcGdkIGlz IGNoYW5nZWQuLi4KQEAgLTg5LDcgKzEwNCwxMSBAQAogfQogCiAjZGVmaW5lIHB0ZV9wYWdlKHgp CXBmbl90b19wYWdlKHB0ZV9wZm4oeCkpCisjaWYgQ09ORklHX1NVUEVSX1BBR0UKKyNkZWZpbmUg cHRlX25vbmUoeCkJKCEoKHgpLnB0ZV9sb3cmflNVUEVSX1BBR0VfTUFTSykgJiYgISh4KS5wdGVf aGlnaCkKKyNlbHNlCiAjZGVmaW5lIHB0ZV9ub25lKHgpCSghKHgpLnB0ZV9sb3cgJiYgISh4KS5w dGVfaGlnaCkKKyNlbmRpZgogI2RlZmluZSBwdGVfcGZuKHgpCSgoKHgpLnB0ZV9sb3cgPj4gUEFH RV9TSElGVCkgfCAoKHgpLnB0ZV9oaWdoIDw8ICgzMiAtIFBBR0VfU0hJRlQpKSkKIAogc3RhdGlj IGlubGluZSBwdGVfdCBwZm5fcHRlKHVuc2lnbmVkIGxvbmcgcGFnZV9uciwgcGdwcm90X3QgcGdw cm90KQpkaWZmIC11ck4gbGludXgtMi41LjQ0L2luY2x1ZGUvYXNtLWkzODYvcGd0YWJsZS5oIGxp bnV4LTIuNS40NC1zdXBlcnBhZ2UvaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLmgKLS0tIGxpbnV4 LTIuNS40NC9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUuaAlTYXQgT2N0IDE5IDEzOjAyOjI3IDIw MDIKKysrIGxpbnV4LTIuNS40NC1zdXBlcnBhZ2UvaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLmgJ U3VuIE9jdCAyNyAxMzo1OTowNCAyMDAyCkBAIC0xMjAsNiArMTIwLDEyIEBACiAjZGVmaW5lIF9Q QUdFX0RJUlRZCTB4MDQwCiAjZGVmaW5lIF9QQUdFX1BTRQkweDA4MAkvKiA0IE1CIChvciAyTUIp IHBhZ2UsIFBlbnRpdW0rLCBpZiBwcmVzZW50Li4gKi8KICNkZWZpbmUgX1BBR0VfR0xPQkFMCTB4 MTAwCS8qIEdsb2JhbCBUTEIgZW50cnkgUFBybysgKi8KKyNpZiBDT05GSUdfU1VQRVJfUEFHRQor I2RlZmluZSBfUEFHRV9TVVBFUgkweDIwMCAgIC8qIFN1cGVyUGFnZSBjYW5kaWRhdGVkIHBhZ2Ug Ki8KKyNkZWZpbmUgU1VQRVJfUEFHRV9NQVNLCV9QQUdFX1NVUEVSCisjZGVmaW5lIFNVUEVSX1BB R0VfTUFTS19TSElGVAk5CisjZGVmaW5lIFNVUEVSX1BBR0VfTlIJMgorI2VuZGlmCiAKICNkZWZp bmUgX1BBR0VfUFJPVE5PTkUJMHgwODAJLyogSWYgbm90IHByZXNlbnQgKi8KIApAQCAtMjE1LDYg KzIyMSwyNyBAQAogc3RhdGljIGlubGluZSB2b2lkIHB0ZXBfc2V0X3dycHJvdGVjdChwdGVfdCAq cHRlcCkJCXsgY2xlYXJfYml0KF9QQUdFX0JJVF9SVywgJnB0ZXAtPnB0ZV9sb3cpOyB9CiBzdGF0 aWMgaW5saW5lIHZvaWQgcHRlcF9ta2RpcnR5KHB0ZV90ICpwdGVwKQkJCXsgc2V0X2JpdChfUEFH RV9CSVRfRElSVFksICZwdGVwLT5wdGVfbG93KTsgfQogCisjaWYgQ09ORklHX1NVUEVSX1BBR0UK K2V4dGVybiBwZ3Byb3RfdCBzdXBlcl9wYWdlX3Byb3RbXTsKK2V4dGVybiBpbnQgc3VwZXJfcGFn ZV9vcmRlcltdOworI2RlZmluZSBwdGVfdG9fc3BfaW5kZXgoeCkgICgoKHgpLnB0ZV9sb3cgJiBT VVBFUl9QQUdFX01BU0spID4+IFNVUEVSX1BBR0VfTUFTS19TSElGVCkKK3N0YXRpYyBpbmxpbmUg cHRlX3QgbWtfcHRlX3NwX2NsZWFuKHB0ZV90IHB0ZSkKKwl7KHB0ZSkucHRlX2xvdyAmPSB+U1VQ RVJfUEFHRV9NQVNLOyByZXR1cm4gcHRlO30gCisjaWYgQ09ORklHX1g4Nl9QQUUKKyNkZWZpbmUg U0laRU9GX1BURV9MT0cyIDMKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9wbWRfc3AocG1kX3Qg KnBtZCkgeworCXNldF9wbWRfcmF3KChwbWQrUFRSU19QRVJfUE1EKSwgKnBtZCk7Cit9CisjZWxz ZQorI2RlZmluZSBTSVpFT0ZfUFRFX0xPRzIgMgorc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3Bt ZF9zcChwbWRfdCAqcG1kKSB7CisJc2V0X3BtZF9yYXcoKHBtZCtQVFJTX1BFUl9QR0QpLCAqcG1k KTsKK30KKyNlbmRpZiAKK3ZvaWQgZG93bl9wdGVfc3AocHRlX3QgKnB0ZXB0ciwgaW50IGluZGV4 KTsKK3ZvaWQgY2xlYXJfcHRlX3NwKHB0ZV90ICpwdGVwdHIsIGludCBpbmRleCk7CisjZGVmaW5l IHNldF9wdGVfcmF3KHB0ZXB0ciwgcHRldmFsKSBzZXRfcHRlKHB0ZXB0ciwgcHRldmFsKSAKKyNl bmRpZgogLyoKICAqIENvbnZlcnNpb24gZnVuY3Rpb25zOiBjb252ZXJ0IGEgcGFnZSBhbmQgcHJv dGVjdGlvbiB0byBhIHBhZ2UgZW50cnksCiAgKiBhbmQgYSBwYWdlIGVudHJ5IGFuZCBwYWdlIGRp cmVjdG9yeSB0byB0aGUgcGFnZSB0aGV5IHJlZmVyIHRvLgpAQCAtMjk1LDggKzMyMiwxMyBAQAog CiAvKiBFbmNvZGUgYW5kIGRlLWNvZGUgYSBzd2FwIGVudHJ5ICovCiAjZGVmaW5lIF9fc3dwX3R5 cGUoeCkJCQkoKCh4KS52YWwgPj4gMSkgJiAweDNmKQorI2lmIENPTkZJR19TVVBFUl9QQUdFCisj ZGVmaW5lIF9fc3dwX29mZnNldCh4KQkJCSgoeCkudmFsID4+IDEwKQorI2RlZmluZSBfX3N3cF9l bnRyeSh0eXBlLCBvZmZzZXQpCSgoc3dwX2VudHJ5X3QpIHsgKCh0eXBlKSA8PCAxKSB8ICgob2Zm c2V0KSA8PCAxMCkgfSkKKyNlbHNlCiAjZGVmaW5lIF9fc3dwX29mZnNldCh4KQkJCSgoeCkudmFs ID4+IDgpCiAjZGVmaW5lIF9fc3dwX2VudHJ5KHR5cGUsIG9mZnNldCkJKChzd3BfZW50cnlfdCkg eyAoKHR5cGUpIDw8IDEpIHwgKChvZmZzZXQpIDw8IDgpIH0pCisjZW5kaWYKICNkZWZpbmUgX19w dGVfdG9fc3dwX2VudHJ5KHB0ZSkJCSgoc3dwX2VudHJ5X3QpIHsgKHB0ZSkucHRlX2xvdyB9KQog I2RlZmluZSBfX3N3cF9lbnRyeV90b19wdGUoeCkJCSgocHRlX3QpIHsgKHgpLnZhbCB9KQogCmRp ZmYgLXVyTiBsaW51eC0yLjUuNDQvaW5jbHVkZS9hc20taTM4Ni90bGJmbHVzaC5oIGxpbnV4LTIu NS40NC1zdXBlcnBhZ2UvaW5jbHVkZS9hc20taTM4Ni90bGJmbHVzaC5oCi0tLSBsaW51eC0yLjUu NDQvaW5jbHVkZS9hc20taTM4Ni90bGJmbHVzaC5oCVNhdCBPY3QgMTkgMTM6MDE6NTIgMjAwMgor KysgbGludXgtMi41LjQ0LXN1cGVycGFnZS9pbmNsdWRlL2FzbS1pMzg2L3RsYmZsdXNoLmgJVGh1 IE9jdCAyNCAxNjo1MDoxOSAyMDAyCkBAIC01MCw2ICs1MCw5IEBACiAjZGVmaW5lIF9fZmx1c2hf dGxiX3NpbmdsZShhZGRyKSBcCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oImludmxwZyAlMCI6IDoi bSIgKCooY2hhciAqKSBhZGRyKSkKIAorI2lmIENPTkZJR19YODZfSzdfSU5WTFBHX0JVRworI2Rl ZmluZSBfX2ZsdXNoX3RsYl9vbmUoYWRkcikgX19mbHVzaF90bGIoKQorI2Vsc2UKICNpZmRlZiBD T05GSUdfWDg2X0lOVkxQRwogIyBkZWZpbmUgX19mbHVzaF90bGJfb25lKGFkZHIpIF9fZmx1c2hf dGxiX3NpbmdsZShhZGRyKQogI2Vsc2UKQEAgLTYxLDYgKzY0LDcgQEAKIAkJCV9fZmx1c2hfdGxi KCk7CQkJCQlcCiAJfSB3aGlsZSAoMCkKICNlbmRpZgorI2VuZGlmCiAKIC8qCiAgKiBUTEIgZmx1 c2hpbmc6CmRpZmYgLXVyTiBsaW51eC0yLjUuNDQvaW5jbHVkZS9hc20tc3BhcmM2NC9wZ3RhYmxl LmggbGludXgtMi41LjQ0LXN1cGVycGFnZS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BndGFibGUuaAot LS0gbGludXgtMi41LjQ0L2luY2x1ZGUvYXNtLXNwYXJjNjQvcGd0YWJsZS5oCVNhdCBPY3QgMTkg MTM6MDE6MDggMjAwMgorKysgbGludXgtMi41LjQ0LXN1cGVycGFnZS9pbmNsdWRlL2FzbS1zcGFy YzY0L3BndGFibGUuaAlTdW4gT2N0IDI3IDEzOjI4OjQ2IDIwMDIKQEAgLTU0LDYgKzU0LDkgQEAK ICNkZWZpbmUgUE1EX1NJWkUJKDFVTCA8PCBQTURfU0hJRlQpCiAjZGVmaW5lIFBNRF9NQVNLCSh+ KFBNRF9TSVpFLTEpKQogI2RlZmluZSBQTURfQklUUwkxMQorI2lmIENPTkZJR19TVVBFUl9QQUdF CisjZGVmaW5lIFNJWkVPRl9QVEVfTE9HMiAzCisjZW5kaWYKIAogLyogUEdESVJfU0hJRlQgZGV0 ZXJtaW5lcyB3aGF0IGEgdGhpcmQtbGV2ZWwgcGFnZSB0YWJsZSBlbnRyeSBjYW4gbWFwICovCiAj ZGVmaW5lIFBHRElSX1NISUZUCShQQUdFX1NISUZUICsgKFBBR0VfU0hJRlQtMykgKyBQTURfQklU UykKQEAgLTEzNiw3ICsxMzksNyBAQAogI2VsaWYgUEFHRV9TSElGVCA9PSAxOQogI2RlZmluZSBf UEFHRV9TWkJJVFMJX1BBR0VfU1o1MTJLCiAjZWxpZiBQQUdFX1NISUZUID09IDIyCi0jZGVmaW5l IF9QQUdFX1NaQklUUwlfUEFHRV9TWjRNCisjZGVmaW5lIF9QQUdFX1NaQklUUwlfUEFHRV9TWjRN QgogI2Vsc2UKICNlcnJvciBXcm9uZyBQQUdFX1NISUZUIHNwZWNpZmllZAogI2VuZGlmCkBAIC0y MjgsOSArMjMxLDcgQEAKICNkZWZpbmUgX19wbWRfcGFnZShwbWQpCQkJKCh1bnNpZ25lZCBsb25n KSBfX3ZhKChwbWRfdmFsKHBtZCk8PDExVUwpKSkKICNkZWZpbmUgcG1kX3BhZ2UocG1kKSAJCQl2 aXJ0X3RvX3BhZ2UoKHZvaWQgKilfX3BtZF9wYWdlKHBtZCkpCiAjZGVmaW5lIHBnZF9wYWdlKHBn ZCkJCQkoKHVuc2lnbmVkIGxvbmcpIF9fdmEoKHBnZF92YWwocGdkKTw8MTFVTCkpKQotI2RlZmlu ZSBwdGVfbm9uZShwdGUpIAkJCSghcHRlX3ZhbChwdGUpKQogI2RlZmluZSBwdGVfcHJlc2VudChw dGUpCQkocHRlX3ZhbChwdGUpICYgX1BBR0VfUFJFU0VOVCkKLSNkZWZpbmUgcHRlX2NsZWFyKHB0 ZSkJCQkocHRlX3ZhbCgqKHB0ZSkpID0gMFVMKQogI2RlZmluZSBwbWRfbm9uZShwbWQpCQkJKCFw bWRfdmFsKHBtZCkpCiAjZGVmaW5lIHBtZF9iYWQocG1kKQkJCSgwKQogI2RlZmluZSBwbWRfcHJl c2VudChwbWQpCQkocG1kX3ZhbChwbWQpICE9IDBVTCkKQEAgLTIzOSw3ICsyNDAsMjQgQEAKICNk ZWZpbmUgcGdkX2JhZChwZ2QpCQkJKDApCiAjZGVmaW5lIHBnZF9wcmVzZW50KHBnZCkJCShwZ2Rf dmFsKHBnZCkgIT0gMFVMKQogI2RlZmluZSBwZ2RfY2xlYXIocGdkcCkJCQkocGdkX3ZhbCgqKHBn ZHApKSA9IDBVTCkKLQorI2lmIENPTkZJR19TVVBFUl9QQUdFCisjZGVmaW5lIGNsZWFyX3BtZF9z cChwbWQpIGRvIHt9IHdoaWxlKDApCisjZGVmaW5lIHN1cGVyX3BhZ2VfcG9wdWxhdGUobW0sIGFk ciwgcGFnZSwgcHJvdCwgaW5kZXgpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBTVVBFUl9QQUdF X01BU0sgKF9QQUdFX1NaNjRLfF9QQUdFX1NaNTEyS3xfUEFHRV9TWjRNQikKKyNkZWZpbmUgU1VQ RVJfUEFHRV9NQVNLX1NISUZUIDYxCisjZGVmaW5lIFNVUEVSX1BBR0VfTlIgNAorZXh0ZXJuIGlu dCBzdXBlcl9wYWdlX29yZGVyW107CitleHRlcm4gcGdwcm90X3Qgc3VwZXJfcGFnZV9wcm90W107 CitleHRlcm4gaW5saW5lIGludCBwdGVfbm9uZShwdGVfdCBwdGUpCXsgcmV0dXJuICEocHRlX3Zh bChwdGUpICYgflNVUEVSX1BBR0VfTUFTSyk7IH0KKyNkZWZpbmUgcHRlX3RvX3NwX2luZGV4KHgp CSgocHRlX3ZhbCh4KSAmIFNVUEVSX1BBR0VfTUFTSykgPj4gU1VQRVJfUEFHRV9NQVNLX1NISUZU KQorZXh0ZXJuIGlubGluZSBwdGVfdCBta19wdGVfc3BfY2xlYW4ocHRlX3QgcHRlKSB7cHRlX3Zh bChwdGUpICY9IH5TVVBFUl9QQUdFX01BU0s7IHJldHVybiBwdGU7fSAKK3ZvaWQgZG93bl9wdGVf c3AocHRlX3QgKnB0ZXB0ciwgaW50IGluZGV4KTsKK3ZvaWQgY2xlYXJfcHRlX3NwKHB0ZV90ICpw dGVwdHIsIGludCBpbmRleCk7CitleHRlcm4gaW5saW5lIHZvaWQgcHRlX2NsZWFyKHB0ZV90ICpw dGVwKSAgICAgIHsgcHRlX3QgcHRlOyBwdGVfdmFsKHB0ZSk9MDsgc2V0X3B0ZShwdGVwLCBwdGUp OyB9CisjZWxzZQorI2RlZmluZSBwdGVfbm9uZShwdGUpCSghcHRlX3ZhbChwdGUpKQorI2RlZmlu ZSBwdGVfY2xlYXIocHRlKQkocHRlX3ZhbCgqKHB0ZSkpID0gMFVMKQorI2VuZGlmCiAvKiBUaGUg Zm9sbG93aW5nIG9ubHkgd29yayBpZiBwdGVfcHJlc2VudCgpIGlzIHRydWUuCiAgKiBVbmRlZmlu ZWQgYmVoYXZpb3VyIGlmIG5vdC4uCiAgKi8KZGlmZiAtdXJOIGxpbnV4LTIuNS40NC9pbmNsdWRl L2xpbnV4L21tLmggbGludXgtMi41LjQ0LXN1cGVycGFnZS9pbmNsdWRlL2xpbnV4L21tLmgKLS0t IGxpbnV4LTIuNS40NC9pbmNsdWRlL2xpbnV4L21tLmgJU2F0IE9jdCAxOSAxMzowMTowOCAyMDAy CisrKyBsaW51eC0yLjUuNDQtc3VwZXJwYWdlL2luY2x1ZGUvbGludXgvbW0uaAlTdW4gT2N0IDI3 IDE0OjE4OjI3IDIwMDIKQEAgLTU1Miw2ICs1NTIsMjAgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25n IGdldF9wYWdlX2NhY2hlX3NpemUodm9pZCk7CiBleHRlcm4gdW5zaWduZWQgaW50IG5yX3VzZWRf em9uZV9wYWdlcyh2b2lkKTsKIAorI2lmIENPTkZJR19TVVBFUl9QQUdFCitleHRlcm4gaW50IHN1 cGVyX3BhZ2Vfb247CitleHRlcm4gaW50IHN1cGVyX3BhZ2VfbnI7CitleHRlcm4gdW5zaWduZWQg bG9uZyBzdXBlcl9wYWdlX3Jlc2VydmVbXTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1cGVyX3Bh Z2VfYWxsb2NhdGVbXTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1cGVyX3BhZ2VfZG93bmdyYWRl W107Cit2b2lkIHN1cGVyX3BhZ2VfaW5pdCh2b2lkKTsKK2ludCBtYWtlX3B0ZXNfcHJlc2VudCh1 bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKTsKK3ZvaWQgX19icmVha19hcmVh IChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvcmRlcik7Cit2b2lkIGFkal9zcF9y YW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwlpbnQgemFwLHVuc2lnbmVkIGxvbmcgYWRkcmVz cywgdW5zaWduZWQgbG9uZyBlbmQpOworI2RlZmluZSBicmVha19hcmVhKHBhZ2UsIG9yZGVyKSBf X2JyZWFrX2FyZWEocGFnZSwgb3JkZXIpCisjZW5kaWYKKwogI2VuZGlmIC8qIF9fS0VSTkVMX18g Ki8KIAogI2VuZGlmCmRpZmYgLXVyTiBsaW51eC0yLjUuNDQva2VybmVsL2tzeW1zLmMgbGludXgt Mi41LjQ0LXN1cGVycGFnZS9rZXJuZWwva3N5bXMuYwotLS0gbGludXgtMi41LjQ0L2tlcm5lbC9r c3ltcy5jCVNhdCBPY3QgMTkgMTM6MDE6MDggMjAwMgorKysgbGludXgtMi41LjQ0LXN1cGVycGFn ZS9rZXJuZWwva3N5bXMuYwlUaHUgT2N0IDI0IDE5OjU5OjIwIDIwMDIKQEAgLTU5OSw1ICs1OTks MTAgQEAKIEVYUE9SVF9TWU1CT0woX19wZXJfY3B1X29mZnNldCk7CiAjZW5kaWYKIAorI2lmIENP TkZJR19TVVBFUl9QQUdFCitFWFBPUlRfU1lNQk9MKHN1cGVyX3BhZ2Vfb3JkZXIpOworRVhQT1JU X1NZTUJPTChzdXBlcl9wYWdlX3Byb3QpOworI2VuZGlmCisKIC8qIGRlYnVnICovCiBFWFBPUlRf U1lNQk9MKGR1bXBfc3RhY2spOwpkaWZmIC11ck4gbGludXgtMi41LjQ0L2tlcm5lbC9zeXNjdGwu YyBsaW51eC0yLjUuNDQtc3VwZXJwYWdlL2tlcm5lbC9zeXNjdGwuYwotLS0gbGludXgtMi41LjQ0 L2tlcm5lbC9zeXNjdGwuYwlTYXQgT2N0IDE5IDEzOjAxOjExIDIwMDIKKysrIGxpbnV4LTIuNS40 NC1zdXBlcnBhZ2Uva2VybmVsL3N5c2N0bC5jCVN1biBPY3QgMjcgMTI6NDY6MDQgMjAwMgpAQCAt MTQ3LDYgKzE0NywxMCBAQAogc3RhdGljIHZvaWQgdW5yZWdpc3Rlcl9wcm9jX3RhYmxlKGN0bF90 YWJsZSAqLCBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKik7CiAjZW5kaWYKIAorI2lmIENPTkZJR19T VVBFUl9QQUdFCit2b2lkIHN1cGVyX3BhZ2VfaW5pdCh2b2lkKTsKKyNlbmRpZgorCiAvKiBUaGUg ZGVmYXVsdCBzeXNjdGwgdGFibGVzOiAqLwogCiBzdGF0aWMgY3RsX3RhYmxlIHJvb3RfdGFibGVb XSA9IHsKQEAgLTM2Nyw2ICszNzEsMTAgQEAKIAlyZWdpc3Rlcl9wcm9jX3RhYmxlKHJvb3RfdGFi bGUsIHByb2Nfc3lzX3Jvb3QpOwogCWluaXRfaXJxX3Byb2MoKTsKICNlbmRpZgorI2lmZGVmIENP TkZJR19TVVBFUl9QQUdFCisJc3VwZXJfcGFnZV9pbml0KCk7CisjZW5kaWYKKwogfQogCiBpbnQg ZG9fc3lzY3RsKGludCAqbmFtZSwgaW50IG5sZW4sIHZvaWQgKm9sZHZhbCwgc2l6ZV90ICpvbGRs ZW5wLApkaWZmIC11ck4gbGludXgtMi41LjQ0L21tL01ha2VmaWxlIGxpbnV4LTIuNS40NC1zdXBl cnBhZ2UvbW0vTWFrZWZpbGUKLS0tIGxpbnV4LTIuNS40NC9tbS9NYWtlZmlsZQlTYXQgT2N0IDE5 IDEzOjAyOjAwIDIwMDIKKysrIGxpbnV4LTIuNS40NC1zdXBlcnBhZ2UvbW0vTWFrZWZpbGUJVGh1 IE9jdCAyNCAyMDowMzoyNiAyMDAyCkBAIC0xMSw0ICsxMSw2IEBACiAJICAgIHBkZmx1c2gubyBw YWdlLXdyaXRlYmFjay5vIHJtYXAubyBtYWR2aXNlLm8gdmNhY2hlLm8gXAogCSAgICB0cnVuY2F0 ZS5vCiAKK29iai0kKENPTkZJR19TVVBFUl9QQUdFKSArPSBzdXBlcl9wYWdlLm8KKwogaW5jbHVk ZSAkKFRPUERJUikvUnVsZXMubWFrZQpkaWZmIC11ck4gbGludXgtMi41LjQ0L21tL21lbW9yeS5j IGxpbnV4LTIuNS40NC1zdXBlcnBhZ2UvbW0vbWVtb3J5LmMKLS0tIGxpbnV4LTIuNS40NC9tbS9t ZW1vcnkuYwlTYXQgT2N0IDE5IDEzOjAxOjUyIDIwMDIKKysrIGxpbnV4LTIuNS40NC1zdXBlcnBh Z2UvbW0vbWVtb3J5LmMJTW9uIE9jdCAyOCAxMDowNToyOCAyMDAyCkBAIC0yMTIsNiArMjEyLDE0 IEBACiAKIAlpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpCiAJCXJldHVybiBjb3B5X2h1Z2V0 bGJfcGFnZV9yYW5nZShkc3QsIHNyYywgdm1hKTsKKyNpZiBDT05GSUdfU1VQRVJfUEFHRQorCWlm KGNvdykgeworCQlzcGluX2xvY2soJnNyYy0+cGFnZV90YWJsZV9sb2NrKTsgICAgICAgICAgICAg ICAgICAKKwkJYWRqX3NwX3JhbmdlKHNyYywgMSwgYWRkcmVzcywgZW5kKTsKKwkJc3Bpbl91bmxv Y2soJnNyYy0+cGFnZV90YWJsZV9sb2NrKTsgICAgICAgICAgICAgICAgICAgICAgICAKKwl9Cisj ZW5kaWYKKwogCiAJc3JjX3BnZCA9IHBnZF9vZmZzZXQoc3JjLCBhZGRyZXNzKS0xOwogCWRzdF9w Z2QgPSBwZ2Rfb2Zmc2V0KGRzdCwgYWRkcmVzcyktMTsKQEAgLTQwMiw2ICs0MTAsOSBAQAogCWRp ciA9IHBnZF9vZmZzZXQodm1hLT52bV9tbSwgYWRkcmVzcyk7CiAJdGxiX3N0YXJ0X3ZtYSh0bGIs IHZtYSk7CiAJZG8geworI2lmIENPTkZJR19TVVBFUl9QQUdFCisJCWFkal9zcF9yYW5nZSh2bWEt PnZtX21tLCAxLCBhZGRyZXNzLCBlbmQpOworI2VuZGlmCiAJCXphcF9wbWRfcmFuZ2UodGxiLCBk aXIsIGFkZHJlc3MsIGVuZCAtIGFkZHJlc3MpOwogCQlhZGRyZXNzID0gKGFkZHJlc3MgKyBQR0RJ Ul9TSVpFKSAmIFBHRElSX01BU0s7CiAJCWRpcisrOwpAQCAtNjQxLDYgKzY1Miw5IEBACiAJCUJV RygpOwogCiAJc3Bpbl9sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKKyNpZiBDT05GSUdfU1VQ RVJfUEFHRQorCWFkal9zcF9yYW5nZShtbSwgMSwgYWRkcmVzcywgZW5kKTsKKyNlbmRpZgogCWRv IHsKIAkJcG1kX3QgKnBtZCA9IHBtZF9hbGxvYyhtbSwgZGlyLCBhZGRyZXNzKTsKIAkJZXJyb3Ig PSAtRU5PTUVNOwpAQCAtNzIyLDYgKzczNiw5IEBACiAJCUJVRygpOwogCiAJc3Bpbl9sb2NrKCZt bS0+cGFnZV90YWJsZV9sb2NrKTsKKyNpZiBDT05GSUdfU1VQRVJfUEFHRQorCWFkal9zcF9yYW5n ZShtbSwgMSwgYmVnLCBlbmQpOworI2VuZGlmCiAJZG8gewogCQlwbWRfdCAqcG1kID0gcG1kX2Fs bG9jKG1tLCBkaXIsIGZyb20pOwogCQllcnJvciA9IC1FTk9NRU07CkBAIC0xMDUzLDIxICsxMDcw LDc4IEBACiB7CiAJcHRlX3QgZW50cnk7CiAJc3RydWN0IHBhZ2UgKiBwYWdlID0gWkVST19QQUdF KGFkZHIpOworI2lmIENPTkZJR19TVVBFUl9QQUdFCisJaW50IGksIG9yZGVyOworCXVuc2lnbmVk IGxvbmcgc3BhZGRyOworCXB0ZV90IG9sZHB0ZSwgKndrdGFibGU7CisjZW5kaWYKIAogCS8qIFJl YWQtb25seSBtYXBwaW5nIG9mIFpFUk9fUEFHRS4gKi8KIAllbnRyeSA9IHB0ZV93cnByb3RlY3Qo bWtfcHRlKFpFUk9fUEFHRShhZGRyKSwgdm1hLT52bV9wYWdlX3Byb3QpKTsKIAogCS8qIC4uZXhj ZXB0IGlmIGl0J3MgYSB3cml0ZSBhY2Nlc3MgKi8KIAlpZiAod3JpdGVfYWNjZXNzKSB7CisjaWYg Q09ORklHX1NVUEVSX1BBR0UKK3JldHJ5OgorCQlvbGRwdGUgPSAqcGFnZV90YWJsZTsKKwkJb3Jk ZXIgPSBzdXBlcl9wYWdlX29yZGVyW3B0ZV90b19zcF9pbmRleChvbGRwdGUpXTsKKwkJd2t0YWJs ZSA9CisJCQkocHRlX3QgKikoKHVuc2lnbmVkIGxvbmcpcGFnZV90YWJsZSAmIAorCQkJfigoMVVM IDw8IChvcmRlciArIFNJWkVPRl9QVEVfTE9HMikpIC0xKSk7CisJCWZvciAoaT0wOyBpIDwgMSA8 PCBvcmRlcjsgaSsrKSB7CisJCQlpZighcHRlX25vbmUoKih3a3RhYmxlK2kpKSkgeworCQkJCWRv d25fcHRlX3NwKHBhZ2VfdGFibGUsIHB0ZV90b19zcF9pbmRleChvbGRwdGUpKTsKKwkJCQlnb3Rv IHJldHJ5OworCQkJfQorCQl9CisjZW5kaWYKIAkJLyogQWxsb2NhdGUgb3VyIG93biBwcml2YXRl IHBhZ2UuICovCiAJCXB0ZV91bm1hcChwYWdlX3RhYmxlKTsKIAkJc3Bpbl91bmxvY2soJm1tLT5w YWdlX3RhYmxlX2xvY2spOwotCisjaWYgQ09ORklHX1NVUEVSX1BBR0UKKwkJcGFnZSA9IGFsbG9j X3BhZ2VzKEdGUF9ISUdIVVNFUiwgb3JkZXIpOworCQlpZiAoIXBhZ2UpIHsKKwkJCWlmIChvcmRl cikgeworCQkJCXNwaW5fbG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CisJCQkJc3VwZXJfcGFn ZV9kb3duZ3JhZGVbcHRlX3RvX3NwX2luZGV4KG9sZHB0ZSldKys7CisJCQkJZG93bl9wdGVfc3Ao cGFnZV90YWJsZSwgcHRlX3RvX3NwX2luZGV4KG9sZHB0ZSkpOworCQkJCWdvdG8gcmV0cnk7CisJ CQl9IAorCQllbHNlIGdvdG8gbm9fbWVtOworCQl9CisJCXNwYWRkciA9IGFkZHIgJiB+KChQQUdF X1NJWkUgPDwgb3JkZXIpIC0gMSk7CisJCWZvciAoaT0wOyBpIDwgMSA8PCBvcmRlcjsgaSsrKSB7 CisJCQljbGVhcl91c2VyX2hpZ2hwYWdlKHBhZ2UraSwgc3BhZGRyKTsKKwkJCXNwYWRkciArPSBQ QUdFX1NJWkU7CisJCX0KKwkJaWYgKG9yZGVyKSB7CisJCQlicmVha19hcmVhKHBhZ2UsIG9yZGVy KTsKKwkJCXN1cGVyX3BhZ2VfYWxsb2NhdGVbcHRlX3RvX3NwX2luZGV4KG9sZHB0ZSldKys7CisJ CQlzcGluX2xvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOworCQkJc3BhZGRyID0gYWRkciAmIH4o KFBBR0VfU0laRSA8PCBvcmRlcikgLSAxKTsKKwkJCXN1cGVyX3BhZ2VfcG9wdWxhdGUobW0sIHNw YWRkciwgcGFnZSwgdm1hLT52bV9wYWdlX3Byb3QsCisJCQlwdGVfdG9fc3BfaW5kZXgob2xkcHRl KSk7CisJCQlmb3IgKGk9MDsgaSA8IDEgPDwgb3JkZXI7IGkrKykgeworCQkJCWVudHJ5ID0gcHRl X21rd3JpdGUocHRlX21rZGlydHkoCisJCQkJbWtfcHRlKHBhZ2UraSwgX19wZ3Byb3QocGdwcm90 X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCl8CisJCQkJcGdwcm90X3ZhbChzdXBlcl9wYWdlX3Byb3Rb cHRlX3RvX3NwX2luZGV4KG9sZHB0ZSldKSkpKSk7CisgICAgICAgCQkJCW1tLT5yc3MrKzsKKwkJ CQlmbHVzaF9wYWdlX3RvX3JhbShwYWdlK2kpOworCQkJCWxydV9jYWNoZV9hZGQocGFnZStpKTsK KwkJCQltYXJrX3BhZ2VfYWNjZXNzZWQocGFnZStpKTsKKwkJCQlzZXRfcHRlX3Jhdyh3a3RhYmxl K2ksIGVudHJ5KTsKKwkJCQlwYWdlX2FkZF9ybWFwKHBhZ2UraSwgd2t0YWJsZStpKTsKKwkJCQlw dGVfdW5tYXAod2t0YWJsZStpKTsKKwkJCQlzcGFkZHIgKz0gUEFHRV9TSVpFOworCQkJfQorCQl9 IGVsc2V7CisjZWxzZQogCQlwYWdlID0gYWxsb2NfcGFnZShHRlBfSElHSFVTRVIpOwogCQlpZiAo IXBhZ2UpCiAJCQlnb3RvIG5vX21lbTsKIAkJY2xlYXJfdXNlcl9oaWdocGFnZShwYWdlLCBhZGRy KTsKIAorI2VuZGlmCiAJCXNwaW5fbG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CiAJCXBhZ2Vf dGFibGUgPSBwdGVfb2Zmc2V0X21hcChwbWQsIGFkZHIpOwogCkBAIC0xMDgyLDExICsxMTU2LDIz IEBACiAJCWVudHJ5ID0gcHRlX21rd3JpdGUocHRlX21rZGlydHkobWtfcHRlKHBhZ2UsIHZtYS0+ dm1fcGFnZV9wcm90KSkpOwogCQlscnVfY2FjaGVfYWRkKHBhZ2UpOwogCQltYXJrX3BhZ2VfYWNj ZXNzZWQocGFnZSk7CisjaWYgQ09ORklHX1NVUEVSX1BBR0UKKwkJc2V0X3B0ZShwYWdlX3RhYmxl LCBlbnRyeSk7CisJCXBhZ2VfYWRkX3JtYXAocGFnZSwgcGFnZV90YWJsZSk7IC8qIGlnbm9yZXMg WkVST19QQUdFICovCisJCXB0ZV91bm1hcChwYWdlX3RhYmxlKTsKKwkJfQorCX0gZWxzZSB7CisJ CXNldF9wdGUocGFnZV90YWJsZSwgZW50cnkpOworCQlwYWdlX2FkZF9ybWFwKHBhZ2UsIHBhZ2Vf dGFibGUpOyAvKiBpZ25vcmVzIFpFUk9fUEFHRSAqLworCQlwdGVfdW5tYXAocGFnZV90YWJsZSk7 CisJfQorI2Vsc2UKIAl9CiAKIAlzZXRfcHRlKHBhZ2VfdGFibGUsIGVudHJ5KTsKIAlwYWdlX2Fk ZF9ybWFwKHBhZ2UsIHBhZ2VfdGFibGUpOyAvKiBpZ25vcmVzIFpFUk9fUEFHRSAqLwogCXB0ZV91 bm1hcChwYWdlX3RhYmxlKTsKKyNlbmRpZgogCiAJLyogTm8gbmVlZCB0byBpbnZhbGlkYXRlIC0g aXQgd2FzIG5vbi1wcmVzZW50IGJlZm9yZSAqLwogCXVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRy LCBlbnRyeSk7CmRpZmYgLXVyTiBsaW51eC0yLjUuNDQvbW0vbW1hcC5jIGxpbnV4LTIuNS40NC1z dXBlcnBhZ2UvbW0vbW1hcC5jCi0tLSBsaW51eC0yLjUuNDQvbW0vbW1hcC5jCVNhdCBPY3QgMTkg MTM6MDI6MDAgMjAwMgorKysgbGludXgtMi41LjQ0LXN1cGVycGFnZS9tbS9tbWFwLmMJU3VuIE9j dCAyNyAxNjo1NzozOCAyMDAyCkBAIC02MDIsNiArNjAyLDExIEBACiAJCW1tLT5sb2NrZWRfdm0g Kz0gbGVuID4+IFBBR0VfU0hJRlQ7CiAJCW1ha2VfcGFnZXNfcHJlc2VudChhZGRyLCBhZGRyICsg bGVuKTsKIAl9CisjaWZkZWYgQ09ORklHX1NVUEVSX1BBR0UKKwlpZiAoc3VwZXJfcGFnZV9vbiAm JiBsZW4gPj0gKFBBR0VfU0laRSA8PCBzdXBlcl9wYWdlX29yZGVyWzFdKSkgeworCQltYWtlX3B0 ZXNfcHJlc2VudChhZGRyLCBhZGRyICsgbGVuKTsKKwl9CisjZW5kaWYKIAlyZXR1cm4gYWRkcjsK IAogdW5tYXBfYW5kX2ZyZWVfdm1hOgpAQCAtNjMyLDkgKzYzNywxNSBAQAogICogVGhpcyBmdW5j dGlvbiAia25vd3MiIHRoYXQgLUVOT01FTSBoYXMgdGhlIGJpdHMgc2V0LgogICovCiAjaWZuZGVm IEhBVkVfQVJDSF9VTk1BUFBFRF9BUkVBCisjaWYgQ09ORklHX1NVUEVSX1BBR0UKK2V4dGVybiBp bnQgc3VwZXJfcGFnZV92bV9hbGlnbjsKKyNlbmRpZgogc3RhdGljIGlubGluZSB1bnNpZ25lZCBs b25nIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxv bmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVk IGxvbmcgZmxhZ3MpCiB7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisjaWYgQ09ORklH X1NVUEVSX1BBR0UKKwl1bnNpZ25lZCBsb25nIHN1cGVyX3BhZ2VfbWFzaz0wOworI2VuZGlmCiAK IAlpZiAobGVuID4gVEFTS19TSVpFKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTY0OCwxMyArNjU5 LDI4IEBACiAJfQogCWFkZHIgPSBQQUdFX0FMSUdOKFRBU0tfVU5NQVBQRURfQkFTRSk7CiAKKyNp ZiBDT05GSUdfU1VQRVJfUEFHRQorCWlmKHN1cGVyX3BhZ2Vfdm1fYWxpZ24pIHsKKwkJaW50IGk7 CisJCWZvcihpPXN1cGVyX3BhZ2VfbnItMTsgaT4wOyBpLS0pIHsKKwkJCWlmKGxlbj4oUEFHRV9T SVpFIDw8IHN1cGVyX3BhZ2Vfb3JkZXJbaV0pKSB7CisJCQkJc3VwZXJfcGFnZV9tYXNrID0gKFBB R0VfU0laRSA8PCBzdXBlcl9wYWdlX29yZGVyW2ldKSAtMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJ fQorCX0KKyNlbmRpZgogCWZvciAodm1hID0gZmluZF92bWEoY3VycmVudC0+bW0sIGFkZHIpOyA7 IHZtYSA9IHZtYS0+dm1fbmV4dCkgewogCQkvKiBBdCB0aGlzIHBvaW50OiAgKCF2bWEgfHwgYWRk ciA8IHZtYS0+dm1fZW5kKS4gKi8KIAkJaWYgKFRBU0tfU0laRSAtIGxlbiA8IGFkZHIpCiAJCQly ZXR1cm4gLUVOT01FTTsKIAkJaWYgKCF2bWEgfHwgYWRkciArIGxlbiA8PSB2bWEtPnZtX3N0YXJ0 KQogCQkJcmV0dXJuIGFkZHI7CisjaWYgQ09ORklHX1NVUEVSX1BBR0UKKwkJYWRkciA9ICh2bWEt PnZtX2VuZCArIHN1cGVyX3BhZ2VfbWFzaykmfnN1cGVyX3BhZ2VfbWFzazsKKyNlbHNlCiAJCWFk ZHIgPSB2bWEtPnZtX2VuZDsKKyNlbmRpZgogCX0KIH0KICNlbHNlCkBAIC0xMjMzLDYgKzEyNTks MTEgQEAKIAkJbW0tPmxvY2tlZF92bSArPSBsZW4gPj4gUEFHRV9TSElGVDsKIAkJbWFrZV9wYWdl c19wcmVzZW50KGFkZHIsIGFkZHIgKyBsZW4pOwogCX0KKyNpZmRlZiBDT05GSUdfU1VQRVJfUEFH RQorCWlmIChzdXBlcl9wYWdlX29uICYmIGxlbiA+PSAoUEFHRV9TSVpFIDw8IHN1cGVyX3BhZ2Vf b3JkZXJbMV0pKSB7CisJCW1ha2VfcHRlc19wcmVzZW50KGFkZHIsIGFkZHIgKyBsZW4pOworCX0K KyNlbmRpZgogCXJldHVybiBhZGRyOwogfQogCmRpZmYgLXVyTiBsaW51eC0yLjUuNDQvbW0vbXBy b3RlY3QuYyBsaW51eC0yLjUuNDQtc3VwZXJwYWdlL21tL21wcm90ZWN0LmMKLS0tIGxpbnV4LTIu NS40NC9tbS9tcHJvdGVjdC5jCVNhdCBPY3QgMTkgMTM6MDE6NDkgMjAwMgorKysgbGludXgtMi41 LjQ0LXN1cGVycGFnZS9tbS9tcHJvdGVjdC5jCVN1biBPY3QgMjcgMTY6NTk6MjAgMjAwMgpAQCAt OTYsNiArOTYsOSBAQAogCWlmIChzdGFydCA+PSBlbmQpCiAJCUJVRygpOwogCXNwaW5fbG9jaygm Y3VycmVudC0+bW0tPnBhZ2VfdGFibGVfbG9jayk7CisjaWYgQ09ORklHX1NVUEVSX1BBR0UKKwlh ZGpfc3BfcmFuZ2UoY3VycmVudC0+bW0sIDEsIHN0YXJ0LCBlbmQpOworI2VuZGlmCiAJZG8gewog CQljaGFuZ2VfcG1kX3JhbmdlKGRpciwgc3RhcnQsIGVuZCAtIHN0YXJ0LCBuZXdwcm90KTsKIAkJ c3RhcnQgPSAoc3RhcnQgKyBQR0RJUl9TSVpFKSAmIFBHRElSX01BU0s7CmRpZmYgLXVyTiBsaW51 eC0yLjUuNDQvbW0vc3VwZXJfcGFnZS5jIGxpbnV4LTIuNS40NC1zdXBlcnBhZ2UvbW0vc3VwZXJf cGFnZS5jCi0tLSBsaW51eC0yLjUuNDQvbW0vc3VwZXJfcGFnZS5jCVRodSBKYW4gIDEgMDk6MDA6 MDAgMTk3MAorKysgbGludXgtMi41LjQ0LXN1cGVycGFnZS9tbS9zdXBlcl9wYWdlLmMJTW9uIE9j dCAyOCAxMDoxOToxNyAyMDAyCkBAIC0wLDAgKzEsMjk4IEBACisvKgorICBMaW51eCBTdXBlciBQ YWdlIGludGVybmFsIGZ1bmN0aW9ucy4KKyovCisKKyNkZWZpbmUgU1VQRVJfUEFHRV9ERUJVRyAw CisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KKyNpbmNs dWRlIDxsaW51eC9zd2FwLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRl IDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorCisjaW5jbHVk ZSA8YXNtL3BnYWxsb2MuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFz bS90bGIuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc3lz Y3RsLmg+CisKKy8qIFdlIHVzZSBhcmJpdHJhcnkgaGlnaCBudW1iZXIgZm9yIHRoZSBzeXNjdGwu IFlvdSBtYXkgaGF2ZSB0byBjaGFuZ2UgaXQuKi8KKyNkZWZpbmUgQ1RMX1NVUEVSX1BBR0UgNDU1 OAorCisjZGVmaW5lIENUTF9TRVRfT04gMQorI2RlZmluZSBDVExfU0VUX05SIDIKKyNkZWZpbmUg Q1RMX1NFVF9BTElHTiAzCisjZGVmaW5lIENUTF9TRVRfQklUTUFTSyA0CisjZGVmaW5lIENUTF9T RVRfTE9HUkVTIDUKKworaW50IHN1cGVyX3BhZ2Vfb24gPSAwOyAvKiBXZSBzdGFydCB3aXRob3V0 IHN1cGVyX3BhZ2UgYXQgZmlyc3QuICovCitpbnQgc3VwZXJfcGFnZV9uciA9IFNVUEVSX1BBR0Vf TlI7CitpbnQgc3VwZXJfcGFnZV92bV9hbGlnbiA9IDA7IC8qIFdlIHN0YXJ0IHdpdGhvdXQgc3Vw ZXJfcGFnZSBhbGlnbiBhdCBmaXJzdC4gKi8KK2ludCBzdXBlcl9wYWdlX3RhaWxfYWxpZ24gPSAw OyAvKiBXZSBzdGFydCB3aXRob3V0IHN1cGVyX3BhZ2UgdGFpbCBhbGlnbiBhdCBmaXJzdC4gKi8K K2ludCBzdXBlcl9wYWdlX2JpdG1hc2sgPSAoMTw8U1VQRVJfUEFHRV9OUiktMTsgLyogVG8gY29u dHJvbCBlYWNoIG9yZGVyIG9mIHRoZSByZXNlcnZhdGlvbi4gKi8KK2ludCBzdXBlcl9wYWdlX2xv Z3Jlc2V0ID0gMDsgLyogSWYgMSB0aGVuIHJlc2V0IGNvdW50ZXIgd2hlbiBkdW1wZWQgKi8KKwor dW5zaWduZWQgbG9uZyBzdXBlcl9wYWdlX3Jlc2VydmVbU1VQRVJfUEFHRV9OUl07Cit1bnNpZ25l ZCBsb25nIHN1cGVyX3BhZ2VfYWxsb2NhdGVbU1VQRVJfUEFHRV9OUl07Cit1bnNpZ25lZCBsb25n IHN1cGVyX3BhZ2VfZG93bmdyYWRlW1NVUEVSX1BBR0VfTlJdOworI2lmIENPTkZJR19TWVNDVEwK K3N0YXRpYyBjdGxfdGFibGUgc3VwZXJfcGFnZV90YWJsZVtdID0geworICAgICAgICB7Q1RMX1NF VF9PTiwgIm9uIiwgJnN1cGVyX3BhZ2Vfb24sIHNpemVvZihpbnQpLAorICAgICAgICAgMDY0NCwg TlVMTCwgJnByb2NfZG9pbnR2ZWN9LAorICAgICAgICB7Q1RMX1NFVF9OUiwgIm5yIiwgJnN1cGVy X3BhZ2VfbnIsIHNpemVvZihpbnQpLAorICAgICAgICAgMDY0NCwgTlVMTCwgJnByb2NfZG9pbnR2 ZWN9LAorICAgICAgICB7Q1RMX1NFVF9BTElHTiwgInZtX2FsaWduIiwgJnN1cGVyX3BhZ2Vfdm1f YWxpZ24sIHNpemVvZihpbnQpLAorICAgICAgICAgMDY0NCwgTlVMTCwgJnByb2NfZG9pbnR2ZWN9 LAorICAgICAgICB7Q1RMX1NFVF9BTElHTiwgInRhaWxfYWxpZ24iLCAmc3VwZXJfcGFnZV90YWls X2FsaWduLCBzaXplb2YoaW50KSwKKyAgICAgICAgIDA2NDQsIE5VTEwsICZwcm9jX2RvaW50dmVj fSwKKyAgICAgICAge0NUTF9TRVRfQklUTUFTSywgImJpdG1hc2siLCAmc3VwZXJfcGFnZV9iaXRt YXNrLCBzaXplb2YoaW50KSwKKyAgICAgICAgIDA2NDQsIE5VTEwsICZwcm9jX2RvaW50dmVjfSwK KyAgICAgICAge0NUTF9TRVRfTE9HUkVTLCAibG9ncmVzZXQiLCAmc3VwZXJfcGFnZV9sb2dyZXNl dCwgc2l6ZW9mKGludCksCisgICAgICAgICAwNjQ0LCBOVUxMLCAmcHJvY19kb2ludHZlY30sCisJ ezB9Cit9Oworc3RhdGljIGN0bF90YWJsZSBzeXNfdGFibGVbXSA9IHsKKwl7Q1RMX1NVUEVSX1BB R0UsICJzdXBlcl9wYWdlIiwgTlVMTCwgMCwgMDU1NSwgc3VwZXJfcGFnZV90YWJsZX0sCisJezB9 Cit9OworCisjZW5kaWYKKworI2lmIENPTkZJR19QUk9DX0ZTCitpbnQgc3VwZXJfcGFnZV9nZXRp bmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBmcG9zLCBpbnQgbGVuZ3RoKQorewor ICAgICAgaW50IGk7CisgICAgICBjaGFyICpwID0gYnVmOworCisgICAgICBwICs9IHNwcmludGYo cCwgImN1cnJlbnQgb246ICVkXG4iLCBzdXBlcl9wYWdlX29uKTsKKyAgICAgIHAgKz0gc3ByaW50 ZihwLCAiY3VycmVudCBucjogJWRcbiIsIHN1cGVyX3BhZ2VfbnIpOworICAgICAgcCArPSBzcHJp bnRmKHAsICJjdXJyZW50IGJpdG1hc2s6ICVkXG4iLCBzdXBlcl9wYWdlX2JpdG1hc2spOworICAg ICAgcCArPSBzcHJpbnRmKHAsICJjdXJyZW50IHZtX2FsaWduOiAlZFxuIiwgc3VwZXJfcGFnZV92 bV9hbGlnbik7CisgICAgICBwICs9IHNwcmludGYocCwgIm9yZGVyXHRyZXNlcnZlXHRhbGxvY2F0 ZVx0ZmFpbCBcbiIpOworICAgICAgZm9yKGk9MTtpPFNVUEVSX1BBR0VfTlI7aSsrKSB7CisgICAg ICBwICs9IHNwcmludGYocCwgIiVkOlx0JWxkXHQlbGRcdCVsZFxuIiwKKyAgICAgICAgICAgICAg IHN1cGVyX3BhZ2Vfb3JkZXJbaV0sCisgICAgICAgICAgICAgICBzdXBlcl9wYWdlX3Jlc2VydmVb aV0sCisgICAgICAgICAgICAgICBzdXBlcl9wYWdlX2FsbG9jYXRlW2ldLAorICAgICAgICAgICAg ICAgc3VwZXJfcGFnZV9kb3duZ3JhZGVbaV0KKyAgICAgICAgICAgICAgICk7CisgICAgICB9Cisg ICAgICBpZihzdXBlcl9wYWdlX2xvZ3Jlc2V0KQorICAgICAgZm9yKGk9MTtpPFNVUEVSX1BBR0Vf TlI7aSsrKSB7CisgICAgICAgICAgICAgICBzdXBlcl9wYWdlX3Jlc2VydmVbaV0gPSAwOworICAg ICAgICAgICAgICAgc3VwZXJfcGFnZV9hbGxvY2F0ZVtpXSA9IDA7CisgICAgICAgICAgICAgICBz dXBlcl9wYWdlX2Rvd25ncmFkZVtpXSA9IDA7CisgICAgICB9CisgICAgICByZXR1cm4gcCAtIGJ1 ZjsKKyB9CisjZW5kaWYKKwordm9pZCBzdXBlcl9wYWdlX2luaXQoKSB7CisgIGludCBpOworI2lm IFNVUEVSX1BBR0VfREVCVUcKKwlzdXBlcl9wYWdlX29uID0gMDsKKwlwcmludGsoInN1cGVyX3Bh Z2VfaW5pdFxuIik7CisjZWxzZQorCXN1cGVyX3BhZ2Vfb24gPSAxOworI2VuZGlmCisjaWYgQ09O RklHX1BST0NfRlMKKwlmb3IoaT0wO2k8U1VQRVJfUEFHRV9OUjtpKyspIHsKKwkJc3VwZXJfcGFn ZV9yZXNlcnZlW2ldID0gMDsKKwkJc3VwZXJfcGFnZV9hbGxvY2F0ZVtpXSA9IDA7CisJCXN1cGVy X3BhZ2VfZG93bmdyYWRlW2ldID0gMDsKKwl9CisJY3JlYXRlX3Byb2NfaW5mb19lbnRyeSgic3Vw ZXJfcGFnZSIsIDAsIE5VTEwsIHN1cGVyX3BhZ2VfZ2V0aW5mbyk7CisjZW5kaWYKKyNpZiBDT05G SUdfU1lTQ1RMCisJcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKHN5c190YWJsZSwwKTsKKyNlbmRpZgor fQorCisgIC8qCisgICAqIEFsbG9jYXRpbmcgUFRFcyBmb3IgZnV0dXJlIGZhbHQgaGFuZGxpbmcu IAorICAgKi8KKyAgCit2b2lkIHNldF9zcF9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGlu dCBvcmRlciwgcGdwcm90X3QgcHJvdCkKKyAgeworICAgICAgICBpbnQgaTsKKyAgICAgICAgcGdk X3QgKiBkaXI7CisgICAgICAgIHBtZF90ICpwbWQ7CisgICAgICAgIHB0ZV90ICogcHRlOworCXN0 cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07CisgIAorCXNwaW5fbG9jaygmbW0tPnBh Z2VfdGFibGVfbG9jayk7CisgICAgICAgIGRpciA9IHBnZF9vZmZzZXQobW0sIGFkZHJlc3MpOwor ICAgICAgICBwbWQgPSBwbWRfYWxsb2MobW0sIGRpciwgYWRkcmVzcyk7CisgICAgICAgIGlmICgh cG1kKSBnb3RvIG91dDsKKyAgICAgICAgYWRkcmVzcyAmPSB+UEdESVJfTUFTSzsKKyAgICAgICAg cHRlID0gcHRlX2FsbG9jX21hcChtbSwgcG1kLCBhZGRyZXNzKTsKKyAgICAgICAgaWYgKCFwdGUp CisgICAgICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxPDxv cmRlcjsgaSArKykKKyAgICAgICAgICAgICAgICBpZighcHRlX25vbmUoKihwdGUraSkpKSBnb3Rv IG91dDsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDE8PG9yZGVyOyBpICsrKSB7CisgICAgICAg ICAgICAgICAgc2V0X3B0ZV9yYXcocHRlLCBwdGVfbW9kaWZ5KCpwdGUsIHByb3QpKTsKKyAgICAg ICAgICAgICAgICBwdGUrKzsKKyAgICAgICAgfQorb3V0OgorCXNwaW5fdW5sb2NrKCZtbS0+cGFn ZV90YWJsZV9sb2NrKTsKKyAgICAgICAgcmV0dXJuOworICB9CisgIAorICAvKgorICAgKiBTaW1w bGlzdGljIG5ldyBwYWdlIHRhYmxlIGFsbG9jYXRpb24gZm9yIHN5c19icmsuLgorICAgKiBPbmx5 IEdIIGJpdCAhPSAwIHRhYmxlcyB3aWxsIGJlIGFsbG9jYXRlZC4KKyAgICogQXQgdGhpcyB0aW1l LCB3ZSB3aWxsIG5vdCBhbGxvY2F0ZSByZWFsIHN0b3JhZ2UsIGl0IHJlbWFpbnMKKyAgICogZm9y IHRoZSBwYWdlX2ZhdWx0IGhhbmRsZXIuCisgICAqLworaW50IG1ha2VfcHRlc19wcmVzZW50KHVu c2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQpCisgIHsKKyAgICAgICAgaW50IGk7 CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcmVtOworICAgICAgICBpZiAoYWRkciA+PSBlbmQpCisg ICAgICAgICAgICAgICAgQlVHKCk7CisjaWYgU1VQRVJfUEFHRV9ERUJVRworCXByaW50aygibWFr ZV9wdGVzX3ByZXNlbnRcbiIpOworI2VuZGlmCisgIC8qCisgICAqIFRoZSBmaXJzdCBvcmRlcihp PTApIGlzIHRoZSBvcmRpbmFyeSBwdGUgKDFwYWdlKSwgdGhlbiB3ZSBza2lwIHRvCisgICAqIGFs bG9jYXRlIHRoZSBwdGUuCisgICAqLworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3VwZXJfcGFn ZV9uciAtIDE7IGkrKykgeworICAgICAgICAgICByZW0gPSAofmFkZHIgKyAxKSAmICgoUEFHRV9T SVpFIDw8IHN1cGVyX3BhZ2Vfb3JkZXJbaSsxXSkgLSAxKTsKKyAgICAgICAgICAgd2hpbGUgKHJl bSAmJgorICAgICAgICAgICAgICAgICAgKGFkZHIgJiAoKFBBR0VfU0laRSA8PCBzdXBlcl9wYWdl X29yZGVyW2ldKSAtIDEpKSA9PSAwVUwgJiYKKyAgICAgICAgICAgICAgICAgICgoZW5kIC0gYWRk ciApID49IChQQUdFX1NJWkUgPDwgc3VwZXJfcGFnZV9vcmRlcltpXSkpKSB7CisgICAgICAgICAg ICAgICAgICBpZihpJiZzdXBlcl9wYWdlX2JpdG1hc2sgJiAoMTw8aSkpIHsKKyAgICAgICAgICAg ICAgICAgICBzdXBlcl9wYWdlX3Jlc2VydmVbaV0rKzsKKyAgICAgICAgICAgICAgICAgICBzZXRf c3BfcmFuZ2UoYWRkciwgc3VwZXJfcGFnZV9vcmRlcltpXSwgc3VwZXJfcGFnZV9wcm90W2ldKTsK KyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZHIgKz0gUEFH RV9TSVpFIDw8IHN1cGVyX3BhZ2Vfb3JkZXJbaV07CisgICAgICAgICAgICAgICAgICAgICAgICBy ZW0gIC09IFBBR0VfU0laRSA8PCBzdXBlcl9wYWdlX29yZGVyW2ldOworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgfQorICAgICAgICBmb3IgKGkgPSBzdXBlcl9wYWdlX25yIC0gMTsgaSA+IDA7 IGktLSkgeworICAgICAgICAgICAgICAgIHdoaWxlICgKKyAgICAgICAgICAgICAgICAgICAgKGFk ZHIgJiAoKFBBR0VfU0laRSA8PCBzdXBlcl9wYWdlX29yZGVyW2ldKSAtIDEpKSA9PSAwVUwgJiYK KyAgICAgICAgICAgICAgICAgICAgKChlbmQgLSBhZGRyICkgPj0gKFBBR0VfU0laRSA8PCBzdXBl cl9wYWdlX29yZGVyW2ldKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgIGlmKHN1cGVyX3BhZ2Vf Yml0bWFzayAmICgxPDxpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3VwZXJfcGFnZV9y ZXNlcnZlW2ldKys7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRfc3BfcmFuZ2UoYWRkciwg c3VwZXJfcGFnZV9vcmRlcltpXSwgc3VwZXJfcGFnZV9wcm90W2ldKTsKKyAgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZHIgKz0gUEFHRV9TSVpFIDw8IHN1 cGVyX3BhZ2Vfb3JkZXJbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg IHJldHVybiAwOworICB9CisKK3ZvaWQgYWRqX3NwX3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwg aW50IHphcCwKKyAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgaW50IG9yZGVy KQorICB7CisgICAgICAgIGludCBpLGRvd25ncmFkZTsKKyAgICAgICAgcGdkX3QgKiBkaXI7Cisg ICAgICAgIHBtZF90ICpwbWQ7CisgICAgICAgIHB0ZV90ICogcHRlOworICAKKyAgICAgICAgZG93 bmdyYWRlPTA7CisgICAgICAgIGRpciA9IHBnZF9vZmZzZXQobW0sIGFkZHJlc3MpOworICAgICAg ICBwbWQgPSBwbWRfb2Zmc2V0KGRpciwgYWRkcmVzcyk7CisgICAgICAgIGlmICghcG1kKSByZXR1 cm47CisgICAgICAgIGFkZHJlc3MgJj0gflBHRElSX01BU0s7CisgICAgICAgIHB0ZSA9IHB0ZV9v ZmZzZXRfbWFwKHBtZCwgYWRkcmVzcyk7CisgICAgICAgIGlmICghcHRlKSByZXR1cm47CisvKgor V2UgYXNzdW1lIHRoYXQgdGhlIGxhcmdlc3Qgc3VwZXIgcGFnZSBpcyBsZXNzIG9yIGVxdWFsIHRv IHRoZQorbWFwcGVkIGFyZWEgYnkgdGhlIHBtZC4gVGhlbiBmb2xsb3dpbmcgY29kZSBkb2VzIG5v dCB0YWtlCit0aGUgcG1kX29mZnNldCBhZ2Fpbi4gSWYgeW91IHdhbnQgdG8gdXNlIGEgbGFyZ2Vy IHN1cGVyIHBhZ2UsCit5b3UgbmVlZCB0byBjaGVjayB0aGUgY29kZS4KKyovCisgICAgICAgIGZv ciAoaSA9IDA7IGkgPCAxPDxvcmRlcjsgaSArKykgeworIHJldHJ5OgorICAgICAgICAgICBpZihz dXBlcl9wYWdlX29yZGVyW3B0ZV90b19zcF9pbmRleCgqKHB0ZStpKSldPm9yZGVyKSB7CisgICAg ICAgICAgICAgICAgZG93bl9wdGVfc3AocHRlK2kscHRlX3RvX3NwX2luZGV4KCoocHRlK2kpKSk7 CisgICAgICAgICAgICAgICAgZG93bmdyYWRlPTE7CisgICAgICAgICAgICAgICAgZ290byByZXRy eTsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZih6YXApIGNsZWFyX3B0 ZV9zcChwdGUsIHB0ZV90b19zcF9pbmRleCgqcHRlKSk7CisgICAgICAgIGlmKHphcHx8ZG93bmdy YWRlKSBjbGVhcl9wbWRfc3AocG1kKTsKKyAgICAgICAgcmV0dXJuOworICB9CisgIAordm9pZCBh ZGpfc3BfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCB6YXAsIAorICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCkKKyAgeworICAgICAg ICBpbnQgaTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyByZW07CisgICAgICAgIGlmIChhZGRyID49 IGVuZCkKKyAgICAgICAgICAgICAgICBCVUcoKTsKKworI2lmIFNVUEVSX1BBR0VfREVCVUcKKwlw cmludGsoImFkal9zcF9yYW5nZSBtbTolcCwgYWRkcjolMGx4LCBlbmQ6JTBseFxuIixtbSxhZGRy LGVuZCk7CisjZW5kaWYKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHN1cGVyX3BhZ2VfbnIgLSAx OyBpKyspIHsKKyAgICAgICAgICAgcmVtID0gKH5hZGRyICsgMSkgJiAoKFBBR0VfU0laRSA8PCBz dXBlcl9wYWdlX29yZGVyW2krMV0pIC0gMSk7CisgICAgICAgICAgIHdoaWxlIChyZW0gJiYKKyAg ICAgICAgICAgICAgICAgIChhZGRyICYgKChQQUdFX1NJWkUgPDwgc3VwZXJfcGFnZV9vcmRlcltp XSkgLSAxKSkgPT0gMFVMICYmCisgICAgICAgICAgICAgICAgICAoKGVuZCAtIGFkZHIgKSA+PSAo UEFHRV9TSVpFIDw8IHN1cGVyX3BhZ2Vfb3JkZXJbaV0pKSkgeworICAgICAgICAgICAgICAgICAg ICAgICAgYWRqX3NwX3B0ZShtbSwgemFwLCBhZGRyLCBzdXBlcl9wYWdlX29yZGVyW2ldKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgIGFkZHIgKz0gUEFHRV9TSVpFIDw8IHN1cGVyX3BhZ2Vfb3Jk ZXJbaV07CisgICAgICAgICAgICAgICAgICAgICAgICByZW0gIC09IFBBR0VfU0laRSA8PCBzdXBl cl9wYWdlX29yZGVyW2ldOworICAgICAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICAgICAg Zm9yIChpID0gc3VwZXJfcGFnZV9uciAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICAg ICAgd2hpbGUgKAorICAgICAgICAgICAgICAgICAgICAoYWRkciAmICgoUEFHRV9TSVpFIDw8IHN1 cGVyX3BhZ2Vfb3JkZXJbaV0pIC0gMSkpID09IDBVTCAmJgorICAgICAgICAgICAgICAgICAgICAo KGVuZCAtIGFkZHIgKSA+PSAoUEFHRV9TSVpFIDw8IHN1cGVyX3BhZ2Vfb3JkZXJbaV0pKSkgewor ICAgICAgICAgICAgICAgICAgICAgICAgYWRqX3NwX3B0ZShtbSwgemFwLCBhZGRyLCBzdXBlcl9w YWdlX29yZGVyW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZHIgKz0gUEFHRV9TSVpF IDw8IHN1cGVyX3BhZ2Vfb3JkZXJbaV07CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgfQor I2lmIFNVUEVSX1BBR0VfREVCVUcKKwlwcmludGsoImFkal9zcF9yYW5nZSByZXR1cm5cbiIpOwor I2VuZGlmCisgICAgICAgIHJldHVybjsKKyAgfQorCit2b2lkIF9fYnJlYWtfYXJlYSAoc3RydWN0 IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb3JkZXIpIHsKKwlpbnQgaTsKKwl1bnNpZ25lZCBs b25nIHNpemUgPSAxIDw8IG9yZGVyOworCisJZm9yICggaSA9IDA7IGkgPCBzaXplOyBpKysgKSB7 CisJCXNldF9wYWdlX2NvdW50KHBhZ2UgKyBpLCAxKTsKKwl9CisJcmV0dXJuOworfQorCit2b2lk IGRvd25fcHRlX3NwKHB0ZV90ICpwdGVwdHIsIGludCBpbmRleCkgeworCWludCBpLG9yZGVyOwor CXB0ZV90ICphZGRyOworCW9yZGVyID0gc3VwZXJfcGFnZV9vcmRlcltpbmRleF07CisJYWRkciA9 IChwdGVfdCAqKSgodW5zaWduZWQgbG9uZykgcHRlcHRyICYgCisJCX4oKDFVTDw8KG9yZGVyICsg U0laRU9GX1BURV9MT0cyKSkgLSAxKSk7CisJZm9yICggaT0wOyBpIDwgMTw8b3JkZXI7IGkrKykg eworI2lmIENPTkZJR19YODYKKwkJKCooYWRkcitpKSkucHRlX2xvdyA9IAorCQkJKCgqKGFkZHIr aSkpLnB0ZV9sb3cgJiB+U1VQRVJfUEFHRV9NQVNLKSB8CisJCQlwZ3Byb3RfdmFsKHN1cGVyX3Bh Z2VfcHJvdFtpbmRleCAtMV0pOworI2Vsc2UKKwkJcHRlX3ZhbCgqKGFkZHIraSkpID0gKHB0ZV92 YWwoKihhZGRyK2kpKSAmIH5TVVBFUl9QQUdFX01BU0spIHwKKwkJCQkJIHBncHJvdF92YWwoc3Vw ZXJfcGFnZV9wcm90W2luZGV4IC0xXSk7CisjZW5kaWYKKwl9Cit9Cit2b2lkIGNsZWFyX3B0ZV9z cChwdGVfdCAqcHRlcHRyLCBpbnQgaW5kZXgpIHsKKwlpbnQgaSxvcmRlcjsKKwlwdGVfdCAqYWRk cjsKKwlvcmRlciA9IHN1cGVyX3BhZ2Vfb3JkZXJbaW5kZXhdOworCWFkZHIgPSAocHRlX3QgKiko KHVuc2lnbmVkIGxvbmcpIHB0ZXB0ciAmCisJCSB+KCgxVUw8PChvcmRlciArIFNJWkVPRl9QVEVf TE9HMikpIC0gMSkpOworCWZvciAoIGk9MDsgaSA8IDE8PG9yZGVyOyBpKyspIHsKKyNpZiBDT05G SUdfWDg2CisJCSgqKGFkZHIraSkpLnB0ZV9sb3cgJj0gIH5TVVBFUl9QQUdFX01BU0s7CisjZWxz ZQorCQlwdGVfdmFsKCooYWRkcitpKSkgJj0gIH5TVVBFUl9QQUdFX01BU0s7CisjZW5kaWYKKwl9 Cit9CmRpZmYgLXVyTiBsaW51eC0yLjUuNDQvbW0vc3dhcGZpbGUuYyBsaW51eC0yLjUuNDQtc3Vw ZXJwYWdlL21tL3N3YXBmaWxlLmMKLS0tIGxpbnV4LTIuNS40NC9tbS9zd2FwZmlsZS5jCVNhdCBP Y3QgMTkgMTM6MDE6MTcgMjAwMgorKysgbGludXgtMi41LjQ0LXN1cGVycGFnZS9tbS9zd2FwZmls ZS5jCVN1biBPY3QgMjcgMTc6MDI6MDYgMjAwMgpAQCAtNDU0LDYgKzQ1NCw5IEBACiAKIAlpZiAo c3RhcnQgPj0gZW5kKQogCQlCVUcoKTsKKyNpZiBDT05GSUdfU1VQRVJfUEFHRQorCWFkal9zcF9y YW5nZSh2bWEtPnZtX21tLCAxLCBzdGFydCwgZW5kKTsKKyNlbmRpZgogCWRvIHsKIAkJdW51c2Vf cGdkKHZtYSwgcGdkaXIsIHN0YXJ0LCBlbmQgLSBzdGFydCwgZW50cnksIHBhZ2UpOwogCQlzdGFy dCA9IChzdGFydCArIFBHRElSX1NJWkUpICYgUEdESVJfTUFTSzsK

--Multipart_Mon__28_Oct_2002_10:58:49_+0900_08273d60-- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/